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

尝试用 Zerotier 桥接两个 LAN 失败

  •  
  •   cpstar · 315 天前 · 4273 次点击
    这是一个创建于 315 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情况是这样的:

    • 家里的主网,软路由 OP ,网段 192.168.100.0/24
    • 办公室 win10 主机及其 hyperV 的多台虚机
    • 继续虚一个 OpenWRT 构建子网串联主机及其多台虚机,构建子网,网段可以放在 192.168.101.0/24 或者 192.168.100.0/23 ,关闭 DHCP
    • OP 都上 zerotier 插件,接口设备桥接进 br-lan ,并且配置 Allow Bridging 以及其他必要的配置,关闭 ZT 的 DHCP

    结果是,只能做到主网 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

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

    第 1 条附言  ·  313 天前

    来自官网的图片。根据官网和OpenWRT的相关自动化配置,在左侧主网实现桥接没有问题——即便zerotier本身设计的目标是P2P。但是ZT仍然提供了L2 桥接能力,那么能否在图片上替代右侧各个节点同样桥接入一个LAN呢?这是本人尝试的事情,并以失败告终——个人的理解,可能收各种广播包的限制,一个zt只能接入一个L2桥接的网络。

    另外每个node通过NAT带一堆子网甚至子子网都是不复杂的配置——设置好zt网内路由即可,但是这除了需要ZT主机将数据包转换成ZT协议到公网上传播以外,还需要ZT主机做NAT转换,将数据包转发入子网。而桥接的目的就是要缩减第二步,不做NAT,本地子网的设备A找远端子网的设备B,只需要在二层直接交换,而不再去发送到三层找各自网关做地址转换。

    第 2 条附言  ·  313 天前
    再补充一下,研究了 wireguard 的方案,基本思路是完成两台设备的点对点连接之后,再构建 gre 隧道,设置 gre 隧道的路由策略实现二层桥接。
    57 条回复    2024-03-14 10:26:14 +08:00
    ranaanna
        1
    ranaanna  
       315 天前
    一句话,不能。家里主网已经和虚拟网实现了 layer-2 bridging 并通过一个路由连到 internet ,这就是第一个链接告诉你做的事情,使得不能运行 zerotier 的设备也能接入,相当于可以走一座桥,第二个链接则告诉你的是不能再做一个 layer-2 bridge 把两个物理网连起来,相当于不能走两个桥。另一边办公室的网断也应该是 192.168.100.0/24 ,但是,你会发现,达不到你想要实现的目标
    humbass
        2
    humbass  
       315 天前
    当然是可以连的,只不过速度没那么快而已。
    zerotier 后台网段那边要注意设置下。
    cpstar
        3
    cpstar  
    OP
       315 天前
    ![]( https://docs.zerotier.com/assets/images/integrating-bridging-e6f03a9010ccb420128927ed8cf1b3e7.png)

    官方也给了这么一个图片,原则上,如果左边能够实现子网的目标,右边也可以出现同样的网络结构,甚至再出现第三个第四个,变相成了某种网桥设备,将若干个物理子网在配置上达成一致形成一个网络。至于 @ranaanna 2# 提到的 WAN 出口问题,窃以为两个路由设备的默认路由都会指向 WAN 口,而只处理虚拟达成的大内网规则,并不会出现多出口的情况。第二个链接也确实提到了 zt 的 P2P 初心,可是既然能够实现了左侧的桥接,在右边再实现一个桥接,理论上我觉得还是能力所及的。

    @humbass 3# 速度问题咱暂且不讨论,毕竟实现子网并不是以速度为目标而是一方面减少 NAT (可以左右两个 NAT 完成 ZT 的 P2P 初心)另一方面在子网的设备配置上减少穿墙打洞减少麻烦。至于配置,具体怎么搞呢?我只设置了 ZT 虚网内的路由策略,关闭了 ZT 的 DHCP ,子设备一律指定 IP ,涉及两个 OP 的成员都设置了允许桥接,甚至阻断 DHCP 流量,还需要搞什么呢?

    开了两个 hyperV 和一堆配套的做了试验,目前尚未达成。
    Immunize
        4
    Immunize  
       315 天前
    两个 LAN 为什么要做桥接,用路由呀。可以参考我的 Blog https://www.iloft.xyz/archives/openwrt-zerotier.html
    yaott2020
        5
    yaott2020  
       315 天前 via Android
    三层不行吗
    cpstar
        6
    cpstar  
    OP
       315 天前
    @Immunize 4#
    @yaott2020 5#
    就是想做到完全桥接,而不是 NAT
    LGA1150
        7
    LGA1150  
       315 天前 via Android
    @cpstar #6
    纯 L3 可以不用 NAT
    joyhub2140
        8
    joyhub2140  
       315 天前
    连接两个 lan ,还得用 VPN ,而且还是 ipsec 那种。
    wwhc
        9
    wwhc  
       315 天前
    可用 ssh_vpn 实现:help.ubuntu.com/community/SSH_VPN
    PbCopy111
        10
    PbCopy111  
       315 天前
    我是这样的,openwrt 在局域网里,为了外网访问整个局域网,在 openwrt 里面要设置:
    防火墙--自定义规则
    iptables -I FORWARD -i ztly524plm -j ACCEPT
    iptables -I FORWARD -o ztly524plm -j ACCEPT
    iptables -t nat -I POSTROUTING -o ztly524plm -j MASQUERADE

    其中 ztly524plm 是在 openwrt 的 zerotier 的接口信息里得到的名称

    然后再去 zerotier 里面设置 bridge 和转发整个局域网出来。

    最后我可以在外网访问整个局域网的机器了。
    flynaj
        11
    flynaj  
       315 天前 via Android
    局域网互联这样配置 ,在 zerotier 网站配置
    我的是全部安装到路由器上,这样我的 4 个局域网就可以互通了。非常方便。
    humbass
        12
    humbass  
       315 天前
    @cpstar 我目前是在路由实现的

    配置基本上跟 11 楼的 @flynaj 的一样
    szdosar
        13
    szdosar  
       315 天前 via Android
    在 zerotier 网页后台设置路由就可以了。没必要搞这么麻烦。
    cpstar
        14
    cpstar  
    OP
       315 天前
    @PbCopy111 10# 这个方法只能桥接出一个网络,参见 3#的那张图


    @flynaj 11# @humbass 12# 这种实现起来没有难度,以 11#的图举例子,所有 16.0/21 的设备都以 100.16 呈现给对方所有网络,在发送 IP 包的时候,会涉及到 IP 改写这个三层协议的内容。而期望的目标是二层桥接,即 A 设备找另外一个网络的 B 设备,通过 ARP 获得到 MAC 之后,直接“交换机”进行数据包交换从 A 到 B 。而三层 IP 改写也好 NAT 也罢,都需要经过中间网关 C 和 D 进行 IP 改写再送出。还是按照 11# 的图,原则上可以说这个 ZT 网络只有四台设备,然后这四台后边带着四个 LAN 。
    yaott2020
        15
    yaott2020  
       314 天前 via Android
    @cpstar 三层可以使用路由,不需要 NAT
    yaott2020
        16
    yaott2020  
       314 天前 via Android
    cpstar
        17
    cpstar  
    OP
       314 天前
    @yaott2020 15# 16#

    那个文档已经实现了 3#图片的左侧结构,轻松实现,本来这也不是问题。问题是无法在右侧实现同样的左侧结构:在右侧设立了一个网络之后,二层不通,只能使用 NAT 。

    而所谓的路由转发原则成立,但实践上(应该是因为使用了 192 、172 、10 段)目的地址看到的都是被网关设备修改了源地址的 IP 包,我认为这就是 NAT 。
    liyouran
        18
    liyouran  
       314 天前
    @flynaj 我也是这样设置的,这样设置完,在装 zerotier 的路由上在设置静态路由指回去就行了
    liyouran
        19
    liyouran  
       314 天前
    二层试试利用 zerotier 的虚拟地址搭建 pptp ,l2tp 或者 ipsec 之类的
    sadan9
        20
    sadan9  
       313 天前
    @cpstar 桥接是 2 层,NAT 是 3 层。完全是 2 个问题。除非你的业务场景涉及同一个段内的广播,不然直接走 3 层路由。
    4 楼是正确解法,如果不想在 zt 的 web 上设置静态路由,甚至可以考虑使用 RIP 或者 OSPF 。
    ExplodingFKL
        21
    ExplodingFKL  
       313 天前
    vxlan + bridge ,请
    matate
        22
    matate  
       313 天前
    问题描述看起来很费劲。
    如果只是连通两个 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
        23
    cpstar  
    OP
       313 天前
    @sadan9 20#
    @matate 22#
    还是没明白想要什么,实现 3# 图上结构比较没有难度。而且右侧的 node ,可以通过 NAT 再挂一个子网。但是无法实现的是,右侧也实现一个左侧的 LAN ,即通过 ZT 桥接两个 LAN 。

    追加了补充。
    Immunize
        24
    Immunize  
       313 天前
    @cpstar #6 对的 我给的 Blog 是 L3 路由而非 NAT ,二层桥接是有什么特殊需求么。
    cpstar
        25
    cpstar  
    OP
       313 天前
    @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
        26
    Immunize  
       313 天前
    @cpstar #25 10.244.17.1 和 10.244.16.1 都是静态下一跳路由呀,不是 NAT 。
    你可以看我的抓包,4g 网络下的 iphone ping 内网的笔记本,笔记本看到的 ip 是 zerotier 网络分配的 ip 而非你所理解的 10.244.16.1 下一跳 ip 。

    cpstar
        27
    cpstar  
    OP
       313 天前
    @Immunize 26# 我知道了,你这个没有用 luci_app_zerotier 的相关东西,那个里边有一个 NAT 选项,选定后自带脚本会加上一条 MASQUERADE 记录,也就是一条 NAT 规则,于是都按照 NAT 往外走了。而且官网文档上也有三条 iptables 的规则其中最后一条就这个 MASQUERADE 。
    Immunize
        28
    Immunize  
       311 天前
    @cpstar #27 嗯 所以我理解 并不需要桥接来解决你的需求?
    bjfane
        29
    bjfane  
       310 天前
    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
        30
    lazyyz  
       309 天前
    @matate 你好,D 是 Windows ,配置路由后可以访问到 B ,但是不能访问到子网 m 里其他设备,比如 A ,是不是还需要哪里配置一下?
    cpstar
        31
    cpstar  
    OP
       309 天前
    @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
        32
    bjfane  
       308 天前
    @cpstar 哦哦,没搞过,也不会,哈哈哈
    sapphire
        33
    sapphire  
       308 天前
    对 Zerotier 不太熟悉,我理解你需要的是一个虚拟网桥,假设家庭主网络,就是拨号网络设为 VLAN10 ,桥接进 Office 的是 VLAN20 。然后找一台 Linux 设备,安装 Zerotier ,虚拟网卡是 zt0 ,linux 的 eth0 在 VLAN10 ,然后做一个 eth1 ,连接到 VLAN20 ,然后创建 bridge ,连接 zt0 和 eth1 ,之后 VLAN20 就是和 Office 桥接的 Lan
    sapphire
        34
    sapphire  
       308 天前
    ivan_wl
        35
    ivan_wl  
       308 天前
    用 softether 的 L2 bridge 试试呢
    matate
        36
    matate  
       308 天前
    @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
        37
    cpstar  
    OP
       308 天前
    @matate 36# 最初的原动力就是 zerotier 说可以 L2 Bridge ,那问题就来了,能不能桥接两个 LAN (甚至多个),实践结果就是不能,只能在一个 LAN 中完成桥接,不能桥接到第二个 LAN 中——附言一的那张图。如果非要做,可能就是需要 L2TP 或者 wireguard 的 GRE 隧道等技术完成。
    matate
        38
    matate  
       308 天前
    @cpstar zerotier 已经很好地完成他的 l3 的功能,所以任何一个 l3 vpn ,都可以宣称他支持 l2 bridge ,只需通过 l2tp 、GRE 等 l2 across l3 技术。
    你描述的桥接两个 LAN ,指的是存在两个子 domain ,通过一个 bridge ,将这两个 domain 合并为一个大的,工作在 l2 的 domain ?这个是可以做到的。
    但这个图中表示的是 l3 的 bridge 。因为 l2 只是数据链路层,没有 ip ,没有网关,也没有 nat 。
    sapphire
        39
    sapphire  
       308 天前
    @cpstar 晚上注册了 Zerotier ,做了测试。用两台 ubuntu ,eth0 是主网络,eth1 连接主网络或第二网络/VLAN 。br0 桥接 eth1 和 zth ,然后双向可通,Home 的内网机器从 Office 拿到 DHCP 。

    Zerotier 不分主从,不可能单侧可通,另一侧不通。
    cpstar
        40
    cpstar  
    OP
       307 天前
    @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 问题,可能会有一个解释:不分主从,只能数据包无法通达。
    sapphire
        41
    sapphire  
       307 天前 via iPhone
    @cpstar Zetotier 等同网线,本身是 VL1 ,二层互通没有任何问题。DHCP 能过可通就说明不是通过其他三层通道。我做的最简环境,为了避免干扰 eth1 都放在 VLAN 里。OP 不熟悉,它也是用的 linux 设施,不通只能是配置原因,不是网络架构原理不支持。
    lazyyz
        42
    lazyyz  
       307 天前
    @matate B 、C 都是 Linux ,已经开启 IP 转发,直接访问对方局域网内其他没有安装 zerotier 的设备都没问题
    sapphire
        43
    sapphire  
       307 天前 via iPhone
    我的测试环境
    c1(dhcp)-sw1-(eth1)s1(eth0)-r1(office)~~~~(home)r2-(eth0)s2(eth1)-sw2-c2
    c2 作为 dhcp 客户端,从 c1 拿到 IP ,并且 c2 和 c1 互通
    okletgo
        44
    okletgo  
       292 天前
    @cpstar
    首先你的第 2OpenWRT 配置就不对,主网是 192.168.100.0/24 ,子网是 192.168.101.0/24 ,你算算这 2 个网络号都不一样,不在同一网段,自然是不能组成一个大网的,你再查查桥接是什么意思,网桥将网络的同一网段在数据链路层连接起来,只能连接同构网络(同一网段),不能连接异构网络(不同网段)。
    192.168.100.0/23 倒是对了,可是你怎么能关掉 DHCP 呢?子网向谁要 IP ? ZT 配置流量控制丢弃 UDP67UDP68 的意思是,防止主网和子网互相向对方的网关请求 DHCP ,导致 2 个 DHCP 服务器分配了同一个 IP 地址给多台终端,进而造成 IP 冲突。
    所以正确的做法是,172.25.0.0/16 或者 192.168.0.0/16 ,子网掩码 255.255.0.0 ,例如主网可以是 172.25.1.100~172.25.1.250 ,网关 172.25.1.1 ,子网是 172.25.2.100~172.25.2.250 ,网关 172.25.2.1 ,都开启 DHCP ,但是地址池要像这样正确配置。在 OpenWRT 把 zerotier 开启,zerotier 的管理后台允许该接口桥接,然后给主网 zerotier 设置地址 172.25.1.10 ,子网 zerotier 设置地址 172.25.2.10 ,不要和网关和其他设备重复就行,然后规则丢弃 UDP67UDP68 。不过我自己存在的问题是,不知道怎么丢弃 IPV6 的 DHCP ,也许大家讨论下能得到答案。
    okletgo
        45
    okletgo  
       292 天前
    @cpstar 对了,做完这些,别忘了在 OpenWRT ,把 br-lan 和 zerotier 的接口桥接起来
    cpstar
        46
    cpstar  
    OP
       291 天前
    @okletgo 44#
    额。。。
    - 首先,DHCP 。有文章说,不要通过 ZT 的网络发送 DHCP 的 UDP 包,会导致意想不到的情况;
    - 其次,网段。100/24+101/24 两个网段是不行,但是 100/23 也好还是 100/24 也好,首先二层一个网,然后无非就是 256 台还是 256+256 台主机数量而已,这也不是关键;
    - 再次,桥接。桥接操作很简单,ZT 配置上勾上,OP 上绑定端口,主网和次网均此;

    然后问题就出现了,主网内不废话,DHCP 也好,ARP 也罢,二层互通,但是次网只有接入的 OP 设备能够找到主网的所有设备(主网也能找到这个 OP ),OP 下边的所有设备只在 OP 内运转,不能找到主网任何一台设备(主网的也找不到子网的设备),拦包观察的是,子网设备找主网的 ARP 广播包不能传到主网里,所以别说 DHCP 了就算手动配置子网的 IP ,也无法获取主网设备的 MAC ,更不要说通信了。

    最后按照官方文档的说法,如附言 1 的图,右侧只能各个节点接入,节点下再挂就得是另外一个网段,通过节点[路由|NAT]到主网——那也就是网段不同了。至于原因,我判断,ZT 属于三层(甚至以上)做互通,并不能完成二层的一些协议,所以无法完全做到两个网络的二层桥接,即使用两个 ZT 实现软虚拟的网桥或者交换机设备。

    最最后,这个事情,我干脆通过路由解决了。即右侧 NodeA 下挂一个 10.0.1.x 的网络,通过 NodeA 路由到 10.0.0.x 的主网,同时配置主网的路由策略,10.0.1.0/24 via 10.0.0.101 。
    okletgo
        47
    okletgo  
       290 天前 via Android
    @cpstar 你要不画个网络拓扑图吧,你这样描述我想不出来真实情况,我描述的是异地组网方法,可能跟你的问题不一致
    sapphire
        48
    sapphire  
       290 天前
    楼上很多回答对网络原理理解不足,勿在浮沙筑高台。比如说 Zerotier 是三层,Zerotier 是 VL1 好吗,Zerotier 结合自己的网络后,相当于有通明防火墙的网线。

    Zerotier 的一对节点通了之后,这两个 tun 接口就相当于一根网线连接起来,有点像运营商给你做了一对专线(,相当于给你扯一根网线,不需要配置 IP ,二层互通就没有任何问题,是否配 IP 都是自己的选择,有点像交换机的端口,可以作为二层口,也可以作为三层口。但是接下来有问题:

    1.为何要做二层桥接而不是三层路由?
    Zerotier 官方文档说了自己是 V1 ,也是为了让链路层广播和多播通过,比如要用 AirPlay 之类,或者其他以来广播的协议,否则可以用三层,而且一般大多数人也是用三层的。如果要当连接链路层也要考虑广播流量通过互联网传输的负担。

    2.二层联通后增么处理各自的原生网络?
    如果要把 Office 和 Home 两个链路层通过一根线直通了,那 Home 原来的一些基于广播的协议自然要小心考虑,比如 DHCP ,二层联通后,只能在 Home 原生和 Office 原生二选一,要选择两个都用,只能走一些透明网关类的处理,或者用三层网络。如果选择了使用 Office 原生,由 OfficeDHCP 自然也不是问题。Zerotier 自身也在二层做了一个透明防火墙,可以用规则过滤。

    明白以上的原理后,配置二层互通自然不是问题。
    sapphire
        49
    sapphire  
       290 天前
    上面的 tun 接口应该是 tap 接口,Zerotier 是把自己当成有透明三层防火墙的交换机,每个客户侧(非移动端)放置一个 tap 端口。
    cpstar
        50
    cpstar  
    OP
       289 天前
    @sapphire 48#
    ZT 做出来几层,你也不能否认他在三层以上做互通,做到了 VL1 那肯定是用软件模拟,毕竟不是网线,不是交换机。如果是 VL1 ,理论上,你说的 DHCP 以及 ARP 我认为都应该没问题。但事实上,什么是事实,事实就是实践,实践告诉我,没搞定,¯\(°_o)/¯,office 端(子端)收不到 DHCP ,ARP 广播也只能在 H 端或 O 端内部运转。我在主题和回复中提及了数次,有文章说需要在 ZT 的流量控制上禁止 UDP67UDP68 也就是 DHCP ,因为会产生不可预测的情况发生。那这些,就与所谓的 VL1 不匹配了,所以才有本主题,失败了。
    cpstar
        51
    cpstar  
    OP
       289 天前
    补 50#,如果说另建一个 tun 端口,那是不是就是类似构建 gre 隧道的形式来保证广播双向可达,这个我是没有实践,不知道具体什么情况。
    sapphire
        52
    sapphire  
       289 天前
    @cpstar Zerotier 创建的虚拟口就是 tap ,48#我写错了,tap 本身就是一个链路层的口,当你把它 bridge 到物理端口时,自然实现了二层互通,但是互通后你需要自己解决二层划分和使用的问题,比如 bridge 一个和 Home 原生网络隔离的 VLAN 。Zerotier 当然是基于三层,但是它自身是 VL1 ,那原理上就可以当 VL1 用,要按你的说法,运营商也没法跨区域做光交换专线了,而且有很多虚拟专线,都是 Ethernet over IP 。

    我当然是实践后才这么说。没有收不到 DHCP 和 ARP 这些问题,文章说的 DROP 掉 UDP67/68 只是简单的让两个网络各自使用自己的 DHCP ,实际上如果你有用一个的需求,无需过滤这些包。另外可以把文章链接放出来,一起看看。

    最后要说的是:只是你失败了!并不是原理不通。讨论修正理解不对的地方,找出自己配置不当,实现就完了。
    sapphire
        53
    sapphire  
       289 天前
    user@misc:~$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether xx:14:a7:xx:a7:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.53/24 brd 192.168.10.255 scope global eth0
    valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether xx:30:xx:xx:32:f0 brd ff:ff:ff:ff:ff:ff
    4: zth6123456: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
    link/ether de:4d:9d:9f:10:7c brd ff:ff:ff:ff:ff:ff
    5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether be:c0:ff:fd:6d:72 brd ff:ff:ff:ff:ff:ff
    user@misc:~$ brctl show br0
    bridge name bridge id STP enabled interfaces
    br0 8000.bec0fffd6d72 no eth1
    zth6123456
    user@misc:~$ sudo tcpdump -i br0 -nn -l arp
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on br0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
    09:18:41.845729 ARP, Request who-has 192.168.1.1 (b6:ff:16:xx:xx:80) tell 192.168.1.149, length 46
    09:18:41.853347 ARP, Reply 192.168.1.1 is-at b6:ff:16:xx:xx:80, length 28
    09:18:46.633253 ARP, Request who-has 192.168.1.118 tell 0.0.0.0, length 46
    09:18:48.646430 ARP, Request who-has 192.168.1.1 tell 192.168.1.118, length 46
    09:18:48.700308 ARP, Request who-has 192.168.1.1 (ff:ff:ff:ff:ff:ff) tell 192.168.1.11, length 46
    ^C
    5 packets captured
    cpstar
        54
    cpstar  
    OP
       289 天前
    @sapphire 53#
    额,看情况,根据附言 1 的图,我猜你测试的是右侧 NodeA 上的,我不知道你继续测试右侧 NodeA 下如果再带一台机器比如 NodeA-A ,能否继续广播通。我没有实现的就是 NodeA 下的 NodeA-A 寻找左侧 0.11 或者 0.2 这些机器。
    单纯做到附言 1 的图,没有任何问题。
    sapphire
        55
    sapphire  
       289 天前
    @cpstar A 侧能通自然 B 侧也通,二层不考虑交换机的作用,本身就是广播的。从原理出发,不会质疑这个,只要解决自己哪里没做对就行。

    A 侧网络是 192.168.10.0/23 ,B 侧是 192.168.1.0/24 ,这是 B 侧桥接 VLAN 下的另一台机器 ui (非 Zerotier 所在 ecs )的 DHCP 的结果:

    root@ui:~# dhclient -v eth4
    root@ui:~# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 0a:4c:51:c4:9c:c8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.8/24 brd 192.168.1.255 scope global eth0
    valid_lft forever preferred_lft forever
    76: eth4@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether da:0c:23:82:ad:de brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.10.123/24 brd 192.168.10.255 scope global dynamic eth4
    valid_lft 691181sec preferred_lft 691181sec

    root@ecs:~# tcpdump -i br0 -nn -l port 67 or port 68
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on br0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
    11:41:57.970084 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 4a:f7:33:3b:e8:29, length 300
    11:41:57.983324 IP 192.168.10.8.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 315
    11:41:57.984336 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 4a:f7:33:3b:e8:29, length 300
    11:41:57.986453 IP 192.168.10.1.67 > 192.168.10.123.68: BOOTP/DHCP, Reply, length 315
    11:41:57.991644 IP 192.168.10.8.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 315
    11:41:57.998054 IP 192.168.10.1.67 > 192.168.10.123.68: BOOTP/DHCP, Reply, length 315
    sapphire
        56
    sapphire  
       289 天前
    @cpstar #55 楼的截屏中 tcpdump 是另一次 dump 的结果,和 10.123 这次不一样,request from 的 mac 是不一样的,那次被屏幕滚动冲掉了。
    sapphire
        57
    sapphire  
       289 天前
    “A 侧网络是 192.168.10.0/23”,此处笔误是 192.168.10.0/24 。

    实际上,我不觉得你的真实需求必须要二层互通,一般远程办公这种情况绝大多数应用三层互通就足够,有个别需要广播或者多播的,可以通过各种三层技术引入,比如 DHCP Relay 以及 ARP Proxy 和 IGMP Proxy 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:38 · PVG 10:38 · LAX 18:38 · JFK 21:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.