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.