利用双网卡突破路由器千兆端口限制以实现满速2.5Gbps下行带宽的技术咨询
嘿,这个问题我碰到过不少,先给你拆解下为啥你用balance-rr反而降速了,再给你几个可行的解决方案~
首先说为啥balance-rr不行:你在Ubuntu里把双网卡绑成轮询模式,但你的路由器只有1Gbps端口,而且没开启对应的链路聚合功能。这种模式下,PC会把数据包轮流发到两张网卡,但路由器收到这些数据包后,因为没做聚合配置,会认为是来自不同设备的乱序流量,甚至可能因为ARP表冲突导致丢包严重,最终直接降到100Mbps,这完全是正常的反应。
接下来给你几个实际可行的方案,按优先级和效果排序:
方案一:硬件升级(最直接有效)
如果预算允许,换个带2.5Gbps WAN口和至少一个2.5Gbps LAN口的路由器,这是从根源解决问题的办法。毕竟你的ISP给的是2.5G下行,硬件不支持的话,软件层面的 workaround 都是凑活,没法真正跑满2.5G。
方案二:基于策略的多路径路由(软件层面最优解)
这个方法不需要路由器支持任何特殊功能,核心思路是把不同的流量分配到不同的网卡上,比如让多线程下载工具用一张网卡,日常上网用另一张,这样就能叠加两张1G网卡的带宽(理论最多2Gbps,离2.5G差一点,但比单网卡强很多)。
具体在Ubuntu上操作的步骤:
- 先确保两张网卡都正常获取到IP(可以用DHCP,也可以设静态IP,只要在同一个网段),用
ip addr show确认两张网卡的IP和网关(比如网关是192.168.1.1,网卡eth0的IP是192.168.1.10,eth1是192.168.1.11)。 - 添加自定义路由表:编辑
/etc/iproute2/rt_tables,在末尾加两行:100 eth0_table 101 eth1_table - 给每张网卡配置独立的路由规则:
# 给eth0的路由表添加默认网关和本地网段 ip route add default via 192.168.1.1 dev eth0 table eth0_table ip route add 192.168.1.0/24 dev eth0 table eth0_table # 给eth1的路由表做同样配置 ip route add default via 192.168.1.1 dev eth1 table eth1_table ip route add 192.168.1.0/24 dev eth1 table eth1_table - 配置流量分流规则,比如把下载工具的流量导向其中一张网卡:
- 先找到下载工具的UID(用
id 你的用户名可以看到,比如是1000) - 把这个UID的所有流量都导到eth1的路由表:
ip rule add uidrange 1000-1000 table eth1_table - 最后保留默认的主路由规则:
ip rule add priority 32766 table main ip rule add priority 32767 table default
- 先找到下载工具的UID(用
这样设置后,你的下载工具会用eth1跑流量,日常上网用eth0,多线程下载的时候不同线程会走不同网卡,就能叠加到接近2Gbps的带宽。注意:单个TCP连接只能用一张网卡,所以单线程下载还是只能跑1G,多线程才能叠加。
方案三:路由器端链路聚合(效果有限)
如果你的路由器支持802.3ad(LACP)链路聚合,可以把路由器上的两个1G LAN口绑成一个2G的聚合端口,然后PC端也用802.3ad模式 bonding,这样理论上能跑2Gbps下行。但问题是你的路由器只有1G端口,就算聚合也达不到2.5G,而且很多入门路由器根本不支持LACP,所以这个方案优先级最低。
总结一下:如果能换路由器最好,不行就用多路径路由的方法,比bonding靠谱多了~
备注:内容来源于stack exchange,提问作者gionotrante




