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

求一个 openwrt 的 iptables 规则

  •  
  •   simplove · 2022-04-04 19:59:07 +08:00 · 3343 次点击
    这是一个创建于 723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有多台网络设备想通过 zerotier 组网,要求能够过 upd 的广播包。 试了以下两种方案。

    方案一是直接在两台电脑上面安装 zerotier 客户端,一台电脑发包,另外一台电脑抓包,实测可以收到 udp 包。

    方案二是直接在 openwrt 上用插件组网,电脑删除客户端,测试收不到 udp 包。 测试的 upd 抓包如下: 方案一可行那说明 zerotier.com 上面的设置是 OK 的。

    方案二过了 oepwnrt 路由器,那说明应该是 openwrt 导致的问题,在网上找了很多转发广播包的贴子,试了很多次发现都不行。

    有没有大佬给解个惑,谢谢

    第 1 条附言  ·  2022-04-04 21:21:12 +08:00

    内网发包过去是没问题的。过了zerotier就不行了。

    openwrt的防火墙也关闭了

    zerotier上面的路由也做了,桥接是开的,关了也试过都不行。

    22 条回复    2022-05-11 15:31:41 +08:00
    Tyanboot
        1
    Tyanboot  
       2022-04-04 20:05:35 +08:00
    方案二需要 zt 开启桥接功能吧。
    Aixiaoa
        2
    Aixiaoa  
       2022-04-04 20:08:24 +08:00 via iPhone
    看看 op 的防火墙设置
    simplove
        3
    simplove  
    OP
       2022-04-04 20:15:43 +08:00
    @Aixiaoa #iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
    iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
    [ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
    [ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
    只有默认的,试过了很多规则发现都不行。
    simplove
        4
    simplove  
    OP
       2022-04-04 20:16:33 +08:00
    @Tyanboot 桥接那个勾很早就打上了,就是不行。
    PC1 直接 ping PC2 是没问题的。
    cinhoo
        5
    cinhoo  
       2022-04-04 20:33:23 +08:00
    iptables -I FORWARD -i ztxxxxxxxx -j ACCEPT
    iptables -I FORWARD -o ztxxxxxxxx -j ACCEPT
    iptables -t nat -I POSTROUTING -o ztxxxxxxxx -j MASQUERADE
    Aixiaoa
        6
    Aixiaoa  
       2022-04-04 20:47:42 +08:00
    @simplove 你有试过关闭 firewall 么 或者更改过接口的 multicast_snooping 配置么
    hbytw1
        7
    hbytw1  
       2022-04-04 20:52:34 +08:00
    需要在 zerotier 控制端做路由。
    10.10.10.0/24 192.168.99.3
    192.168.1.0/24 192.168.99.1
    0.0.0.0/0 192.168.99.1
    192.168.3.0/24 192.168.99.3
    192.168.8.0/24 192.168.99.3
    指定访问那个 ip 段扔给那个 openwrt
    simplove
        8
    simplove  
    OP
       2022-04-04 21:13:16 +08:00
    @Aixiaoa ![]( https://s3.bmp.ovh/imgs/2022/04/04/1178fa9a412c6607.png)
    防火墙关闭了还是不行。
    在 openwrt 的实时连接里面可以看到能收到包,就是怎么样能把它转发给电脑是个问题
    simplove
        9
    simplove  
    OP
       2022-04-04 21:14:47 +08:00
    @yuantianwei 路由是有做的,不然 PC1 也不能 ping 通 PC2 了
    Aixiaoa
        10
    Aixiaoa  
       2022-04-04 21:16:34 +08:00
    @simplove 嗯 我知道你的 op 肯定可以收到广播包
    现在的问题实际上就在于 op 似乎默认把你的广播包给丢了 没有传给你 op 下面的设备
    如果你可以在 op 上抓包的话 我希望你能看下这个包在哪里被丢弃的 我需要更多的信息
    JohnSmith
        11
    JohnSmith  
       2022-04-04 21:54:35 +08:00 via iPhone
    抓包看看是不是 mss 的问题 我之前也才过坑
    Aixiaoa
        12
    Aixiaoa  
       2022-04-04 22:17:57 +08:00
    @simplove 正常来讲 广播包跨域默认丢弃的 所以你内网直接发和在 pc 上直接跑 zerotier 都是正常的 但是过了 op 就是不同的广播域 你现在应该看下是在 op 的哪里丢掉的 不过希望应该不大
    是否可以把你的 broadcast 转换成 multicast 呢?
    Aixiaoa
        13
    Aixiaoa  
       2022-04-05 00:11:05 +08:00
    simplove
        14
    simplove  
    OP
       2022-04-05 00:12:29 +08:00
    @Aixiaoa 用 Wireshark 抓了下 openwrt 上的包。
    plink.exe -batch -ssh -pw password [email protected] "tcpdump -ni br-lan -s 0 -w - not port 22" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
    发现并没有抓到目的地址是 255.255.255.255 的包,实时链接里面有,看来应该是 openwrt 把包给丢了。
    上面的这种环境实用算是方案三,一边是 pc 端安装 zerotier 客户端,一边是 openwrt 插件。
    在这种环境下,openwrt 实时链接里面还能看到有 udp 包过来。
    而在方案二里,openwrt 收不到 udp 包,应该是包直接被丢了。
    目前在网上找到的最靠谱的是这个贴子: https://www.haiyun.me/archives/1443.html
    可惜由于版本过高安装不了 iptables-mod-tee 。
    q403809607
        15
    q403809607  
       2022-04-05 00:14:47 +08:00 via Android
    你把 zerotier 上的路由表发上来看看
    simplove
        16
    simplove  
    OP
       2022-04-05 00:22:24 +08:00
    @Aixiaoa 这个我之前看到了。
    整理之后应该是这个样子的
    iptables -t mangle -A INPUT -i br-lan -d 255.255.255.255 -m ttl --ttl-gt 0 -j TTL --ttl-set 1
    iptables -t mangle -A INPUT -i ztrtatf7n4 -d 255.255.255.255 -m ttl --ttl-gt 0 -j TTL --ttl-set 1
    iptables -t mangle -A INPUT -i br-lan -d 255.255.255.255 -m ttl --ttl-gt 0 -j TEE --gateway 192.168.1.255
    iptables -t mangle -A INPUT -i ztrtatf7n4 -d 255.255.255.255 -m ttl --ttl-gt 0 -j TEE --gateway 192.168.192.255

    192.168.192.255 是 zerotire 的广播地址
    192.168.1.255 是本地的广播地址。
    这么写应该没错,不过仍然不行
    simplove
        17
    simplove  
    OP
       2022-04-05 00:26:36 +08:00
    @q403809607 ![]( https://www.png8.com/imgs/2022/04/05/8a1877e285b6c870.png)
    两台 pc 都可以直接 ping 通了,路由是可达的。
    Aixiaoa
        18
    Aixiaoa  
       2022-04-05 00:38:25 +08:00 via iPhone
    @simplove 这个规则和你说的 tee 装不了。其实都是同样的啊。 这个规则也需要 tee 支持。 不过你可以看下这个 https://github.com/nomeata/udp-broadcast-relay 编译一个带这个的 op 试试
    haohaolee
        19
    haohaolee  
       2022-04-05 16:52:14 +08:00 via Android
    这是广播域的问题,iptables 主要还是三层的,(虽然也有 ebtables )
    建议还是规规矩矩来,跑一个 UDP proxy 监听你要的端口,然后转发到另外一个接口,比如 br-lan
    st05329602009
        20
    st05329602009  
       2022-04-05 20:54:10 +08:00 via Android
    @yuantianwei 大佬的 planet 怎么联系你
    hbytw1
        21
    hbytw1  
       2022-04-06 22:51:31 +08:00
    @st05329602009 自己做个就可以了啊
    hbytw1
        22
    hbytw1  
       2022-05-11 15:31:41 +08:00
    @st05329602009 加微信:MTUwMTA5MzA1MDI=
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3304 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:28 · PVG 19:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.