Antes de chegar ao iptables, não é a única coisa que você precisa. Primeiro, no host, você deve ativar o encaminhamento IPv4,
echo 1 > /proc/sys/net/ipv4/ip_forward
e, no convidado, você deve configurar um gateway padrão,
ip route add default via 192.168.56.1 dev eth0
se o seu adaptador interno estiver usando a sub-rede 192.168.56.0/24
(o padrão), caso contrário, mude de acordo.
Quanto ao iptables: pacotes que chegam através do adaptador interno e tentam acessar a internet terão como endereço de origem o do convidado, o que na sua rede de contatos ninguém sabe, já que pertence a uma sub-rede diferente, 192.168.56.1
. Por isso nunca receberá uma resposta. Assim, precisamos de uma regra iptables
que reescreva o endereço de origem para ser o do host, que pode ser acessado pelo seu roteador / modem / gateway. O próprio iptables
manterá o controle da conexão para que os pacotes de resposta sejam enviados corretamente ao convidado, em vez de serem retidos pelo host; não há necessidade de fazermos nada.
Ambas as regras iptables
funcionarão
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.15
(o acima afirma que o host tem o endereço IP 192.168.1.15 e está conectado ao seu modem / gateway / roteador via eth0
; caso contrário, mude de acordo). A diferença entre essas duas declarações é clara: com o SNAT, você deve declarar explicitamente o endereço IP da interface, mas o MASQUERADE não. Portanto, se por algum motivo o endereço IP de sua interface for alterado, a regra com SNAT não estará mais correta, enquanto a com MASQUERADE (que verifica o endereço IP toda vez que for usada) não será necessário ajustar a regra. Obviamente, o MASQUERADE é um pouco mais lento que o SNAT.
Pessoalmente, prefiro o MASQUERADE porque torna minha configuração de firewall portátil, mas, como dizem, YMMV.