Como faço para que os convidados do VirtualBox compartilhem a conexão VPN do host?

51

Pergunta, questão

Quando inicio minha VPN no meu computador desktop ubuntu, que atua como roteador, a sub-rede conectada perde a conectividade com a Internet, mas ainda está acessível (LAN). Idealmente, eu gostaria de saber como habilitar a sub-rede conectada para obter novamente o acesso à Internet, roteando pelo túnel da VPN quando a VPN estiver ativa.

Contexto

Eu tenho o seguinte layout de rede:

sub-rede 172.16.0.0/20 em eth0 para minhas máquinas virtuais VirtualBox.

sub-rede 192.168.0.0/24 no eth0: 0 que se conecta ao gateway 192.168.0.1 que possui acesso à Internet.

Isso é mostrado no arquivo / etc / network / interfaces:

auto lo
iface lo inet loopback

# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
    address 172.16.0.1
    netmask 255.255.0.0
    gateway 192.168.0.164
    dns-nameservers 8.8.8.8

# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
    address 192.168.0.164
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8
    gateway 192.168.0.1

Os pacotes no eth0 são encaminhados através do eth0: 0 com mascaramento e a conectividade normal à Internet está correta. No entanto, quando inicio meu túnel VPN neste roteador, a conectividade com a Internet é perdida para as VMs na sub-rede eth0 (ainda permanece para o roteador).

Abaixo está a saída do ifconfig quando o túnel está ativo:

eth0      Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:172.16.0.1  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
          TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:208264321 (208.2 MB)  TX bytes:16660945 (16.6 MB)
          Interrupt:16 

eth0:0    Link encap:Ethernet  HWaddr 00:1f:bc:01:c3:ab  
          inet addr:192.168.0.164  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:16 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
          TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22755054 (22.7 MB)  TX bytes:22755054 (22.7 MB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Suspeito que a solução tenha algo a ver com a tabela de roteamento . Mostra o seguinte quando o túnel está ativo :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
37.139.23.49    192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

e o seguinte quando o túnel inativo :

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

Configuração do Virtualbox para Vms:

insira a descrição da imagem aqui

Um dos /etc/network/interfacesarquivos de VMs :

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.0.3
        netmask 255.255.0.0
        network 172.16.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        dns-nameservers 8.8.8.8
Programador
fonte
Como as redes das suas VMs são configuradas no VirtualBox?
Zwets
pontes para eth0 - informações adicionadas à pergunta.
Programster
Eu sei que não é exatamente a resposta à sua pergunta, mas para mim acabou por ser mais fácil de configurar 2 conexões VPN em vez disso: 1 a partir da máquina host, outra da máquina convidada
Zhenya

Respostas:

28

Isso não funcionará em uma configuração de ponte de rede . Na documentação do VirtualBox :

Rede em ponte

Isso é para necessidades de rede mais avançadas, como simulações de rede e servidores em execução em um convidado. Quando ativado, o VirtualBox se conecta a uma de suas placas de rede instaladas e troca pacotes diretamente, contornando a pilha de rede do sistema operacional host.

Como suas máquinas virtuais estão usando eth0diretamente, elas desconhecem a tun0interface do túnel que está sendo executada sobre ele. Você precisará usar uma configuração de rede virtual diferente.

Você tem (entre outras) estas opções:

  • A conversão de endereços de rede (NAT) é de longe a solução mais simples. O VirtualBox fará NAT das VMs em qualquer conexão de Internet disponível para o host. Isso é totalmente transparente para as VMs. No entanto, isso impede conexões do host para as VMs ou conexões entre as VMs.

  • Use Rede somente de host para criar uma sub-rede adequada contendo as VMs e o host. Isso não exigirá alterações na configuração da interface que você tem agora nas VMs, mas será necessário configurar o host para ser o gateway e o roteador e torná-lo NAT das VMs para o exterior (seja através dele eth0ou tun0).

  • Combine o que foi dito acima: forneça a cada VM duas interfaces, uma de gateway para o mundo externo (através do NAT do VirtualBox ) e a outra conectada à LAN do host .

  • Experimente a configuração experimental de rede NAT do VirtualBox . Atualização 2019: esse recurso já amadureceu: conecte-se ao NAT do host e escolha o tipo de adaptador de rede Paravirtualizada (virtio-net) .

zwets
fonte
35

Para o VirtualBox com host do Windows e convidado do linux (mint), vá para a guia Interface da rede e defina "Adaptador" => "Anexado a: NAT" e "Tipo de adaptador: rede paravirtualizada". Depois disso, inicie sua VM e você poderá usar a rede VPN.

Aks
fonte
11
Isso funcionou muito bem para mim, obrigado! Usando o Ubuntu 16.04LTS como convidado e host do Windows 10, com o Virtual Box 5.0.24.
womp 10/07/16
11
Brilhante! Isso funciona para o meu host do Windows 10 e o convidado do VirtualBox (5.0.26) CentOS 7.
Zaki
11
Surpreendente! Deve ser a resposta aceita. Estava procurando essa solução há muito tempo. Muito obrigado!
21317 MrSpock
11
melhor resposta aqui!
21717 Mike
Por que diabos não é essa a resposta aceita? Tão fácil e correto!
Michael Goldshteyn
6

Depois de procurar essa solução em todos os lugares, finalmente encontrei uma solução funcional que não requer muitas alterações de configuração e é realmente simples. Use a rede NAT padrão e digite isto no terminal:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

fonte: https://www.virtualbox.org/ticket/13993

Arier
fonte
4

Teve o mesmo problema. Aqui está como eu resolvi:

  1. Altere o tipo de rede do sistema convidado para "Somente host"
  2. Faça o gateway padrão do convidado apontar para o ip do host ifconfig vboxnet0para encontrá-lo.

O último passo é rotear os pacotes provenientes do vboxnet0 para a sua VPN.

Se você rotear todo o tráfego através da VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5

Onde 10.8.0.5está o seu gateway tun0 e o 192.168.5.0/24seu alcance de rede vboxnet0.

Se você apenas rotear determinado tráfego através da VPN:

iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o tun0 -j SNAT --to-source 10.8.0.5
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 ! -d 192.168.5.0/24 -o wlan0 -j SNAT --to-source 192.168.43.95

Onde 10.8.0.5está o seu gateway tun0 e o 192.168.43.95seu wlan0gateway e o 192.168.5.0/24seu alcance de rede vboxnet0.

Nota: Esta solução permite que o sistema operacional convidado seja tratado da mesma maneira que o sistema operacional host. Somente IPs configurados para passar pela VPN no sistema operacional host passarão por ele no convidado.

Ramast
fonte
3

Aqui estão algumas informações úteis para caixas vagrantes usando o host vpn. Basicamente, você precisa definir a opção natdnshostresolver1 Observe que isso NÃO funcionará ao usar a configuração public_network do Vagrant.

  config.vm.provider :virtualbox do |vb|
      # ---- other options....
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end

http://renier.morales-rodriguez.net/post/90674523562/sharing-host-vpn-with-virtualbox-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant -rob-allen.html

Artistan
fonte
11
O primeiro link tinha a solução para mim. Ele mostra como ativar a opção natdnshostresolver1 para a VM.
Kol