Eu não sei o que você está fazendo de errado, mas aqui está um exemplo. Configuração: Dois namespaces de rede ns0
e ns1
com dois veth
pares, o principal espaço de nomes para a frente:
ns0 <------- main -------> ns1
veth0b --- veth0a veth1a --- veth1b
10.0.0.1 10.0.0.254 10.0.1.254 10.0.1.1
Fazendo tcpdump
em veth0a
e veth1a
. Ping ns0
de ns1
sem NAT mostra:
IP 10.0.1.1 > 10.0.0.1: ICMP echo request, id 20765, seq 1, length 64
IP 10.0.0.1 > 10.0.1.1: ICMP echo reply, id 20765, seq 1, length 64
em veth0a
e em veth1a
:
IP 10.0.1.1 > 10.0.0.1: ICMP echo request, id 20765, seq 1, length 64
IP 10.0.0.1 > 10.0.1.1: ICMP echo reply, id 20765, seq 1, length 64
Após ativar o SNAT em veth0a
com
iptables -t nat -A POSTROUTING -o veth0a -s 10.0.1.1/32 -j SNAT --to 10.0.1.90
agora em veth0a
existe
IP 10.0.1.90 > 10.0.0.1: ICMP echo request, id 20795, seq 1, length 64
IP 10.0.0.1 > 10.0.1.90: ICMP echo reply, id 20795, seq 1, length 64
ao mesmo tempo em veth1a
IP 10.0.1.1 > 10.0.0.1: ICMP echo request, id 20795, seq 1, length 64
IP 10.0.0.1 > 10.0.1.1: ICMP echo reply, id 20795, seq 1, length 64
Então, pode-se ver claramente que o SNAT está funcionando.
Como eu disse, você precisa despejar pacotes em ambos a interface de saída e de entrada.