O propósito da Máscara de IP é permitir máquinas com IP privado, endereço não-roteável em sua rede para acessar a Internet por meio da máquina "mascarada". O tráfico destinado de sua rede privada para a Internet deve ser manipulado para obter respostas da máquina que fez a petição, como em uma rota invertida. Para fazer isto, o kernel deve modificar o endereço IP da fonte de cada pacote e retornar respostas a ele, antes que o endereço privado IP faço o pedido de resposta, que é impossível através da Internet. O Linux usa Connection Tracking (conntrack) para acompanhar que conexões pertence a que máquinas e desviar cada pacote de retorno correspondente. O tráfico originado em sua rede privada é assim "mascarado" como tendo originado de seu gateway Ubuntu. Este processo possui referência na documentação da Microsoft como Conexão de Internet Compartilha.
Isto pode ser realizado com uma única regra no iptables, que pode diferir levemente baseado em sua configuração de rede:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
O comando acima supõe que seu endereço privado está no intervalo 192.168.0.0/16 e sua interface de Internet, ou dispositivo, é ppp0. A sintaxe é errada como se segue:
-t nat -- a regra é para ir na tabela nat
-A POSTROUTING -- a regra é para ser adicionada (-A) à corrente POSTROUTING
-s 192.168.0.0/16 -- a regra é aplicada a trafego originando do endereço especificado
-o ppp0 -- a regra é aplicada a trafego agendado para ser roteado pelo dispositivo de rede especificado
-j MASQUERADE -- trafego combinando com esta regra "pulará" (-j) para o alvo MASQUERADE para ser manipulado como descrito acima
Cada série na tabela de filtro (a tabela padrão, onde a maioria ou todos os processos e filtragem de pacotes ocorre) tem uma diretriz padrão para ACEITAR, mas se você estiver criando um firewall adicional para o dispositivo de gateway, você terá que definir políticas de DESCARTE ou REJEIÇÃO, em que caso seu tráfico "mascarado" necessitará de permissão pra ENVIAR para a série de regras de trabalho acima:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
Os comandos acima permitem todas conexões de sua rede local à Internet e todo trânsito relacionado a essas conexões retornar à máquina que os iniciou.