原始参考贴 https://s.v2ex.com/t/822174
上海电信, 没有在局端开桥接, 自己买了华为的 HN8546Q, 刷回原版固件并补全了 shell, 改成 epon 模式, 光猫端没有做太多的额外设置, 开了 vlan51/85 来实现 IPTV 盒子的使用
光猫后面用软路由桥接拨号, PVE 宿主+OP 虚拟机, 直通三个网口给了 OP, 没有做 bond 之前单独用 wan1 或者 wan2 拨号测速都是在 900M 上下的速度浮动, 但 bond 之后测速就会掉落到 700-800 之间, 多次测速都是同样的结果, 如果拔掉一根 wan 口的网线在 bond 模式下单线单拨, 速度和普通的单线单拨是基本一致的, 来来回回折腾了很久都没发现问题到底出在哪里, 还望各路神仙给帮忙答疑解惑一下
PS.1 rc.local 我是这么写的
modprobe bonding mode=0 miimon=100
ip link delete bondwan ip link add bondwan type bond mode 0 ip link set eth1 down ip link set eth2 down ip link set eth1 master bondwan ip link set eth2 master bondwan ip link set bondwan up exit 0
PS.2 bonding 模式下拨号测速后用 ifconfig 看过 eth1 和 eth2 两个口的流量, 基本一致, 所以应该是按照正常的 bonding 模式在工作的
1
swiftg 2022-09-06 13:00:30 +08:00
ip link set eth1 type bond_slave
ip link set eth2 type bond_slave 这两条呢 |
2
lcy630409 2022-09-06 14:00:12 +08:00
直接在 openwrt 接口中设置 不需要命令行
|
3
lcy630409 2022-09-06 14:02:54 +08:00
网络 -> 接口 -> 添加新接口-> 新接口的协议 -> 链路聚合(通道绑定)
之后在 高级设置->从属接口 选择网卡,其他参数默认即可 这个其实是 lan 口欺骗,有概率会出现 速度反而下降的问题,重新启动一下就好 |
4
flowdesign OP @swiftg, 我曾经加过这两条, 实际效果一样, 现在我查看 eth1 和 eth2 的状态都是很正常的, eth2 网线拔了, 所以状态为 down, 而且真实 mac 也都显示出来的
> eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1460 qdisc mq master bondwan state UP mode default group default qlen 1000 link/ether 28:cd:b5:37:49:c7 brd ff:ff:ff:ff:ff:ff > eth2: <NO-CARRIER,BROADCAST,MULTICAST,SLAVE,UP,> mtu 1460 qdisc mq master bondwan state DOWN mode default group default qlen 1000 link/ether 28:cd:b5:37:49:c7 brd ff:ff:ff:ff:ff:ff permaddr 28:cd:b5:37:49:c6 @lcy630409 这种方式我加过, 不过这里有个问题, 这样加出来的接口是一个逻辑接口, 没法再叠加 pppoe 拨号了, 因为 OP 里面把链路聚合和 pppoe 的协议放在一层上面, 是个二选一的方式... |
5
lcy630409 2022-09-06 14:24:45 +08:00
@flowdesign 晕 不是啊,先加接口,然后 pppoe 的接口选这个
|
6
lcy630409 2022-09-06 14:25:41 +08:00
你到 pppoe 的那个接口,设置里的物理设置,看看接口有没有刚那个? 如果你保存成功的话 是肯定有的
|
7
malash 2022-09-06 16:42:23 +08:00
遇到奇怪的速率问题重启光猫和路由器,亲测
|
8
lxll 2022-09-06 17:35:52 +08:00 via Android
这个要看光猫的,有些光猫不支持聚合。
聚合后测速时你可以看看你的光猫 CPU ,大概率 100%占用。 |
9
flowdesign OP |
10
lcy630409 2022-09-06 20:13:46 +08:00
|
11
swiftg 2022-09-06 20:22:11 +08:00
以下是我以前成功运行半年的配置
opkg update opkg install kmod-bonding luci-proto-bonding proto-bonding ip link add bond0 type bond mode balance-r cat /etc/rc.local ip link set eth1 type bond_slave ip link set eth2 type bond_slave ip link set eth1 master bond0 ip link set eth2 master bond0 ip link set bond0 up ifconfig eth1 down ifconfig eth2 down sleep 1 ifconfig eth1 up ifconfig eth2 up 然后 luci 界面,宽带 pppoe 拨号连接里的网卡选择 bond0 |
12
swiftg 2022-09-06 20:24:00 +08:00
记得配置 bond 后网卡灯不闪,把 eth1 eth2 重启下就正常。每次软路由重启都必须这一步
|
13
swiftg 2022-09-06 20:26:51 +08:00
忘了说我是官方原版的 OpenWrt 21.02 ,硬件是 R86S ,聚合的是两个英特尔 I225 2.5G 口
|
14
swiftg 2022-09-06 20:31:25 +08:00
还有个操作忘了说,我还编辑 /etc/config/network 给 pppoe 拨号的接口手动指定了 mac 地址,这个 luci 界面改不了
nano /etc/config/network config interface 'cmcc' option proto 'pppoe' option username 'xxx' option password 'xxx' option metric '5' option peerdns '0' option ipv6 'auto' option macaddr 'xx:xx:xx:xx:xx:xx' option mtu '1500' option device 'bond0' |
15
flowdesign OP @lcy630409 多谢辛苦帮我录屏, 我刚刚又捣鼓了一阵, 并没有什么特殊操作, 然后突然就可以用 wan 口绑定新增加的这个 bond 口来 pppoe 拨号了, 然而坑爹的事情在于, 这种拨号测速直接变成了只有 20M...而且 ifconfig 看到 eth1 和 eth2 口的数据流量都是被放大无数倍, 我重启路由然后就打开测速网页测两次, wan 口显示流量大概是几百兆, eth1 和 eth2 都是已经到了 10G+的状态, 为了家庭和谐, 先暂时改成了单线单拨, 回头再仔细研究一下到底问题是什么...
@swiftg 你的这个设置跟我之前曾经尝试的是一样的, 我唯一没做的就是指定 mac 地址, 但按理说这个不影响测速才对, 感觉还是没有找到主因是什么 |
16
lcy630409 2022-09-06 21:50:55 +08:00
|
17
malash 2022-09-06 23:36:47 +08:00
原版固件没有问题,检查一下光猫的设置——LAN 配置——二 /三层口配置,确保所有口都勾选上了了。以及检查一下 WAN 配置里不需要绑定任何接口
https://user-images.githubusercontent.com/1812118/188676529-1732df36-c0c3-483e-a2ae-a6adffe19e34.png |
18
yujincheng08 2022-09-07 11:38:46 +08:00
mode0 的 bond 需要对端交换机兼容的,这个光猫支持设置 mode0 的 bond 的吗?
|
19
flowdesign OP @lcy630409 我也觉得是环路风暴了, 关键就是产生的原因是什么? 通过 luci 增加的 bonding 口和我通过 rc.local 增加的 bonding 口是两次操作的唯一区别, 通过 luci 来增加的会写入到 etc/network 里面, 但是 rc.local 的就不会, 对 OP 没那么深入的了解, 还要花点时间研究一下才行, OP 固件本身的原因我觉得不太大, bonding 本身需要的插件也都是需要手工安装的
@malash 多谢提醒, 没记错之前我把桥接 wan 口绑定了所有的 lan 口, 回头去解绑了试试看 @yujincheng08 必须啊, 除非我被各处传播的信息给骗了, 我获取的信息特别指明华为带 Q 的光猫路由器都支持 balance rr 模式的, 8546Q 属于性价比比较高的一款 |
20
lcy630409 2022-09-07 14:51:08 +08:00
|
21
yujincheng08 2022-09-07 15:46:20 +08:00
|
22
malash 2022-09-08 00:07:10 +08:00
着重看一下“二 /三层口配置”,我记得原厂固件默认没有勾选这几项,而运营商的固件都默认开启,是一个坑
|
23
flowdesign OP @lcy630409 环路风暴没解决, 依然找不到原因, 逐渐陷入绝望中...
@malash 看了光猫设置, 二 /三层口配置都勾选了, 然后桥接 wan 口也没有绑定任何的 lan 口 @yujincheng08 光猫不需要对聚合做额外设置吧, 我也似乎没找到哪里有设置的 P.S V2 账号设置里的屏蔽搜索引擎并没有用嘛, 放狗搜 8546 聚合, 我的帖子都要上热搜了... |
24
yujincheng08 2022-09-08 09:08:50 +08:00
@flowdesign 光猫需要设置聚合的,bond 0 聚合就是要求两端都配置 bond 不然会坏掉(看下面的 kernel 文档)。你的问题看起来就是光猫没设置 bond 。我估计是需要用 telnet 之类的设置 bond 。所谓网上说的支持 bond 我估计是自带的 kernel 支持,但是没有 web ui 。
https://www.kernel.org/doc/Documentation/networking/bonding.txt The balance-rr, balance-xor and broadcast modes generally require that the switch have the appropriate ports grouped together. The nomenclature for such a group differs between switches, it may be called an "etherchannel" (as in the Cisco example, above), a "trunk group" or some other similar variation. For these modes, each switch will also have its own configuration options for the switch's transmit policy to the bond. Typical choices include XOR of either the MAC or IP addresses. The transmit policy of the two peers does not need to match. For these three modes, the bonding mode really selects a transmit policy for an EtherChannel group; all three will interoperate with another EtherChannel group. |
25
flowdesign OP @yujincheng08 刚刚又搜了一大圈, 看到一个帖子提到华为光猫固件没有对应的 bonding 内核的问题 <https://www.right.com.cn/forum/thread-4036246-1-1.html> , 今天回去继续研究一下看看, 如果真的是固件没有内核的话, 我要么放弃 bonding, 要么换光猫了
|
26
malash 2022-09-08 11:07:09 +08:00
Q 结尾的光猫内核里是不需要 bonding 支持的,这几款的交换芯片本身就支持链路聚合,因此无需额外配置就能直接使用,参见 https://www.v2ex.com/t/822174#r_11177803
相反,OpenWRT 需要内核开启 bonding 以支持链路聚合,原理上使用的是“软”聚合。 你可以在 OpenWRT 上跑一下 dmesg | grep bond 和 cat /etc/config/network 然后贴一下结果看看吗?(后者注意隐藏 PPPOE 账号密码等信息) |
27
yujincheng08 2022-09-08 11:09:03 +08:00
@flowdesign 真的想 bond 可以尝试用 mode6 ,这不需要对端支持。
|
28
swiftg 2022-09-08 14:57:17 +08:00
HN8546Q 聚合成功,登陆光猫看了的,没有 bonding.ko
|
29
flowdesign OP @malash
dmesg | grep bond 的结果如下 [ 18.382320] 8021q: adding VLAN 0 to HW filter on device bondwan [ 18.384502] br-IPTV51: port 4(bondwan.51) entered blocking state [ 18.385421] br-IPTV51: port 4(bondwan.51) entered disabled state [ 18.386689] device bondwan.51 entered promiscuous mode [ 18.387423] device bondwan entered promiscuous mode [ 18.438353] br-IPTV85: port 4(bondwan.85) entered blocking state [ 18.439293] br-IPTV85: port 4(bondwan.85) entered disabled state [ 18.440374] device bondwan.85 entered promiscuous mode [ 18.572613] bondwan: (slave eth1): Enslaving as an active interface with an u p link [ 18.573799] IPv6: ADDRCONF(NETDEV_CHANGE): bondwan: link becomes ready [ 18.574914] br-IPTV51: port 4(bondwan.51) entered blocking state [ 18.575883] br-IPTV51: port 4(bondwan.51) entered forwarding state [ 18.579326] br-IPTV85: port 4(bondwan.85) entered blocking state [ 18.580288] br-IPTV85: port 4(bondwan.85) entered forwarding state [ 18.685858] bondwan: (slave eth2): Enslaving as an active interface with an u p link [ 102.968787] device bondwan.51 left promiscuous mode [ 102.969839] br-IPTV51: port 4(bondwan.51) entered disabled state [ 103.020110] device bondwan.85 left promiscuous mode [ 103.021104] device bondwan left promiscuous mode [ 103.022287] br-IPTV85: port 4(bondwan.85) entered disabled state [ 103.236200] 8021q: adding VLAN 0 to HW filter on device bondwan [ 103.240105] br-IPTV51: port 4(bondwan.51) entered blocking state [ 103.241799] br-IPTV51: port 4(bondwan.51) entered disabled state [ 103.243575] device bondwan.51 entered promiscuous mode [ 103.244972] device bondwan entered promiscuous mode [ 103.246447] br-IPTV51: port 4(bondwan.51) entered blocking state network config 是这样的 config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option packet_steering '1' config interface 'lan' option type 'bridge' option proto 'static' option netmask '255.255.255.0' option delegate '0' option _orig_ifname 'eth0' option _orig_bridge 'true' option ifname 'eth0' option ipaddr '192.168.1.111' config interface 'vpn0' option ifname 'tun0' option proto 'none' config interface 'docker' option ifname 'docker0' option proto 'none' option auto '0' config device option type 'bridge' option name 'docker0' config interface 'ipsec_server' option ifname 'ipsec0' option device 'ipsec0' option proto 'static' option ipaddr '192.168.100.1' option netmask '255.255.255.0' config interface 'wan' option proto 'pppoe' option username '马赛克' option password '马赛克' option keepalive '5 5' option mtu '1460' option ipv6 '0' option delegate '0' option _orig_ifname 'bondwan' option _orig_bridge 'false' option metric '40' option ifname 'bondwan' config interface 'IPTV51' option type 'bridge' option proto 'none' option ifname 'bondwan.51 eth0.51 eth1.51 eth2.51' option auto '1' option delegate '0' config interface 'IPTV85' option type 'bridge' option proto 'none' option ifname 'bondwan.85 eth0.85 eth1.85 eth2.85' option auto '1' option delegate '0' 有一些 OP 自己加的 IPSec, VPN 啥的接口, 我也懒得删就留着了, 主要用的就是 wan, lan, 外加为了 IPTV 加出来的一堆带 vlan tag 的接口, 反正我自己看 log 就是压根没看出什么不妥的地方... 我刚刚是重启了路由器以后重新加载 rc.local 增加的 bonding, 然后这个 bonding 拨号成功后我测速依然不出意料地只有 700 多 M, 再然后它就突然断线, 看了一眼 eth2 口不亮了, 我暂时没空研究, 拔掉网线现在暂时还有网络来回帖, 晚上不敢再折腾下去, 不然要被赶出家门 @swiftg 你这句话让我很伤心啊 |
30
swiftg 2022-09-08 20:01:48 +08:00
有可能是 mtu 的问题?我看你 pppoe 的 mtu 设置为 1460 ,我的是 1500 ,试着改下不同的值?
另外试试这个命令 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 我以前有些 https 网站有问题,用这个命令解决的 |
31
malash 2022-09-08 23:43:30 +08:00
@flowdesign 我看了一下,感觉是有些问题。
首先 bonding 的配置你按照 3 楼说的来,不需要任何开机脚本,直接网页操作最简单。最终效果如下: https://user-images.githubusercontent.com/1812118/189165482-057ef731-9b70-4c90-8ec2-bbaa375fc812.png https://user-images.githubusercontent.com/1812118/189165611-6b3d57d8-6364-44e0-aa8f-b114acb13b96.png https://user-images.githubusercontent.com/1812118/189165934-1e06d221-4e47-4f16-a6a2-79b3be11c417.png 然后你几个 IPTV 接口建议先删掉或者禁用,再或者只绑定一个 eth0.*。我也遇到了类似的的问题——链路聚合和 VLAN 不太兼容,因此对于需要 VLAN 的情况只能绑定原始的接口,用 bondwan.*大概是不生效的。 你配置里 option ifname 'bondwan.51 eth0.51 eth1.51 eth2.51' 显然是不对的,这样会把聚合和未聚合的给桥接在一起了,有可能是造成网络风暴的原因。 |
32
malash 2022-09-08 23:45:43 +08:00
这是我的 dmesg 输出,应该非常简洁的:
root@OpenWrt:~# dmesg | grep bond [ 10.166536] bonding: bonding-bond is being created... [ 10.199854] 8021q: adding VLAN 0 to HW filter on device bonding-bond [ 11.296123] bonding-bond: (slave eth1): Enslaving as an active interface with an up link [ 11.297601] IPv6: ADDRCONF(NETDEV_CHANGE): bonding-bond: link becomes ready [ 12.386727] bonding-bond: (slave eth2): Enslaving as an active interface with an up link |
33
malash 2022-09-08 23:51:35 +08:00
“HN8546Q 聚合成功,登陆光猫看了的,没有 bonding.ko”
不至于伤心啦,其实本质原因就是光猫走了硬交换,好处是性能比较好,坏处是支持的模式比较少,而且(猜测) VLAN 支持有问题。相反软路由这边走的都是软交换,对 CPU 占用会大一些。 忘了问你用的什么路由器了,是 x86 还是硬路由刷的?硬路由可能会有 CPU 性能不够的问题,建议用 x86 |
34
ttvast 2022-09-09 18:17:46 +08:00
根据我多次测试下来的,找到了一个最稳妥的多端口方式就是 iptables 的-m statistic --mode nth
用光猫拨号,路由器多个 wan 口接光猫,然后每个 lan 口分配一个地址做 nat 的负载均衡。完全不需要光猫的支持。 |
35
flowdesign OP @malash
dmesg | grep bond 的结果因为混杂了很多 vlan tag 的软件接口,去掉那些以后跟 wan 口有关的看起来正常 root@OpenWrt:~# dmesg | grep bond [ 18.209568] 8021q: adding VLAN 0 to HW filter on device bondwan [ 18.336374] bondwan: (slave eth1): Enslaving as an active interface with an up link [ 18.340263] device bondwan entered promiscuous mode [ 18.422994] bondwan: (slave eth2): Enslaving as an active interface with an up link 我的路由是 J4125 安装了 PVE 宿主,OP 是 PVE 里面的一个虚拟机,给分配了 2G 内存,日常负载我看过很低,测速的时候也就是不到 50%的 cpu 占用 回头再按你的建议把 vlan tag 去掉再看看,但是为了实现 IPTV 任意网口使用,还是要想个办法把 vlan51 、85 都加上的... |