Então, aqui está a situação.
Eu tenho dois links ISP atualmente ativos e trabalhando para rotear o tráfego da minha rede, com uma configuração de iptables muito semelhante à resposta aceita em Balanceamento de carga & NAT-ing várias conexões ISP no Linux
Eu tenho duas linhas no meu /etc/iproute2/rt_tables
que parecem:
...
10 COMCAST
20 CENTURYLINK
...
Eu configurei as rotas em cada tabela com o gateway padrão adequado e configurei as regras da seguinte forma:
ip rule add fwmark 1 table COMCAST prio 33000
ip rule add fwmark 2 table CENTURYLINK prio 33000
E então eu configuro a marcação e o roteamento de pacotes baseados no iptables:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
CONNMARK all -- anywhere anywhere CONNMARK restore
ACCEPT all -- anywhere anywhere mark match ! 0x0
MARK all -- anywhere anywhere MARK set 0x1
MARK all -- anywhere anywhere statistic mode random probability 0.33300000010 MARK set 0x2
CONNMARK all -- anywhere anywhere CONNMARK save
O problema é que, se eu deixar a rota padrão do sistema (como em ip route list
sem table
arguments) no lugar para qualquer ISP, parece que isso substitui o roteamento de iptables
para máquinas clientes - não os pacotes passam pela conexão não padrão, de acordo com watch -n 1 ifconfig [interface]
. Se eu excluir a rota padrão de todo o sistema, o roteamento funciona muito bem para todas as máquinas do meu cliente, com 33% dos quais os pacotes passam pela linha CenturyLink e o restante pela linha Comcast. Isso é incrível!
No entanto, não ter uma rota padrão quebra tudo o que precisa de uma conexão com a Internet no próprio roteador. Não consigo executar apt-get update
no roteador, por exemplo. Então, como configuro uma rota padrão para o sistema que não substituirá a configuração de roteamento iptables
? Tentei configurar a rota multipath de acordo com as instruções do site LARTC da seguinte forma:
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop dev $IF2 weight 1
(Eu tive que modificar um pouco do guia LARTC, porque a rota padrão da conexão CenturyLink não tem um IP de gateway, apenas dev ppp0
, e funciona para o gateway padrão da tabela.)
Mas a rota multipath quebra tudo no servidor E nos clientes para os quais está roteando. Ajuda?