有多台网络设备想通过 zerotier 组网,要求能够过 upd 的广播包。 试了以下两种方案。
方案一是直接在两台电脑上面安装 zerotier 客户端,一台电脑发包,另外一台电脑抓包,实测可以收到 udp 包。
方案二是直接在 openwrt 上用插件组网,电脑删除客户端,测试收不到 udp 包。 测试的 upd 抓包如下: 方案一可行那说明 zerotier.com 上面的设置是 OK 的。
方案二过了 oepwnrt 路由器,那说明应该是 openwrt 导致的问题,在网上找了很多转发广播包的贴子,试了很多次发现都不行。
有没有大佬给解个惑,谢谢
内网发包过去是没问题的。过了zerotier就不行了。
openwrt的防火墙也关闭了
zerotier上面的路由也做了,桥接是开的,关了也试过都不行。
1
Tyanboot 2022-04-04 20:05:35 +08:00
方案二需要 zt 开启桥接功能吧。
|
2
Aixiaoa 2022-04-04 20:08:24 +08:00 via iPhone
看看 op 的防火墙设置
|
3
simplove OP @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 只有默认的,试过了很多规则发现都不行。 |
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 |
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 |
8
simplove OP @Aixiaoa ![]( https://s3.bmp.ovh/imgs/2022/04/04/1178fa9a412c6607.png)
防火墙关闭了还是不行。 在 openwrt 的实时连接里面可以看到能收到包,就是怎么样能把它转发给电脑是个问题 |
9
simplove OP @yuantianwei 路由是有做的,不然 PC1 也不能 ping 通 PC2 了
|
10
Aixiaoa 2022-04-04 21:16:34 +08:00
@simplove 嗯 我知道你的 op 肯定可以收到广播包
现在的问题实际上就在于 op 似乎默认把你的广播包给丢了 没有传给你 op 下面的设备 如果你可以在 op 上抓包的话 我希望你能看下这个包在哪里被丢弃的 我需要更多的信息 |
11
JohnSmith 2022-04-04 21:54:35 +08:00 via iPhone
抓包看看是不是 mss 的问题 我之前也才过坑
|
12
Aixiaoa 2022-04-04 22:17:57 +08:00
@simplove 正常来讲 广播包跨域默认丢弃的 所以你内网直接发和在 pc 上直接跑 zerotier 都是正常的 但是过了 op 就是不同的广播域 你现在应该看下是在 op 的哪里丢掉的 不过希望应该不大
是否可以把你的 broadcast 转换成 multicast 呢? |
13
Aixiaoa 2022-04-05 00:11:05 +08:00
|
14
simplove OP @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 。 |
15
q403809607 2022-04-05 00:14:47 +08:00 via Android
你把 zerotier 上的路由表发上来看看
|
16
simplove OP @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 是本地的广播地址。 这么写应该没错,不过仍然不行 |
17
simplove OP @q403809607 ![]( https://www.png8.com/imgs/2022/04/05/8a1877e285b6c870.png)
两台 pc 都可以直接 ping 通了,路由是可达的。 |
18
Aixiaoa 2022-04-05 00:38:25 +08:00 via iPhone
@simplove 这个规则和你说的 tee 装不了。其实都是同样的啊。 这个规则也需要 tee 支持。 不过你可以看下这个 https://github.com/nomeata/udp-broadcast-relay 编译一个带这个的 op 试试
|
19
haohaolee 2022-04-05 16:52:14 +08:00 via Android
这是广播域的问题,iptables 主要还是三层的,(虽然也有 ebtables )
建议还是规规矩矩来,跑一个 UDP proxy 监听你要的端口,然后转发到另外一个接口,比如 br-lan |
20
st05329602009 2022-04-05 20:54:10 +08:00 via Android
@yuantianwei 大佬的 planet 怎么联系你
|
21
hbytw1 2022-04-06 22:51:31 +08:00
@st05329602009 自己做个就可以了啊
|
22
hbytw1 2022-05-11 15:31:41 +08:00
@st05329602009 加微信:MTUwMTA5MzA1MDI=
|