Estes são os sites oficiais:
Para a mailing list oficial do Netfilter vá em Netfilter List.
Normalmente, pacotes em uma rede viajam de sua origem (por exemplo, o computador de usa casa) para seu destino (por exemplo, www.gnumonks.org) através de vários links. Nenhum destes links realmente alteram seu pacote: eles apenas reenviam o mesmo.
Se algum destes links fizesse NAT, eles iriam alterar a origem ou o destino do pacote. Como você pode imaginar, esta não é a forma pela qual seu sistema foi feito para trabalhar, logo NAT é sempre algo complexo. Geralmente a máquina que faz NAT vai relembrar-se como o pacote foi alterado, e quando um pacote de resposta segue o caminho inverso, a máquina irá fazer a alteração reversa naquele pacote resposta, é assim que as coisas funcionam.
Em um mundo perfeito, você não usaria. Por enquanto, as razões são:
A maioria dos provedores de acesso te dá um único endereço IP quando você conecta. Você pode mandar pacotes com qualquer endereço de origem que você quiser, mas apenas respostas para pacotes com esse endereço de origem retornarão para você. Se você quiser utilizar mais de uma máquina (uma rede local na sua casa) para conectar na Internet através deste único link, você precisará de NAT.
Esta é a maneira de NAT mais utilizada atualmente, e é conhecida como Masquerading no mundo Linux. Eu chamo isso de SNAT, porque você altera o endereço de origem do primeiro pacote.
Às vezes, você quer mudar o destino dos pacotes que chegam na sua rede. Frequentemente isto ocorre porque (como dito acima) você tem apenas um endereço IP, mas quer que as pessoas alcancem servidores atrás do que tem o endereço IP real. Reescrevendo o destino dos pacotes que chegam, é possível implementar isso.
Uma variação comum disto é load-sharing, na qual a carga de pacotes é dividida entre máquinas. este tipo de NAT era chamado de port-forwarding em versões anteriores do Linux.
Às vezes você pretende que cada pacote que atravesse sua máquina Linux é destinado a um programa específico. Isto é utilizado para fazer proxies transparentes: um proxy é um programa que fica entre sua rede e o mundo extertno, controlando a comunicação entre os mesmos. O termo transparente refere-se ao fato de que sua rede não saberá que está lidando com um proxy, a não ser, é claro, que seu proxy não funcione :).
O Squid pode ser configurado de forma a trabalhar desta maneira, e isto é chamado de redirection ou transparent proxying em versões Linux anteriores.