Por que o mascaramento de IP (NAT de origem) no kernel do linux falha ao definir IP de origem em altas taxas de pacote

1

Eu estou tentando testar o throughput do NAT linux padrão. Eu configurei a seguinte rede virtual:

[192.168.42.5] <--> [192.168.42.2:192.168.35.2] <--> [192.168.35.10]

O host do meio tem 2 interfaces, roda o 14.04 e é configurado como NAT:

sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth2 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth2 -o eht1 -j ACCEPT

O host [192.168.42.5] também tem a regra de rota para a segunda rede:

sudo ip route add 192.168.35.0/24 via 192.168.42.2 dev eth1

Em seguida, corro hping3 no host [192.168.42.5] :

sudo hping3 192.168.35.10  -k -s 3453 -S -n -p 80 -i u1000

E eu também assisto a comunicação sobre o [192.168.35.10] com tcpdump :

sudo tcpdump -i eth1

O sistema funciona bem nas taxas ~ 1k Pkt / segundo. tcpdump exibe os pacotes que chegam:

IP 192.168.42.5.3453 > 192.168.35.10.http: Flags [S], seq 1520954148, win 512, length 0

Mas quando eu aumento a taxa de pacotes (com -i u700 key), por alguma razão o NAT falha em reescrever o endereço de origem, e o alvo obtém pacotes como este:

IP 192.168.42.5.3453 > 192.168.35.10.http: Flags [S], seq 1554999038, win 512, length 0

e os ignora, não tendo nenhuma rota disponível para a sub-rede 192.168.42.0/24 , então hping3 não recebe nenhuma resposta. Se isso aconteceu, eu preciso relaxar e esperar por cerca de 1-2 minutos, até que eu possa obter NAT para a operação normal, mesmo nas taxas de pacote lento.

Por que o NAT falha tão estranhamente? Se não tem capacidade, por que ainda encaminha pacotes não modificados?

P.S. Quando eu configuro o roteador usual em vez do NAT (com a regra correspondente no host [192.168.35.10] ), ele processa rotineiramente taxas de 10k Pkt / s.

    
por Necto 07.07.2016 / 21:31

1 resposta

2

O problema pode ser o -k flag. Pelo que vejo, você configurou uma configuração muito incomum, criando grandes volumes de conexões com a mesma origem / destino. IPtables é um firewall de estado e rastreia cada conexão individualmente. Eu especularia que você acabaria criando um alto volume de colisões em uma tabela de hash. Isso geralmente diminui o acesso, que pode ser o que você está vendo.

O roteador pode estar operando de maneira sem estado ou sem estado. Isso reduz a sobrecarga envolvida.

    
por 08.07.2016 / 00:55