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

TP-Link 飞流 XDR5480 与 R2s 实现链路聚合(了个寂寞)

  •  
  •   phpfpm · 2022-09-02 19:05:01 +08:00 · 3716 次点击
    这是一个创建于 811 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前情提要和背景简介

    XDR5480 有一个自定义的 SFP 接口和 4 个 1GbE 的 Lan 口。

    SFP 接口我接了华为的 2.5G 猫棒,修改了北京移动所需的拨号参数之后可以顺利拨号上网。

    由于其他接口都不是 2.5GbE 的,所以其实猫棒的效果并不容易感觉出来,于是我就想到了链路聚合。

    网络拓扑:

    移动光纤-XDR5480 的猫棒的 SC 接口(中间其实还是要转接的)

    XDR-5480 的 LAN3 和 LAN4 都接在 R2s 的两个网口上

    R2s 接一个 usb 的网卡作为旁路管理用

    XDR-5480 的端口聚合配置

    很简单,路由设置-端口功能自定义-端口聚合改一下就行。

    R2s 的镜像准备和 openwrt 的设置

    默认交换 WAN 口和 LAN 口,下文所述的网口名称是机器外壳标识的,之后都会作为 LAN 口使用。

    写着 WAN 口的接口是物理网口,写着 LAN 口的接口是 USB 模拟的

    所以做旁路由需要交换,用 WAN 物理网口口当做逻辑上的LAN口使用。

    我在基础安装包上提前打包好这些包:

    usbutils
    lsof
    kmod-usb-net-asix
    kmod-usb-net-asix-ax88179
    kmod-bonding
    luci-proto-bonding
    proto-bonding
    
    1. 默认 R483G 修改好配置之后,的 LAN3 和 LAN4 的网线先不插入

    2. 先把 USB 网卡的网线接入 WAN 口,登入之后将 br-lan 改为三个网口都加入,再拔出网线插入 usb 网卡。

    3. 确认通过 usb 网卡可以顺利管理设备之后,将 br-lan 的 eth0 和 eth1 去除,只保留 eth2 ( usb 网卡)

    4. 创建 eth0 和 eth1 的 bonding 接口,设置静态 ip ,模式选择 bonding 0:循环策略,balance-rr

    5. 单独只插入 LAN3/LAN4 ,ping bonding 的 ip ,不丢包

    6. 插入 LAN3 和 LAN4 的网线到 WAN 口和 LAN 口,丢一半的包——到一个丢一个到一个丢一个

    7. 增大切换到下一个从属设备前要传输的数据包设置,发现丢包的现象周期发生延长

    8. 其他设置改一改,比如强制链路啊丢弃重复帧啊好像没效果

    9. 神奇的发现,关闭 5480 的链路聚合设置,似乎就没有丢包现象了诶???

    问题时间到

    1. 链路聚合要两边都开吗?从 5480 的说明来看,链路聚合本身是给两台 tplink 的路由器之间互联用的
    2. 单边开会怎样?速度能叠加吗?
    16 条回复    2023-09-13 15:06:05 +08:00
    Rrrrrr
        1
    Rrrrrr  
       2022-09-02 21:49:32 +08:00
    还以为是教程,进来是提问的 :D
    phpfpm
        2
    phpfpm  
    OP
       2022-09-02 23:40:47 +08:00
    @Rrrrrr 我已经能保证能 ping 通没问题

    但是好像 bond 之后的设备不能作为网关,和 br-lan 不太一样
    yujincheng08
        3
    yujincheng08  
       2022-09-03 09:24:36 +08:00
    很明显是因为 balance-rr 策略,只有两条线一条通了另一条不通。需要看看 XDR5480 是什么策略。mode 0 是需要对端交换机有相同策略的。或许 XDR5480 是 LACP 。
    yujincheng08
        4
    yujincheng08  
       2022-09-03 09:26:17 +08:00
    @phpfpm bond 不用做网关,如果是旁设备,可以把 bond 设备加到 br-lan 然后 br-lan 设置网关是 XDR-5480 即可。
    Kinnice
        5
    Kinnice  
       2022-09-03 11:03:34 +08:00
    系统启动项-启动脚本 exit 0 前加

    modprobe bonding mode=0 miimon=100
    ifconfig bond0 192.168.111.111 netmask 255.255.255.0 up
    ip link set eth0 master bond0
    ip link set eth1 master bond0

    然后 LAN 的物理设置中设置网卡为 bond0
    phpfpm
        6
    phpfpm  
    OP
       2022-09-03 17:48:25 +08:00
    @yujincheng08 是,但是我也不知道 5480 是什么策略,如果在 5480 不开链路聚合,倒是不丢包,只在 r2s 开 mode0 可以吗?

    2 我其实到现在都不知道 br-lan 是指什么,我理解的是一个包含 R2s 的 cpu 本身的网桥网络。
    如果这样设置,

    设置 br-lan 的 ip 是 192.168.1.2 ,gw 是 192.168.1.10 ( 5480 的 ip )

    设置 bond 的 ip 是 192.168.1.1 ,没有网关

    内网其他设备设置网关是 192.168.1.2 ,就是访问的是 br-lan ,但是走的物理线路是 bond 的线路?
    phpfpm
        7
    phpfpm  
    OP
       2022-09-03 17:48:38 +08:00
    @Kinnice 嗯我也搜到这个了,我上次就这么死的。。
    yujincheng08
        8
    yujincheng08  
       2022-09-04 08:56:05 +08:00   ❤️ 1
    @phpfpm https://www.tp-link.com/us/support/faq/1583/ 根据官方 FAQ ,这似乎是 mode4 的。

    br-lan 是个网桥,用来把多个接口放到同一个局域网(广播域)中。bond 的 IP 即使同一个网段但是不放网桥就不是同一个局域网,转发需要路由的。你把 BOND 的子网掩码设置成 /32 吧,然后把 bond 的接口塞 br-lan 里面,然后就能走 bond 访问网关了。
    phpfpm
        9
    phpfpm  
    OP
       2022-09-04 13:32:48 +08:00
    @yujincheng08 牛逼!!!YYDS !!!

    我先去试试看
    phpfpm
        10
    phpfpm  
    OP
       2022-09-05 00:21:16 +08:00
    @yujincheng08 试了下 xor 或者 mode4 都不太行。。


    我留个我的 wechat 吧:
    eWFuZ2dzMDc=

    大佬有时间的话可以一起研究下
    qzwmjv
        11
    qzwmjv  
       2022-09-05 10:28:11 +08:00
    修改了北京移动所需的拨号参数
    方便详细说说么,需要哪些参数,多谢~
    phpfpm
        12
    phpfpm  
    OP
       2022-09-05 11:06:13 +08:00
    @qzwmjv 拨号相关的:pppoe 用户名和密码(改桥接你肯定知道)

    光猫的 sn (页面有写,背面印着呢,横杠后面的部分)
    vlanid (上网是 10 ,vlan 是 1010 )
    最重要是一个密码( user 模式管理页面可见)

    卖猫棒给的文档里面都有
    phpfpm
        13
    phpfpm  
    OP
       2022-09-07 00:40:58 +08:00
    @yujincheng08 ok 我仔细读了一下 tp-us 的文档,我觉得这件事情我可以 close 了。

    Our products only support layer 2 LACP
    第三种模式:mod=2 ,即:(balance-xor)XOR policy (平衡策略)

    特点:基于指定的传输 HASH 策略传输数据包。缺省的策略是:(源 MAC 地址 XOR 目标 MAC 地址)% slave 数量。其他的传输策略可以通过 xmit_hash_policy 选项指定,此模式提供负载平衡和容错能力。

    基于 HASH 算法的负载均衡模式,网卡的分流按照 xmit_hash_policy 的 TCP 协议层设置来进行 HASH 计算分流,使各种不同处理来源的访问都尽量在同一个网卡上进行处理。

    缺省策略:MAC 地址异或算法,由服务器的 MAC 地址和客户端的 MAC 地址共同决定每个数据包的发送端口号,由源 MAC 地址和目的 MAC 地址进行异或计算,并将异或结果对接口数求余计算。由于发送到同一个客户端的数据流经过同一个链路,因此数据包能够有序到达客户端。此算法在只有一个客户机访问服务器或者服务器和客户机不在同一子网的情况下,由算法思想得知这种情况下负载不会均衡,在只有一个客户机访问服务器的时候,资源的利用率也是 1/N(N 为接口数)。


    也就是说,哪怕我做好了 LACP ,在 R2s 本机上也只能实现 1000Mbps 的测速(因为只能出一个网口)

    所以没啥意义。

    本来我的想法是只压一下猫棒的性能,昨天用另外一种方式实现了:
    直接选俩设备一起测速,这样路由器就压到了 1200Mbps
    yujincheng08
        14
    yujincheng08  
       2022-09-07 11:33:57 +08:00
    @phpfpm 那或许你可以试试 mode6 的 bond 。这个模式的 bond 会在出口时候根据链路负载重写源 MAC 地址来实现负载均衡。而这并不需要对端交换机的支持。所以你可以在 Openwrt 上设置 mode6 的 bond 而无需在 XDR-5480 上设置 bond 。但是这种做法需要在 L2 进行“路由”比较吃性能,R2S 不知道吃不吃得消。
    phpfpm
        15
    phpfpm  
    OP
       2022-09-07 13:17:34 +08:00
    @yujincheng08 好的!!我晚点回去试下。
    phpfpm
        16
    phpfpm  
    OP
       2023-09-13 15:06:05 +08:00
    所以吧,现在我直接把 5480 作为 ap 模式接在交换机下面了,此题终结。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1095 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.