说明:
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->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 