Perda ímpar de pacotes através do NAT com duas interfaces WAN

1

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

No servidor, a rede está acessível - 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 uma perda constante de pacotes de ~ 40%. Isso torna as conexões muito instáveis. Com um pouco de investigação, pude ver que recebo (e perco) pacotes que chegam através de ambas as interfaces mais ou menos igualmente, então não é como se uma das interfaces estivesse arrastando todo o resto para baixo por 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 links WAN novamente.

O que poderia causar isso? Alguma sugestão de como solucionar esse problema sem ter que abrir mão de um dos links WAN?

minha tabela de filtros iptables :

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 tabela iptables 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 tabela% man_de% 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    

iptables output:

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 é editado como está - não se preocupa muito com "privacidade" nesse caso

    
por librin.so.1 21.03.2014 / 19:49

1 resposta

0

Com base nas tabelas que você mostrou, você não está fazendo nada para garantir que o NAT mantenha os fluxos saindo da mesma interface em que eles começaram, o que significa que aproximadamente metade dos seus pacotes de saída provavelmente estão sendo traduzidos incorretamente. / p>

Para fazer o balanceamento de carga NAT correto, você precisa de uma regra de pré-formatação na tabela mangle marcando aleatoriamente novos fluxos com um 1 ou um 2, você precisa de pacotes de roteamento de regras ip rule marcados com 1 para interface WAN 1 e pacotes marcado 2 para a interface WAN 2, e você precisa de regras SNAT separadas na tabela iptables NAT, uma para cada interface WAN.

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

    
por 25.03.2014 / 18:25