Como configuro a rota padrão em um roteador Linux com links ISP duplos?

2

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?

    
por clee 01.04.2016 / 20:45

1 resposta

0

Eu consegui descobrir isso sozinho.

A solução, no caso de alguém se deparar com uma situação semelhante, foi alterar a prioridade das entradas ip rule para fwmark. Eu não li a resposta da lbt à questão relacionada com bastante cuidado; Ele especificamente aponta que definir a prioridade para 33000 fará com que essas regras ocorram após a consulta default table, que é o oposto do que eu quero. Então, eu alterei as regras para ficar assim:

100:    from all fwmark 0x1 lookup COMCAST
100:    from all fwmark 0x2 lookup CENTURYLINK

E agora, ter uma rota padrão não quebra o roteamento baseado em firewall e posso executar apt-get e todos os meus outros programas sem problemas. Viva!

    
por 03.04.2016 / 04:45