尝试用 Zerotier 桥接两个 LAN 失败

310 天前
 cpstar

情况是这样的:

结果是,只能做到主网 OP 的 ZT 以二层桥接内外网实现直接交换数据包,而子 OP 的 ZT 本体接入没问题但子网设备最多实现 NAT 转换后接入而不能同样以二层桥接的方式互通到主网。

企图实现的目标很简单,通过 OP 构建的两个网,在网段等基本配置上实现一致的基础上,通过 ZT 做到桥接,把两个网并成一个大网。

搜了一搜,中文世界基本没有答案,英文世界里犄角旮旯里提到了关闭主网 DHCP ( ZT 配置流量控制丢弃 UDP67UDP68 )流量,但好像并没有生效,然后还有官网说明里的 FAQ 第一条 https://docs.zerotier.com/bridging/ ,但也没啥效果。也有说做不到的 https://discuss.zerotier.com/t/joining-two-zerotier-networks/14692

所以能么?怎么搞?哪里需要什么小技巧?

4248 次点击
所在节点    宽带症候群
57 条回复
ExplodingFKL
307 天前
vxlan + bridge ,请
matate
307 天前
问题描述看起来很费劲。
如果只是连通两个 lan ,zerotier 作为两个 lan 的连接器是完全可行的,只需配好路由就行。
比如说子网 m 有节点 A 和 B, A 的 ip 是 192.168.100.1, B 是 192.168.100.2 ;子网 n 有节点 C 和 D,ip 分别是 192.168.101.1 和 192.168.102.2 ,B 和 C 上安装了 zerotier 。 现在需要 D 访问 A ,那么 D 上要配置这样的路由 192.168.100.0/24 via 192.168.101.1 。然后依次在节点上配置路由即可。
cpstar
307 天前
@sadan9 20#
@matate 22#
还是没明白想要什么,实现 3# 图上结构比较没有难度。而且右侧的 node ,可以通过 NAT 再挂一个子网。但是无法实现的是,右侧也实现一个左侧的 LAN ,即通过 ZT 桥接两个 LAN 。

追加了补充。
Immunize
307 天前
@cpstar #6 对的 我给的 Blog 是 L3 路由而非 NAT ,二层桥接是有什么特殊需求么。
cpstar
307 天前
@Immunize 14# 额。。。你说的那个,我理解就是 NAT 而不是路由,路由转发后的 IP 包是源地址 IP ,NAT 之后 IP 包的源地址是网关的地址——也就是 172.16.x.x 给 172.17.y.y 发数据包,17.y.y 的设备看到的是 10.244.17.1 发给他的 IP 包——而如果转发的话,IP 包源地址是 172.16.x.x 。
Immunize
307 天前
@cpstar #25 10.244.17.1 和 10.244.16.1 都是静态下一跳路由呀,不是 NAT 。
你可以看我的抓包,4g 网络下的 iphone ping 内网的笔记本,笔记本看到的 ip 是 zerotier 网络分配的 ip 而非你所理解的 10.244.16.1 下一跳 ip 。

cpstar
307 天前
@Immunize 26# 我知道了,你这个没有用 luci_app_zerotier 的相关东西,那个里边有一个 NAT 选项,选定后自带脚本会加上一条 MASQUERADE 记录,也就是一条 NAT 规则,于是都按照 NAT 往外走了。而且官网文档上也有三条 iptables 的规则其中最后一条就这个 MASQUERADE 。
Immunize
306 天前
@cpstar #27 嗯 所以我理解 并不需要桥接来解决你的需求?
bjfane
304 天前
Zerotier 不是很清楚,没用过,有点不太明白并成一个大网什么意思,lan to lan 的任意节点互通,不知道能不能满足楼主的需求,我写过一个 wg 的 lan to lan 的摘要(可以看看是不是差什么了),https://ti.bi/posts/cloud_wireguard_lan_to_lan.html
程序员不是十分了解网络,wg 这个软件目前倒是算是比较熟悉了,大概用过 5 个不完全相同的场景
然后对网络的感知就是两个关键的东西,一个 nat 或者叫 masq ( 192.168.100.0/24 ,192.168.101.0/24 这两个网段互通是不是一定有 nat ?),一个路由表。
lazyyz
303 天前
@matate 你好,D 是 Windows ,配置路由后可以访问到 B ,但是不能访问到子网 m 里其他设备,比如 A ,是不是还需要哪里配置一下?
cpstar
303 天前
@bjfane 29#

你这个 lan to lan ,其实还是 peer to peer ,因为通过 NAT ,每个 peer 隐藏了身后的 LAN 。其实我的原始效果是想要两个 LAN 在二层形成一个 LAN ,即统一的地址和掩码,以及广播地址,这样深处两网的两台机器的通讯,是通过基本的网络交换完成的——在广播地址上呼喊 ARP ,然后数据包直接到达连接端口,这是硬件交换机的模型。但是 zerotier 在这里是一个软件产品,桥接了两个网,某种意义上并不存在“交换机端口”,所以我觉得不能把远端的 LAN 桥接入本地的 LAN ,原因也只在于此。

然后通过 wireguard 实现二层桥接,补充里说了,有人通过 wg 的 p2p 构建链路之后,创建 gre 隧道二层桥接网络。

再然后,如果不是一个 LAN 地址,不使用 NAT ,直接三层路由转发,那就是 4#和 27#说的事情了。现在我对于远端的 LAN 就是这么做的。
bjfane
303 天前
@cpstar 哦哦,没搞过,也不会,哈哈哈
sapphire
302 天前
对 Zerotier 不太熟悉,我理解你需要的是一个虚拟网桥,假设家庭主网络,就是拨号网络设为 VLAN10 ,桥接进 Office 的是 VLAN20 。然后找一台 Linux 设备,安装 Zerotier ,虚拟网卡是 zt0 ,linux 的 eth0 在 VLAN10 ,然后做一个 eth1 ,连接到 VLAN20 ,然后创建 bridge ,连接 zt0 和 eth1 ,之后 VLAN20 就是和 Office 桥接的 Lan
sapphire
302 天前
ivan_wl
302 天前
用 softether 的 L2 bridge 试试呢
matate
302 天前
@cpstar 哦,你是想搞 l2 across l3 ,好奇为什么会有这种需求,这种技术是古老且现成的,有一个思科的文档可参考: https://www.cisco.com/c/en/us/support/docs/ip/layer-two-tunnel-protocol-l2tp/116266-configure-l2-00.html

@lazyyz 如果 B 是 linux ,看一下 ip_forward 有没有开启
cpstar
302 天前
@matate 36# 最初的原动力就是 zerotier 说可以 L2 Bridge ,那问题就来了,能不能桥接两个 LAN (甚至多个),实践结果就是不能,只能在一个 LAN 中完成桥接,不能桥接到第二个 LAN 中——附言一的那张图。如果非要做,可能就是需要 L2TP 或者 wireguard 的 GRE 隧道等技术完成。
matate
302 天前
@cpstar zerotier 已经很好地完成他的 l3 的功能,所以任何一个 l3 vpn ,都可以宣称他支持 l2 bridge ,只需通过 l2tp 、GRE 等 l2 across l3 技术。
你描述的桥接两个 LAN ,指的是存在两个子 domain ,通过一个 bridge ,将这两个 domain 合并为一个大的,工作在 l2 的 domain ?这个是可以做到的。
但这个图中表示的是 l3 的 bridge 。因为 l2 只是数据链路层,没有 ip ,没有网关,也没有 nat 。
sapphire
302 天前
@cpstar 晚上注册了 Zerotier ,做了测试。用两台 ubuntu ,eth0 是主网络,eth1 连接主网络或第二网络/VLAN 。br0 桥接 eth1 和 zth ,然后双向可通,Home 的内网机器从 Office 拿到 DHCP 。

Zerotier 不分主从,不可能单侧可通,另一侧不通。
cpstar
302 天前
@matate 38# 初衷是这样的,分处两端的设备在 L2 直接通信,且不通过 l2tp 、gre 等方法。但事实上,zerotier 做不到。我观察,ARP 可以在主 LAN 和子 NODE 之间广播,但无法广播到子 NODE 桥接的 LAN 的其他设备,就是 A 询问 B 的 ARP ,C 、D 都能获得( C 、D 是两个节点 zerotier ,且允许桥接)而 B 是收不到数据包的。我猜应该是 zerotier 打开 L2 Bridging 之后,只能接收 ARP 并且给各个 NODE 发送,而不能转发 ARP 广播——这就需要看源码了。这是观察到的 ARP 信息,没有 ARP ,二层通信应该就完全没有了,AB 不通的原因在此。

@sapphire 39# 我觉得你的测试环境可能不清晰,也许通过其他路由策略完成了链路通道。某个角落文章说过桥接的时候要禁止 DHCP 包的广播,否则会让 zerotier 产生更加奇怪的情况。主从的问题,我也非常纳闷,两个同等的 LAN ,ZT 是怎么知道谁主谁从的,第一个接入还是什么,如果结合本贴前半截说的 ARP 问题,可能会有一个解释:不分主从,只能数据包无法通达。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015835

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX