Perda estranha de pacotes através de NAT com duas interfaces WAN

Perda estranha de pacotes através de NAT com duas interfaces WAN

Eu tenho uma máquina servidor Linux que também uso como gateway/"roteador" de rede. Possui três interfaces de rede ativas – duas interfaces de rede conectadas à Internet através de diferentes ISPs e a terceira que fornece acesso à Internet para minhas máquinas locais através de NAT. Tenho balanceamento de carga entre os links WAN.

A partir do servidor, a rede é acessível perfeitamente – tudo funciona, o balanceamento de carga funciona e geralmente não há perdas de pacotes. As conexões entre o servidor e as máquinas locais também funcionam perfeitamente. Mas se eu acessar a internet/WAN de uma máquina local através do servidor, sempre vejo perda constante de pacotes de aproximadamente 40%. Isso torna as conexões muito instáveis. Com um pouco de investigação, pude ver que recebo (e perco) pacotes que passam por ambas as interfaces de forma mais ou menos igual, então énãocomo se uma das interfaces estivesse arrastando todo o resto, perdendo todos os seus pacotes.

Se eu desabilitar qualquer um dos dois links WAN, essa perda de pacotes desaparecerá instantaneamente. Ele reaparece instantaneamente se eu ativar os dois links WAN novamente.

O que poderia causar isso? Alguma dica de como solucionar esse problema sem precisar desistir de um dos links WAN?

minha iptablestabela de filtros:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

minha iptablestabela nat:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.42.0.0/24        !10.42.0.0/24 

minha iptablesmesa mangle:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x0
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW MARK set 0x2
MARK       all  --  0.0.0.0/0            0.0.0.0/0            state NEW statistic mode random probability 0.50000000000 MARK set 0x1

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination    

ip route showsaída:

default 
    nexthop via 10.7.0.254  dev eth0 weight 1
    nexthop via 78.62.255.254  dev eth2 weight 1
10.7.0.0/16 dev eth0  proto kernel  scope link  src 10.7.5.102 
10.42.0.0/24 dev eth1  proto kernel  scope link  src 10.42.0.254 
78.62.192.0/18 dev eth2  proto kernel  scope link  src 78.62.239.10 
169.254.0.0/16 dev eth1  scope link  metric 1000 

tudo não foi editado como está - não se preocupe muito com "privacidade" neste caso

Responder1

Com base nas tabelas que você mostrou, você não está fazendo nada para garantir que o NAT mantenha os fluxos saindo pela mesma interface em que foram iniciados, o que significa que aproximadamente metade dos seus pacotes de saída provavelmente estão sendo mal traduzidos.

Para fazer o balanceamento de carga NAT corretamente, você precisa de uma regra de pré-roteamento na tabela mangle marcando aleatoriamente novos fluxos com 1 ou 2, você precisa de ip ruleregras de roteamento de pacotes marcados como 1 para a interface WAN 1 e de pacotes marcados como 2 para a interface WAN 2 , e você precisa de regras SNAT separadas na iptablestabela NAT, uma para cada interface WAN.

Para uma descrição mais detalhada, consulte O balanceamento de carga Iptables de Diego Lima em poucas palavras

informação relacionada