simplove

求一个 openwrt 的 iptables 规则

  •  
  •   simplove · Apr 4, 2022 · 4676 views
    This topic created in 1514 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    Supplement 1  ·  Apr 4, 2022

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

    openwrt的防火墙也关闭了

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

    22 replies    2022-05-11 15:31:41 +08:00
    Tyanboot
        1
    Tyanboot  
    PRO
       Apr 4, 2022
    方案二需要 zt 开启桥接功能吧。
    Aixiaoa
        2
    Aixiaoa  
       Apr 4, 2022 via iPhone
    看看 op 的防火墙设置
    simplove
        3
    simplove  
    OP
       Apr 4, 2022
    @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
       Apr 4, 2022
    @Tyanboot 桥接那个勾很早就打上了,就是不行。
    PC1 直接 ping PC2 是没问题的。
    cinhoo
        5
    cinhoo  
       Apr 4, 2022
    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  
       Apr 4, 2022
    @simplove 你有试过关闭 firewall 么 或者更改过接口的 multicast_snooping 配置么
    hbytw1
        7
    hbytw1  
       Apr 4, 2022
    需要在 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
       Apr 4, 2022
    @Aixiaoa ![]( https://s3.bmp.ovh/imgs/2022/04/04/1178fa9a412c6607.png)
    防火墙关闭了还是不行。
    在 openwrt 的实时连接里面可以看到能收到包,就是怎么样能把它转发给电脑是个问题
    simplove
        9
    simplove  
    OP
       Apr 4, 2022
    @yuantianwei 路由是有做的,不然 PC1 也不能 ping 通 PC2 了
    Aixiaoa
        10
    Aixiaoa  
       Apr 4, 2022
    @simplove 嗯 我知道你的 op 肯定可以收到广播包
    现在的问题实际上就在于 op 似乎默认把你的广播包给丢了 没有传给你 op 下面的设备
    如果你可以在 op 上抓包的话 我希望你能看下这个包在哪里被丢弃的 我需要更多的信息
    JohnSmith
        11
    JohnSmith  
       Apr 4, 2022 via iPhone
    抓包看看是不是 mss 的问题 我之前也才过坑
    Aixiaoa
        12
    Aixiaoa  
       Apr 4, 2022
    @simplove 正常来讲 广播包跨域默认丢弃的 所以你内网直接发和在 pc 上直接跑 zerotier 都是正常的 但是过了 op 就是不同的广播域 你现在应该看下是在 op 的哪里丢掉的 不过希望应该不大
    是否可以把你的 broadcast 转换成 multicast 呢?
    simplove
        14
    simplove  
    OP
       Apr 5, 2022
    @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  
       Apr 5, 2022 via Android
    你把 zerotier 上的路由表发上来看看
    simplove
        16
    simplove  
    OP
       Apr 5, 2022
    @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
       Apr 5, 2022
    @q403809607 ![]( https://www.png8.com/imgs/2022/04/05/8a1877e285b6c870.png)
    两台 pc 都可以直接 ping 通了,路由是可达的。
    Aixiaoa
        18
    Aixiaoa  
       Apr 5, 2022 via iPhone
    @simplove 这个规则和你说的 tee 装不了。其实都是同样的啊。 这个规则也需要 tee 支持。 不过你可以看下这个 https://github.com/nomeata/udp-broadcast-relay 编译一个带这个的 op 试试
    haohaolee
        19
    haohaolee  
       Apr 5, 2022 via Android
    这是广播域的问题,iptables 主要还是三层的,(虽然也有 ebtables )
    建议还是规规矩矩来,跑一个 UDP proxy 监听你要的端口,然后转发到另外一个接口,比如 br-lan
    st05329602009
        20
    st05329602009  
       Apr 5, 2022 via Android
    @yuantianwei 大佬的 planet 怎么联系你
    hbytw1
        21
    hbytw1  
       Apr 6, 2022
    @st05329602009 自己做个就可以了啊
    hbytw1
        22
    hbytw1  
       May 11, 2022
    @st05329602009 加微信:MTUwMTA5MzA1MDI=
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5046 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 05:41 · PVG 13:41 · LAX 22:41 · JFK 01:41
    ♥ Do have faith in what you're doing.