simplove

求一个 openwrt 的 iptables 规则

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