有一个关于 wireguard AllowedIPs 的问题, 想在节点 B 上以 192.168.0.2 地址访问节点 A 10.13.0.1, 请问什么方法可以做到吗?
在节点 A 上我有以下配置
[Interface]
Address = 10.13.0.1/24
PrivateKey = aaaaaaaa
ListenPort = 0
[Peer]
PublicKey = bbbbbb
AllowedIPs = 10.13.0.2/32
在节点 B 上有以下配置
[Interface]
Address = 192.168.0.1/24
PrivateKey = bbbbbbb
ListenPort = 0
[Peer]
PublicKey = aaaaaaa
AllowedIPs = 192.168.0.2/32:10.13.0.1/32
1
titanium98118 2023-04-20 17:43:44 +08:00 1
根据我使用 wireguard 的理解
A 和 B 的[Interface] Address 需要是一个网段,不然他们怎么能连通? A 的 AllowedIPs 表示哪个 IP 或 IP 段能与 A 建立通信,在这里应该填写 B 的[Interface] Address B 的 AllowedIPs 表示哪个 IP 或 IP 段需要经过 wireguard 路由 #A [Interface] Address = 192.168.0.1/24 PrivateKey = aaaaaaaa ListenPort = 0 [Peer] PublicKey = bbbbbb AllowedIPs = 192.168.0.2/32 #B [Interface] Address = 192.168.0.2/24 PrivateKey = bbbbbbb ListenPort = 0 [Peer] PublicKey = aaaaaaa AllowedIPs = 192.168.0.1/32,10.13.0.1/32 wireguard 起来后,看能不能 Ping 通相方,然后你需要在 A 上做一个 NAT: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE |
2
SGTeam 2023-04-20 17:52:16 +08:00 via Android
不需要指定那个 endpoint 吗?
|
3
sofukwird OP @titanium98118 节点 B 网段是需要不一样的,握手是成功的,大概是要做次 SNAT ?
|
5
rrfeng 2023-04-20 18:12:49 +08:00 via Android
interface 是本地接口地址
allowedips 就是加路由,把目标地址路由到接口。 所以要添加:对端网段地址,对端接口地址。 一般来说,多个节点的一个大 wg ,接口地址分配一个段,不和任意内网地址重合,直接把这个段放进去就行了。 |
6
questionyu 2023-04-20 19:49:11 +08:00 1
一般来说,像这样的 Site-to-Site 的 VPN ,需要梳理清楚 4 个网络:
1. 互联网(指两个路由器的 WAN 端口所连接的网络,需要填写地址到对方路由器 WireGuard 配置 [Peer] 中的 Endpoint ) 2. WireGuard 网络(指两个路由器 WireGuard 配置 [Interface] 中的地址所在的网络,需要在同一内网,且不与两个路由器内网地址重复) 3. 路由器 A 内网(指路由器 A LAN 端口所连接的网络,需要填写网段到路由器 B WireGuard 配置 [Peer] 中的 AllowedIPs ) 4. 路由器 B 内网(指路由器 B LAN 端口所连接的网络,需要填写网段到路由器 A WireGuard 配置 [Peer] 中的 AllowedIPs ) 搞清楚这四个网络以后,再在两个路由器上做好转发就可以实现两端局域网互通了。 |
7
azure2023us559 2023-04-20 20:05:04 +08:00 1
b 上再加一个 client ,地址是 10.13.0.2
参考 https://github.com/0neday/gl-inet-mt-3000/blob/main/readme.md #!/bin/sh ip link add wg-client2 type wireguard ip link set mtu 1420 up dev wg-client2 ip -4 address add 10.13.0.2 dev wg-client2 ip route add 10.13.1.0/24 dev wg-client2 wg setconf wg-client2 client2.conf iptables -t nat -A POSTROUTING -o wg-client2 -j MASQUERADE iptables -I FORWARD -i wg-client2 -j ACCEPT iptables -I FORWARD -o wg-client2 -j ACCEPT # client2.conf [Interface] PrivateKey = [Peer] PublicKey = Endpoint = PersistentKeepalive = 25 AllowedIPs = 0.0.0.0/0 |
8
azure2023us559 2023-04-20 20:07:41 +08:00
如果 a 和 b 都是 wg client 的话,那么要在 wg server 上 要开启 client 数据转发,加一条 iptables
iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT |
9
Daeyn 2023-04-20 21:01:04 +08:00 via iPhone
|
10
azure2023us559 2023-04-20 22:25:32 +08:00 1
更正下
ip route add 10.13.0.0/24 dev wg-client2 让这个段的地址走 wg-client2 |
11
yunisky 2023-04-21 01:59:47 +08:00 1
我做了个 p2mp 结构的多点互访,AllowedIPs 直接写 0.0.0.0 ,然后用动态路由协议来搞路由就好了。
如果站点少,其实用静态路由解决也行。 wireguard 就专门拿来打隧道,路由的问题还是交给专业的组件来解决吧。 |
12
sofukwird OP |
13
thereone 2023-04-21 19:02:38 +08:00 1
搞的麻烦,个人用我永远推荐 softether 这个软件。支持 IPv4 和 IPv6 同时可以随时切换采用 TCP 或者 UDP 协议。而且配置全图形界面使用简单方便同时还有丰富的接入策略。配合 openwrt 可以做到路由器两端某一个接口二层点对点隧道都行逻辑上来说就是一根超长的网线,不要太强大了。
|
14
sofukwird OP @thereone 你说的对,但我要做的是点对点直连,softether 做不到,始终要个中转站
|
15
thereone 2023-04-21 20:51:18 +08:00 1
@sofukwird 要中转站?我这边异地 IPV6 直连根本不需要中转。老家 IPv6 做服务器同时用 dynv6 的 ddns 更新 ipv6 地址,现在住的位置 ipv6 直连回老家。根本不需要中转啊。
|
16
233373 2023-04-27 09:21:07 +08:00
@sofukwird wireguard 好像做不到点对点直连,默认都是要走 wg 服务端中转的,大佬有什么方案可以实现点对点吗?之前研究过 headscale ,但是不知道为什么有一台手机一直连不上就放弃了。。。。
|
17
sbilly 2023-04-27 09:42:05 +08:00
wireguard 实现点对点 fullmesh 完全没问题
|
18
izhaohui 2023-04-27 12:17:31 +08:00 via iPhone
allowedIP 就是哪些网络( subnet / address )能通过这个节点到达
|