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.