我使用lartc.org和iptables方法完成了负载平衡,我发现iptables方法更容易理解和实现.唯一的缺点是你需要一个相当新的iptables版本才能使用统计模块
让我们假设一些事情:
LAN:eth0:192.168.0.1/24
ISP1:eth1:192.168.1.1/24,网关:192.168.1.2/24
ISP2:eth2:192.168.2.1/24,网关:192.168.2.2/24
所以这是我将如何使用iptables方法:
路线表
首先编辑/ etc / iproute2 / rt_tables以在路由表编号和ISP名称之间添加映射
...
10 ISP1
20 ISP2
...
因此,表10和20分别用于ISP1和ISP2.我需要使用此代码片段(使用hxxp://linux-ip.net/html/adv-multi-internet.html)从主表的路径填充这些表.
ip route show table main | grep -Ev '^default' \
| while read ROUTE ; do
ip route add table ISP1 $ROUTE
done
并通过该ISP1的网关将默认网关添加到ISP1:
ip route add default via 192.168.1.2 table ISP1
为ISP2做同样的事情
所以现在我有2个路由表,每个ISP 1个.
iptables的
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
NAT
NAT很简单:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE