好的,因此在花了更多时间进行调查之后,我找到了使用Linux TEQL(真链路均衡器)进行处理的方法。这是我松散跟随的链接,但有一些调整。
http://lartc.org/howto/lartc.loadshare.html
这就是我在Arch Linux ARMv7(Raspberry Pi 3)上运行它的方式。
开机时:
引导时应运行以下命令以加载适当的内核模块。
modprobe sch_teql
假设您要从eth0上的本地网络进行NAT,以下命令也将在引导时运行。
sysctl -w net.ipv4.ip_forward=1
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返回流量在ppp +上,而POSTROUTING MASQUERADE在teql +上,因为传出流量在teql上流出,而返回流量在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需要在两个链路上均等地发送IP流量。
在上面的脚本中,反向路径(rp_filter
)都设置为2
(loose),因此返回数据包不会由于返回数据包返回到ppp接口而不是teql0而被丢弃。
我已经按照这种方式进行设置,并且效果很好。很容易!链接发生故障时,将进行无缝故障转移。当他们出现时,他们只是再次开始工作。似乎在故障转移时没有数据包丢失或延迟,在备份时也没有。
另外,一位评论者建议使用以下链接,该链接使用策略路由,并使用iptables标记每个其他数据包等。但是,我将在几天后尝试查看它是否比上述方法更好,并在此提供反馈。
http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing