No VirtualBox, como configurar máquinas virtuais somente para host que podem acessar a Internet?

98

Ao configurar máquinas virtuais com o VirtualBox, geralmente desejo as seguintes características

  • vm tem um ip estático
  • host pode acessar vm sem encaminhamento de porta
  • vm pode acessar a internet
  • Posso mover meu laptop de rede para rede (por exemplo, de casa para escritório e para coffeeshop) sem me preocupar em proteger ou reconfigurar o vm

Nenhum dos métodos de conexão de rede do VirtualBox protege esses requisitos por conta própria.

  • NAT
    Requer encaminhamento de porta se você deseja conectar-se à VM do host.

  • Somente host
    O vm não pode acessar a Internet, a menos que o host seja um roteador.

  • Ponte
    Expor o vm à rede; não é portátil.

Christian Long
fonte

Respostas:

110

Posso obter a configuração desejada configurando dois adaptadores na vm.


Convidado do VirtualBox 4.2.12 Ubuntu 12.04

Em VirtualBox> Preferências> Rede, configure uma rede somente host.

O meu é chamado vboxnet0, é configurado manualmente:
ip 192.168.56.1
netmask 255.255.255.0
no dhcp

Configuração de rede do VirtualBox Configuração de rede do VirtualBox

Em seguida, nas configurações de rede da máquina virtual, configure dois adaptadores:


Somente host do adaptador 1 , vboxnet0


NAT do Adapter2

Inicialize a máquina virtual e efetue login através do console fornecido pelo VirtualBox.

Execute isso para ver seus adaptadores:

ls /sys/class/net

No meu caso, os adaptadores foram nomeados eth1 e eth2 (e eis a interface de loopback).

Em seguida, edite sua configuração de rede.

sudoedit /etc/network/interfaces


# The loopback network interface
auto lo
iface lo inet loopback

# Host-only interface
auto eth1
iface eth1 inet static
        address         192.168.56.20
        netmask         255.255.255.0
        network         192.168.56.0
        broadcast       192.168.56.255

# NAT interface
auto eth2
iface eth2 inet dhcp

Observe que eth1não há gateway padrão especificado. eth2obterá um gateway padrão do dhcp.


Atualização março de 2018

Veja esta resposta do @ Hugo14453 para uma versão atualizada que funciona com o Ubuntu 17.10 e mais recente.

Christian Long
fonte
1
Atualização: o VirtualBox 4.3 introduziu um serviço NAT que parece evitar a necessidade de duas interfaces. 6.4 Serviço de tradução de endereços de rede
Christian Long
4
Isso me ajudou muito, eu uso o Virtualbox para desenvolvimento e, quando estou em casa, tudo funciona corretamente desde que eu tenho a configuração da rede conforme o meu gosto, o pesadelo começa quando eu me mudo para outra rede (família, empresas ... ), Preciso alterar os URLs dos sites, excluir alguns arquivos do sistema, reiniciar, não sei quantas vezes e a lista continua. Esta solução não se preocupa com a sua rede atual e é por isso que eu gosto ... Basta conectar o seu PC a qualquer rede e se concentrar no seu trabalho.
Nabil Kadimi
1
Obrigado. Não definir um endereço de gateway para a interface somente host resolveu meus problemas.
Florian
2
Perfeito. / etc / network / interfaces config foi a chave OBRIGADO !!!!
Byron Whitlock #
1
"Observe que o eth1 não possui um gateway padrão especificado. O eth2 obterá um gateway padrão do dhcp." <- ESTE COMENTÁRIO É A CHAVE.
Páginas Pere
16

Eu poderia resolver meu problema com uma mistura de soluções da Christian Long. Eu adicionei 2 adaptadores:

Adaptador 1 - NAT

Adaptador 2 - somente host, vboxnet0

A única diferença estava no arquivo de interfaces da VM:

sudoedit /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback
# NAT
auto eth0
iface eth0 inet dhcp
# Host only
auto eth1
iface eth1 inet dhcp

Na configuração da Rede VirtualBox, deixei o DHCP marcado.

Após uma reinicialização da VM, tudo funcionou bem.

Alan Camillo
fonte
Isso funciona para mim, mas quero que as VMs tenham endereços IP estáticos. No momento em que faço isso, a Internet para de funcionar. Se eu configurar ambos com DHCP, ele funcionará bem. Como faço para que a interface somente host obtenha um IP estático?
Umar Farooq Khawaja
Apenas um que funcionou. Obrigado. +1
Jorge Campos
14

Existe outra maneira simples de não precisarmos criar um novo adaptador NAT

  1. Na máquina host, adicione as seguintes regras do iptables. Isso encaminhará pacotes pelo host e para a Internet:

    sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT 
    
    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    
    sudo iptables -A POSTROUTING -t nat -j MASQUERADE
    
  2. Você também precisará habilitar o encaminhamento de IP no host emitindo o seguinte comando:

    sudo sysctl -w net.ipv4.ip_forward=1
    
Long Bui
fonte
Isso funciona apenas em um host Linux.
Derek Mahar
Precisamos do serviço "dnsmasq" em execução. No link unix.stackexchange.com/a/384187/61742 , temos informações completas sobre o que foi sugerido por @Danatela. Obrigado!
Eduardo Lucio
1
@EduardoLucio, por favor, dê créditos para Long Bui. Acabei de editar este post para torná-lo mais legível.
Danatela
@ Long Bui Obrigado por sua contribuição! Acima! Acima! Acima! Acima! Acima! Acima! = D
Eduardo Lucio
12

A configuração de rede mudou no Ubuntu 17.10.1. Agora você usa a configuração netplan.

Eu segui este guia aqui

Como migração da resposta de Christian, faça o seguinte:

Crie um novo arquivo de configuração dentro de / etc / netplan para manter sua configuração de adaptador somente host.

por exemplo sudo nano /etc/netplan/02-netcfg.yaml

Digite o seguinte para configurar um IP estático de 192.168.56.12, em que enp0s3é o nome do seu adaptador somente host.

network:
    version: 2
    renderer: networkd
    ethernets:
        enp0s3:
            addresses:
                - 192.168.56.12/24
            dhcp4: no

Em seguida, execute os dois comandos a seguir:

sudo netplan generate
sudo netplan apply

O NAT deve funcionar sem configuração, execute ifconfigpara ver o resultado:

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.56.12  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe06:6cdd  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:06:6c:dd  txqueuelen 1000  (Ethernet)
        RX packets 252  bytes 23076 (23.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 208  bytes 30015 (30.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.15  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::a00:27ff:fe4d:a6b8  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:4d:a6:b8  txqueuelen 1000  (Ethernet)
        RX packets 95  bytes 94894 (94.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85  bytes 7436 (7.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Hugo
fonte
1
Obrigado! Adicionei uma seção de atualização à minha resposta antiga e vinculei a essa nova informação.
Christian Long
Eu segui sua solução, mas sinto falta do suporte nat para enp0s8. Eu adicionei manualmente enable dhcp4 para enp0s8 no netplan e finalmente obtive ambos enp0s3 e enp0s8. Espero que isso ajude alguém.
Dzmitry Prakapenka
3

Acabei de adicionar 2 adaptadores:

Somente host do adaptador 1, vboxnet0

NAT do Adapter2

E funciona perfeitamente, consigo acessar a máquina virtual do host e tenho internet na vm.

Guillermo Gonzalez
fonte
2

Sim, eu tive esse problema, foi uma dor total! Mas eu o resolvi instalando o servidor Squid Cache Proxy no meu PC físico e assim - meus PCs de caixa virtual da Internet somente para host podiam se conectar à Internet!

Fiz aqui um guia rápido de 3 minutos - para quem quiser saber como funciona! http://b0zmeister.wordpress.com/allowing-host-only-virtualbox-guest-to-connect-to-the-internet/

B0zmeister
fonte
Isso funcionou muito bem para mim, obrigado por compartilhar. É de longe a maneira mais simples de fazer tudo funcionar.
laurent
Oi Laurent - sem problemas - feliz que ajudou! Conseguiu amar executando os PCs VirtualBox fora de uma rede diferente - mas - com conexão com a internet :)
B0zmeister
O link está morto agora. Considere mover as instruções aqui.
S3v3n 21/0318