Simples
Aqui está um conjunto de regras iptables
muito simples que mascara tudo. Este funciona para muitas configurações mais simples. Não funcionará se a caixa estiver funcionando como um roteador completo - ela tem um hábito potencialmente desagradável de ativar o tráfego all que sai do seu computador.
iptables -A POSTROUTING -o eth+ -t nat -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -j MASQUERADE
Completa
Se a solução simples não funcionar ou se sua configuração for mais complexa, esse conjunto de regras poderá ajudar:
NATIF='vboxnet+'
MARK=1
iptables -A PREROUTING -t mangle -i $NATIF -j MARK --set-mark $MARK
iptables -A POSTROUTING -o eth+ -t nat -m mark --mark $MARK -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -m mark --mark $MARK -j MASQUERADE
Marca os pacotes que chegam através de qualquer interface vboxnet*
, e depois, mascara (SNAT) qualquer pacote saindo de eth*
ou wlan*
com o conjunto de marcações.
Também…
Além das regras iptables
, você precisará transformar seu computador host em um roteador, ativando o encaminhamento de pacotes. Coloque:
net.ipv4.ip_forward=1
em /etc/sysctl.conf
, depois diga
sudo sysctl -p /etc/sysctl.conf.
Alternativamente:
echo 1 | sudo tee /proc/sys/net/ipv4_ip_forward
O convidado também deve ter uma rota padrão que faça o gateways enviar pacotes através das interfaces externas do host (e, para isso, as chances são do modo somente host não funcionarão). Verifique sua tabela de roteamento (isso depende do sistema operacional convidado).
Além disso, instale wireshark
ou tshark
e use-os para examinar os pacotes. Não há melhor maneira de resolver problemas genéricos de rede como este.
Pessoalmente, sugiro alterar o convidado para usar o modo de rede em ponte e disponibilizar para ele ambas as interfaces do host. Em seguida, ele pode se conectar sozinho, usando o serviço DHCP no roteador para obter um endereço local por conta própria. Nenhum NAT necessário.