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 的局域网下的主机。
使用 tcpdump 可以观察到 request 数据包在网络 A 的 lan 和 wg0 接口都有。路由规则方面:wg0 的 input 规则是收到了包的,但是,没有包出现在 wg0 的 output 规则。 在中继网络 B 上的 wireguard 接口上进行 tcpdump ,未收到任何来自 172.16.0.19 或者目标是 172.16.0.9 的数据包。
[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->wg0
和wg0->lan
和wg0->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
1
yaocf OP 找到原因了,是防火墙区域设置里的 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 中,并没有看到任何数据包??? |