Eu fiz o balanceamento de carga usando os métodos lartc.org e iptables , e acho que o método iptables é mais fácil de entender e implementar. A única desvantagem é que você precisa de uma versão bastante recente do iptables para poder usar o módulo estatística
Vamos supor algumas coisas:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, gateway: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, gateway: 192.168.2.2/24
Então, aqui está como eu faria usando o método iptables:
Tabelas de rotas
Primeiro, edite o arquivo / etc / iproute2 / rt_tables para adicionar um mapa entre os números da tabela de rotas e os nomes dos ISPs
...
10 ISP1
20 ISP2
...
Portanto, as tabelas 10 e 20 são para ISP1 e ISP2, respectivamente. Eu preciso preencher essas tabelas com rotas da tabela principal com este snippet de código (que eu tirei de 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
E adicione o gateway padrão ao ISP1 através do gateway do ISP1:
ip route add default via 192.168.1.2 table ISP1
Faça o mesmo para o ISP2
Então, agora eu tenho duas tabelas de rotas, uma para cada ISP.
Iptables
OK agora eu uso o iptables para distribuir uniformemente pacotes para cada tabela de rotas. Mais informações sobre como este trabalho pode ser encontrado aqui ( link ) e aqui ( link )
# 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
Bem, NAT é fácil:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE