Nós fazemos algo bem parecido aqui. 3 sub-redes atrás de um "roteador" do CentOS5. Basicamente, apenas temos o iptables definido como a regra de tabela 'nat' a seguir:
iptables -t nat -A POSTROUTING -o <external NIC device> -j SNAT --to-source <external interface IP>
No nosso caso, o dispositivo é eth1 e o IP é 10.0.0.2 para diferenciar das sub-redes de Classe C IP4 que ainda estamos usando aqui.
O trabalho real é feito pela tabela de roteamento. Se suas NICs estiverem configuradas corretamente, as entradas da tabela de roteamento já deverão existir.
Por exemplo, temos essas duas sub-redes na tabela de roteamento:
192.168.16.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.13.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
Mas o tráfego externo é tratado pela linha do gateway padrão:
0.0.0.0 10.0.0.10 0.0.0.0 UG 0 0 0 eth1
E o tráfego que retorna através do NAT é rastreado pelo módulo netfilter no kernel e enviado ao IP de origem pela linha 'State RELATED, ESTABLISHED' na cadeia regular FORWARD no iptables:
158M 168G ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 8M 11G ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
(Nota: Qualquer neckbeard quer corrigir erros, por favor, insira um comentário. Eu adoraria ouvir uma crítica.)