一个关于 Wireguard AllowedIPs 的问题

2023-04-20 17:13:29 +08:00
 sofukwird

有一个关于 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
3304 次点击
所在节点    宽带症候群
18 条回复
titanium98118
2023-04-20 17:43:44 +08:00
根据我使用 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
SGTeam
2023-04-20 17:52:16 +08:00
不需要指定那个 endpoint 吗?
sofukwird
2023-04-20 18:01:54 +08:00
@titanium98118 节点 B 网段是需要不一样的,握手是成功的,大概是要做次 SNAT ?
sofukwird
2023-04-20 18:02:40 +08:00
@SGTeam 我省略了无关配置
rrfeng
2023-04-20 18:12:49 +08:00
interface 是本地接口地址

allowedips 就是加路由,把目标地址路由到接口。

所以要添加:对端网段地址,对端接口地址。

一般来说,多个节点的一个大 wg ,接口地址分配一个段,不和任意内网地址重合,直接把这个段放进去就行了。
questionyu
2023-04-20 19:49:11 +08:00
一般来说,像这样的 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 )

搞清楚这四个网络以后,再在两个路由器上做好转发就可以实现两端局域网互通了。
azure2023us559
2023-04-20 20:05:04 +08:00
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
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
Daeyn
2023-04-20 21:01:04 +08:00
azure2023us559
2023-04-20 22:25:32 +08:00
更正下

ip route add 10.13.0.0/24 dev wg-client2

让这个段的地址走 wg-client2
yunisky
2023-04-21 01:59:47 +08:00
我做了个 p2mp 结构的多点互访,AllowedIPs 直接写 0.0.0.0 ,然后用动态路由协议来搞路由就好了。
如果站点少,其实用静态路由解决也行。
wireguard 就专门拿来打隧道,路由的问题还是交给专业的组件来解决吧。
sofukwird
2023-04-21 02:16:48 +08:00
@yunisky 确实,还是自己学艺不精导致的问题,如果我懂动态路由的话就不会被绑定在 wireguard 的路由脚本上了

不过 IPv6 能解决问题也挺好
thereone
2023-04-21 19:02:38 +08:00
搞的麻烦,个人用我永远推荐 softether 这个软件。支持 IPv4 和 IPv6 同时可以随时切换采用 TCP 或者 UDP 协议。而且配置全图形界面使用简单方便同时还有丰富的接入策略。配合 openwrt 可以做到路由器两端某一个接口二层点对点隧道都行逻辑上来说就是一根超长的网线,不要太强大了。
sofukwird
2023-04-21 19:38:29 +08:00
@thereone 你说的对,但我要做的是点对点直连,softether 做不到,始终要个中转站
thereone
2023-04-21 20:51:18 +08:00
@sofukwird 要中转站?我这边异地 IPV6 直连根本不需要中转。老家 IPv6 做服务器同时用 dynv6 的 ddns 更新 ipv6 地址,现在住的位置 ipv6 直连回老家。根本不需要中转啊。
233373
2023-04-27 09:21:07 +08:00
@sofukwird wireguard 好像做不到点对点直连,默认都是要走 wg 服务端中转的,大佬有什么方案可以实现点对点吗?之前研究过 headscale ,但是不知道为什么有一台手机一直连不上就放弃了。。。。
sbilly
2023-04-27 09:42:05 +08:00
wireguard 实现点对点 fullmesh 完全没问题
izhaohui
2023-04-27 12:17:31 +08:00
allowedIP 就是哪些网络( subnet / address )能通过这个节点到达

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/934101

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX