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

10

Eu tenho uma VM VirtualBox (host e convidado do Ubuntu Maverick). Meu provedor de VPN usa o OpenVPN para configurar TUNs. Eu gostaria de definir as coisas para que o tráfego da VM só ultrapasse a VPN e seja descartado se a VPN cair (aconteceu). Sugestões? Meu iptables-fu é um pouco fraco

O que eu tentei: usar o "host-only networking" do VirtualBox, que fornece uma interface de loopback vboxnet0 no host para o guest, mas não conseguiu acertar o iptables / routes. Eu gostaria de evitar o NAT na VM, já que eu já sou duplamente NAT (ISP & home router) e mais um nível fará minha cabeça estourar.

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

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

    
por pfein 11.02.2011 / 01:03

1 resposta

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 do seu host.
  2. Configure a VPN no host, digamos que seja tun0.
  3. Ativar o roteamento no host echo 1 > /proc/sys/net/ipv4/ip_forward
  4. Configure a VM com o endereço IP do host como o padrão gw.

Neste ponto, o host tem 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 convidado roteará qualquer tráfego que não vá através do dispositivo tun0. Você poderia fazer isso com um conjunto de regras do iptables algo assim:

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 somente os pacotes que o seu host iria rotear, não os pacotes para o host (INPUT) ou do host (OUTPUT). A segunda regra permite que qualquer tráfego que esteja roteando tun0 - você poderia aumentar esse valor com um --source, se quisesse. E a última regra deve permitir que as respostas voltem do tun0 para o caminho de volta para a VM.

A 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}
    
por 23.03.2011 / 00:36