Como posso fazer com que os convidados do VirtualBox compartilhem a conexão VPN do host?

38

Pergunta

Quando inicio minha VPN no computador desktop ubuntu que atua como um roteador, a sub-rede conectada perde a conectividade com a Internet, mas ainda está acessível (LAN). Idealmente, gostaria de saber como habilitar a sub-rede conectada para recuperar o acesso à Internet roteando através do túnel VPN quando a VPN está ativa.

Contexto

Eu tenho o seguinte layout de rede:

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

sub-rede 192.168.0.0/24 em eth0: 0 que se conecta ao gateway 192.168.0.1 que tem 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 na eth0 são encaminhados através da eth0: 0 com masquerading e a conectividade normal à internet é boa. No entanto, quando eu inicio meu túnel VPN neste roteador, a conectividade com a Internet é perdida para as VMs na subnet 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)

Eu suspeito que a solução terá 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 está 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:

Um dos arquivos VMs /etc/network/interfaces :

# 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
    
por Programster 11.02.2014 / 09:05

5 respostas

21

Isso não funcionará em uma configuração Networking em ponte . A partir da documentação do VirtualBox :

% bl0ck_qu0te%

Como suas máquinas virtuais estão usando eth0 diretamente, elas não estão cientes da interface tun0 do túnel que está sendo executado sobre ela. Você precisará usar uma configuração de rede virtual diferente.

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

  • A Tradução de Endereços de Rede (NAT) é de longe a solução mais simples. O VirtualBox ativará as VMs em qualquer conexão com a Internet disponível para o host. Isso é totalmente transparente para as VMs. No entanto, isso impede conexões do host com 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 de interface que você tem agora nas VMs, mas será necessário configurar o host para ser o gateway e o roteador, e tornar NAT as VMs para o exterior (seja em todo o seu eth0 ou tun0 ).

  • Combine os itens acima: forneça a cada VM duas interfaces, uma para o mundo externo (através do NAT do VirtualBox) e a outra anexada para a LAN somente de host .

  • Experimente a configuração experimental NAT Networking do VirtualBox. Eu não olhei para isso, mas sua descrição sugere que pode ser o ajuste certo.

por zwets 11.02.2014 / 14:42
20

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

    
por Aks 08.07.2016 / 21:11
3

Aqui estão algumas informações úteis para caixas vagrant 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

link link

    
por Artistan 12.05.2016 / 17:28
3

Tive o mesmo problema. Aqui está como eu resolvi isso:

  1. Altere o tipo de rede do Sistema de convidado para ser "Somente host"
  2. Torne o gateway padrão do Guest point para o ip ifconfig vboxnet0 do Host para encontrá-lo.

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

Se você direcionar todo o tráfego por 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.5 é o seu gateway tun0 e 192.168.5.0/24 é o seu intervalo de rede vboxnet0.

Se você encaminhar apenas determinados tráfegos por meio de 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.5 é seu gateway tun0 e 192.168.43.95 é o gateway de wlan0 e 192.168.5.0/24 é seu intervalo de rede vboxnet0.

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

    
por Ramast 27.01.2016 / 10:38
3

Depois de procurar por 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 isso no terminal:

VBoxManage modifyvm "VM name" --natdnsproxy1 on

fonte: link

    
por Arier 21.09.2017 / 04:29