Como rotear o tráfego de uma VM do VirtualBox apenas por uma VPN?

10

Eu tenho uma VM VirtualBox (tanto o host quanto o convidado Ubuntu Maverick). Meu provedor de VPN usa o OpenVPN para configurar os TUNs. Eu gostaria de configurar as coisas para que o tráfego da VM passe apenas pela VPN e seja descartado se a VPN cair (aconteceu). Sugestões? Meu iptables-fu está um pouco fraco

O que eu tentei: usando a "rede somente host" do VirtualBox, que fornece uma interface de loopback vboxnet0 no host para o convidado, mas não conseguiu acertar as tabelas / rotas do iptables. Eu gostaria de evitar o NAT na VM, pois já tenho o dobro de NAT (ISP e roteador doméstico) e mais um nível fará minha cabeça estourar.

Outras possibilidades: alternar para a TAP (como?) E fazer a ponte para a VM. Criando VPN dentro da VM e filtrando todo o tráfego eth0, exceto VPN, conecte-se ao iptables (mas veja abaixo)

Pontos de bônus: se você puder me dizer como usar diferentes pontos de saída da VPN no host e no convidado sem fazer o túnel duplo do tráfego do convidado através da VPN do host.

pfein
fonte

Respostas:

4

Haverá outras soluções, mas é isso que estou pensando:

  1. Configure a VM no modo de ponte. Isso dará à sua máquina virtual um endereço IP na mesma rede que seu host.
  2. Configure a VPN no host, digamos que seja tun0.
  3. Ativar roteamento no host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Configure a VM com o endereço IP do host como o GW padrão.

Nesse ponto, o host possui a conexão VPN e a VM roteará todo o tráfego para o host. Tudo o que resta a fazer é restringir o host para que ele não permita que o hóspede direcione qualquer tráfego que não atravesse o dispositivo tun0. Você poderia fazer isso com um conjunto de regras do iptables, algo como isto:

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Isso deve funcionar. A primeira regra define uma política padrão para pacotes DROP na cadeia FORWARD. Isso afeta apenas os pacotes que seu host encaminharia, não os pacotes para o host (INPUT) ou para o host (OUTPUT). A segunda regra permite qualquer tráfego que esteja encaminhando o tun0 - você pode reforçá-lo com uma fonte - se desejar. E a última regra deve permitir que as respostas que retornam do tun0 retornem à VM.

Sua VPN espera que todos os pacotes na interface tun sejam de um único IP? Nesse caso, você também desejará adicionar uma regra NAT. Provavelmente algo como:

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
grep
fonte