openwrt,局域网下的主机无法直接连接 openwrt 主机的 wireguard 对端。有什么办法可以找到问题原因吗?

2021-11-27 21:36:30 +08:00
 yaocf

说明:

openwrt (电信 nat 下):下称网络 A 对端 wireguard (公网服务端):下称中继网络 B

当前网络结构如下:

网络 A 局域网接口(lan)地址:10.0.0.1/24 网络 A 的 wireguard 接口(wg0)地址:172.16.0.19/24 中继网络 B:172.16.0.1/24 中继网络 B 可连接到的其他对端 ip:172.16.0.9/32,172.16.0.8/32,172.16.0.5/32...(都是 172.16.0.0/24 网段下的)

目前的情况:

ssh 到网络 A 上,可以连通到 10.0.0.0/24 和 172.16.0.0/24 下的主机和对端。 在网络 A 的局域网下的主机( 10.0.0.106 ),无法直接连通到 172.16.0.0/24 下的任何主机(除了网络 A 自己:172.16.0.19 ) 中继网络 B 可以连通到网络 A 以及中继网络 B 可连接到的所有其他对端:172.16.0.9/32,172.16.0.8/32,172.16.0.5/32...(都是 172.16.0.0/24 网段下的) 中继网络 B 无法连接到网络 A 的局域网下的主机。

排查:网络 A 的局域网下的主机针对 172.16.0.9 发起 ping 。

使用 tcpdump 可以观察到 request 数据包在网络 A 的 lan 和 wg0 接口都有。路由规则方面:wg0 的 input 规则是收到了包的,但是,没有包出现在 wg0 的 output 规则。 在中继网络 B 上的 wireguard 接口上进行 tcpdump ,未收到任何来自 172.16.0.19 或者目标是 172.16.0.9 的数据包。

配置上:

网络 A 的 wireguard 配置:

[Interface]
PrivateKey = *****
Address = 172.16.0.19/24
DNS = 8.8.8.8

[Peer]
//开启了 openwrt 的 wireguard 接口的对端设置中的:路由允许的 IP 选项
PublicKey = *****
AllowedIPs = 172.16.0.0/24, 172.16.0.9/32, 172.16.0.99/32, 172.16.0.199/32
Endpoint = *****:32334
PersistentKeepalive = 25

防火墙:

接受了lan->wg0wg0->lanwg0->wan的转发,接受了wg0的入站和出站。

路由表:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         100.*.*.*     0.0.0.0         UG    0      0        0 wan
10.0.0.0        *               255.255.255.0   U     0      0        0 br-lan
172.16.0.0      *               255.255.255.0   U     0      0        0 wg0
172.16.0.1      *               255.255.255.255 UH    0      0        0 wg0
172.16.0.8      *               255.255.255.255 UH    0      0        0 wg0
172.16.0.9      *               255.255.255.255 UH    0      0        0 wg0
172.16.0.99     *               255.255.255.255 UH    0      0        0 wg0
843 次点击
所在节点    OpenWrt
1 条回复
yaocf
2021-11-28 07:04:59 +08:00
找到原因了,是防火墙区域设置里的 nat ( Ip 动态伪装)没开。
但是现象很奇怪,按理说,请求包的目的地址是 172.16.0.9 ,根据路由表它是可以正常找到路由,发到 wg0 的,wg0 应该也是可以从设置的 AllowIps 找到中继网络 B 的,中继网络 B 可以很容易地找到正确的对端 172.16.0.9 ,顶多是回来的时候,因为请求源地址(响应的目的地址) 10.0.0.106 不在 wg0 接口的网段,所以响应包会被丢弃。可为什么,我从 172.16.0.1 那台中继网络 B 中,并没有看到任何数据包???

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

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

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

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

© 2021 V2EX