Linux Kernel在3.6之前使用了路由caching来做IPv4多path路由,这意味着在两个单独的线路/ ISP之间的路由很容易。 algorithm从3.6改为每个包,这意味着需要一些路由表/规则/ iptables标记技巧来实现两条线/ ISP。
但是,如果您有两条具有相同ISP的线路,可以按平衡/故障转移方式将每条线路上的单个IP路由到每条线路上,那么从3.6开始,您可以轻松实现线路绑定(在IP级别)每个数据包在两个方向上的路由。
从4.4开始, 内核再次改变为基于源地址和目的地址的散列的基于stream量的负载平衡。
我目前正在运行内核4.4.36,并通过PPPoE连接使用多path路由。 我的来自ISP的下行stream量在每个数据包的基础上通过两条独立线路(一条IP路由到两条线路)。 这给我一个下载速度比一个单独的线速度更快。 几乎两条线的速度加起来。 它工作得很好,Skypevideo,VoIP(UDP),YouTube等都很好。
由于具有如此好的下行体验,我想尝试上行,但是我的上行stream量是根据跨ppp设备(具有相同IP地址)的较新的基于stream的algorithm来路由的。 这意味着我无法获得比单行速度更快的上传速度。
有没有一种方法来configuration当前的内核使用每个数据包algorithm? 还是其他一些方法来实现每个分组的多path路由? 我需要恢复到一个较旧的内核(我不想做其他各种原因)吗?
我的ISP不支持多链接ppp。
如果是相关的,我目前在Raspberry Pi 3上运行Arch Linux ARMv7。
好的,在有了更多的时间来调查之后,我发现了一种使用Linux TEQL(True Link Equalizer)的方法。 这里是我松散地遵循的一个链接,但有一些调整。
http://lartc.org/howto/lartc.loadshare.html
这就是我如何在Arch Linux ARMv7(树莓派3)
开机时:
应该在启动时运行以下命令来加载相应的内核模块。
modprobe sch_teql
以下命令也可以在启动时运行,假设您想从eth0上的本地networking进行NAT。
sysctl -w net.ipv4.ip_forward iptables -A INPUT -i ppp+ -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i ppp+ -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A POSTROUTING -t nat -o teql+ -j MASQUERADE
FORWARD返回stream量在ppp +上,而teql +上的POSTROUTING MASQUERADE,因为stream出的stream量在teql上,返回stream量在ppp上返回。
当ppp链接出现时:
假设要负载均衡的链接是ppp,则需要在/etc/ppp/ip-up.d/脚本的脚本中运行以下命令。
sysctl -w net.ipv4.conf.ppp1.rp_filter=2 sysctl -w net.ipv4.conf.ppp2.rp_filter=2 tc qdisc add dev ppp1 root teql0 tc qdisc add dev ppp2 root teql0 ip address add 1.1.1.1/32 dev teql0 # you can add additional public IP addresses teql0 if you need to ip link set teql0 up ip route replace default scope global dev teql0
1.1.1.1是您的面向ISP的公共IP地址。 额外的公共IP可以分配给teql0设备,但不需要分配给ppp设备。 在我的设置中,两个ppp链接共享相同的IP(由pppoe等协商)。如上所示手动分配的teql链接。 ISP需要同时向两个链路发送IPstream量。
在上面的脚本中,反向path( rp_filter )设置为2 (松散),这样返回的数据包就不会因为它们返回到ppp接口而不是teql0。
我已经设置了它,它完美的作品。 好简单! 当链接失败时,会有无缝的故障转移。 当他们出现时,他们就开始工作了。 似乎没有数据包丢失或延迟,当它失败时,也没有什么时候它恢复。
此外,其中一个评论者build议使用策略路由的下面的链接,用iptables来标记其他数据包等,但是我会在几天内尝试看看它是否比上面的更好,并在这里提供反馈。
http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing