V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
yaocf
V2EX  ›  OpenWrt

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

  •  
  •   yaocf · 2021-11-27 21:36:30 +08:00 · 803 次点击
    这是一个创建于 1077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    说明:

    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
    
    yaocf
        1
    yaocf  
    OP
       2021-11-28 07:04:59 +08:00 via Android
    找到原因了,是防火墙区域设置里的 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 中,并没有看到任何数据包???
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2524 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.