V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MuJian
V2EX  ›  宽带症候群

华硕梅林固件 WireGuard 作为服务器可以向上级路由转发,作为客户端不可以?

  •  
  •   MuJian · 200 天前 · 1195 次点击
    这是一个创建于 200 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两台梅林:
    一台 ip 192.168.0.1 ,作为 wireguard 服务器, 192.168.6.2 连接他;
    一台 ip 192.168.2.1 ,作为客户端,连接服务器 192.168.6.2 ;

    192.168.6.0/24 设备可以访问 192.168.0.1/24 ,以及 192.168.0.1 的上级任意路由,比如 192.168.10.0/24 ;
    192.168.6.0/24 设备可以访问 192.168.2.0/24 ,但是不能访问 192.168.2.1 的上级路由器,比如 192.168.12.0/24

    通过查询 iptable 规则,FOREWARD 表一摸一样

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    num pkts bytes target prot opt in out source destination
    1 1585K 734M IPSEC_DROP_SUBNET_ICMP all -- * * 0.0.0.0/0 0.0.0.0/0
    2 1585K 734M IPSEC_STRONGSWAN all -- * * 0.0.0.0/0 0.0.0.0/0
    3 31466 1841K TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU
    4 1562K 732M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
    5 22979 1679K WGSF all -- * * 0.0.0.0/0 0.0.0.0/0
    6 16498 1297K OVPNSF all -- * * 0.0.0.0/0 0.0.0.0/0
    7 0 0 DROP all -- !br0 ppp0 0.0.0.0/0 0.0.0.0/0
    8 0 0 DROP all -- !br0 eth4 0.0.0.0/0 0.0.0.0/0
    9 4 224 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0
    10 988 42138 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
    11 564 31554 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT
    12 14942 1223K WGCF all -- * * 0.0.0.0/0 0.0.0.0/0
    13 14942 1223K OVPNCF all -- * * 0.0.0.0/0 0.0.0.0/0
    14 14942 1223K VPNCF all -- * * 0.0.0.0/0 0.0.0.0/0
    15 14942 1223K ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0
    16 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0


    仅有作为服务器的 192.168.0.1 ,wireguard 的规则被放到了 WGSF ,WGSI 里
    Chain WGSF (1 references)
    num pkts bytes target prot opt in out source destination
    1 6413 378K ACCEPT all -- * wgs1 0.0.0.0/0 0.0.0.0/0
    2 68 4080 ACCEPT all -- wgs1 * 0.0.0.0/0 0.0.0.0/0

    Chain WGSI (1 references)
    num pkts bytes target prot opt in out source destination
    1 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:59999
    2 570 29640 ACCEPT all -- wgs1 * 0.0.0.0/0 0.0.0.0/0


    作为客户端的 192.168.2.1 ,wireguard 规则被放到了 WGCF ,WGCI 里

    Chain WGCF (1 references)
    num pkts bytes target prot opt in out source destination
    1 0 0 TCPMSS tcp -- * wgc1 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU
    2 0 0 ACCEPT all -- * wgc1 0.0.0.0/0 0.0.0.0/0
    3 6082 365K ACCEPT all -- wgc1 * 0.0.0.0/0 0.0.0.0/0
    4 0 0 TCPMSS tcp -- * wgc2 0.0.0.0/0 0.0.0.0/0 tcpflags: 0x06/0x02 TCPMSS clamp to PMTU
    5 0 0 ACCEPT all -- * wgc2 0.0.0.0/0 0.0.0.0/0
    6 458 27480 ACCEPT all -- wgc2 * 0.0.0.0/0 0.0.0.0/0

    Chain WGCI (1 references)
    num pkts bytes target prot opt in out source destination
    1 0 0 ACCEPT all -- wgc1 * 0.0.0.0/0 0.0.0.0/0
    2 855 44460 ACCEPT all -- wgc2 * 0.0.0.0/0 0.0.0.0/0


    个人粗浅的理解,应该没有限制才对?



    那么唯一的区别就是做位客户端也收到 VPN Director 限制
    但是 VPN Director 规则好像只能指定出口

    我已经指定远程 ip 192.168.6.0/24 走 WGC2 ,但是只能是让 192.168.2.0/24 和 192.168.6.0/24 互访。


    请教我应该如何设置能让 192.168.6.0/24 设备能够访问 192.168.12.0/24 ?
    8 条回复    2024-04-29 13:55:39 +08:00
    ranaanna
        1
    ranaanna  
       200 天前
    192.168.6.0/24 设备之所以能访问 192.168.10.0/24 ,是因为 192.168.0.1 对来自 192.168.6.0/24 的流量进行了 SNAT 或 masquerading 。所以要能访问 192.168.12.0/24 ,需要 192.168.2.1 也做同样的事情。这是 iptables nat 表的事情。
    ranaanna
        2
    ranaanna  
       200 天前
    没用过华硕的固件,但是感觉这个 vpn director 就是干这件事的,即让一端的 lan 通过隧道到另一端出去。这是单向的。所以要实现双向,需要增加一条隧道。
    ranaanna
        3
    ranaanna  
       200 天前
    抱歉应该和 vpn director 没有关系。似乎 iptables rules 可以解决?
    ···
    iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -d 192.168.10.0/24 -j SNAT --to-source 192.168.0.1
    iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -d 192.168.12.0/24 -j SNAT --to-source 192.168.2.1
    ···
    MuJian
        4
    MuJian  
    OP
       200 天前
    @ranaanna
    我开始也以为是 nat 的事,但是我查了 dat 表也是一样的。

    Chain POSTROUTING (policy ACCEPT 4770 packets, 314K bytes)
    pkts bytes target prot opt in out source destination
    201K 14M PUPNP all -- * ppp0 0.0.0.0/0 0.0.0.0/0
    107K 7637K MASQUERADE all -- * ppp0 !120.4.83.xxx 0.0.0.0/0
    71 3355 MASQUERADE all -- * eth4 !192.168.10.2 0.0.0.0/0
    381 78173 MASQUERADE all -- * br0 192.168.0.0/24 192.168.0.0/24
    MuJian
        5
    MuJian  
    OP
       200 天前
    增加了 snat 也是不通

    Chain POSTROUTING (policy ACCEPT 111 packets, 7052 bytes)
    pkts bytes target prot opt in out source destination
    2268 182K PUPNP all -- * ppp0 0.0.0.0/0 0.0.0.0/0
    862 87511 MASQUERADE all -- * ppp0 !120.4.83.169 0.0.0.0/0
    20 1200 MASQUERADE all -- * eth4 !192.168.12.4 0.0.0.0/0
    979 79728 MASQUERADE all -- * br0 192.168.2.0/24 192.168.2.0/24
    0 0 SNAT all -- * * 192.168.6.0/24 192.168.12.0/24 to:192.168.2.1
    ranaanna
        6
    ranaanna  
       200 天前
    先不管其他设备( VPN director ),隧道的地址只有两个:192.168.6.1 (假设服务器的地址)和 192.168.6.2 。192.168.6.2 这边应该没有问题,12 本来就可以访问,10 通过 nat 访问。但是 192.168.6.1 ,按照规则转换为 eth4 10 的地址,当然就访问不了 12 的地址了。还是 nat 的问题,并不是两边一样就可以访问的。
    最简单粗暴的解决办法是再增加一条隧道。
    ranaanna
        7
    ranaanna  
       200 天前
    或者说大多数情况下 VPN 都是选择一个 remote gateway 出去。像这样 multiple gateways 的情况,估计需要额外的 nat 设计才能达到目的
    MuJian
        8
    MuJian  
    OP
       200 天前
    @ranaanna 如果梅林作为服务器端,让 192.168.6.2 取连他就能访问上级路由。

    我刚又发现,192.168.0.1 里面有路由
    192.168.6.0/24 dev wgs1 scope link
    192.168.9.6 dev wgs1 scope link
    但是手动给 192.168.2.1 添加
    ip route add 192.168.6.0/24 dev wgc2 scope link
    ip route add 192.168.8.2 dev wgc2 scope link

    最后还是不通,看来应该还是 vpn director 接管了路由。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 629ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.