web-dev-qa-db-fra.com

Dans VirtualBox, comment puis-je configurer des machines virtuelles hébergées uniquement par un hôte pouvant accéder à Internet?

Lors de la configuration de machines virtuelles avec VirtualBox, je souhaite souvent les caractéristiques suivantes

  • vm a une adresse IP statique
  • L'hôte peut accéder à vm sans redirection de port
  • vm peut accéder à internet
  • Je peux déplacer mon ordinateur portable d'un réseau à l'autre (par exemple de la maison au bureau ou au café) sans me soucier de la sécurité ou de la reconfiguration de la machine virtuelle

Aucune des méthodes de connexion réseau de VirtualBox ne satisfait à ces exigences par elles-mêmes.

  • NAT
    Nécessite un transfert de port si vous souhaitez vous connecter à la machine virtuelle à partir de l'hôte.

  • Hôte seulement
    Le vm ne peut pas accéder à Internet, à moins que l'hôte ne soit un routeur.

  • Ponté
    Expose le vm sur le réseau; pas portable.

95
Christian Long

Je peux obtenir la configuration souhaitée en configurant deux adaptateurs sur la machine virtuelle.

VirtualBox 4.2.12
Ubuntu 12.04 invité

Dans VirtualBox> Préférences> Réseau, configurez un réseau exclusivement hôte.

Le mien s'appelle vboxnet0, il est configuré manuellement:
ip 192.168.56.1
masque de réseau 255.255.255.0
pas de dhcp

VirtualBox network configurationVirtualBox network configuration

Ensuite, dans les paramètres réseau de la machine virtuelle, configurez deux adaptateurs:

Adaptateur 1
Hôte uniquement, vboxnet0

Adaptateur2
NAT

Démarrez la machine virtuelle et connectez-vous via la console fournie par VirtualBox.

Exécutez ceci pour voir vos adaptateurs:

ls /sys/class/net

Dans mon cas, les adaptateurs s'appelaient eth1 et eth2 (et lo, l'interface de bouclage).

Ensuite, éditez votre configuration réseau.

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

Notez que eth1 n'a pas de passerelle par défaut spécifiée. eth2 obtiendra une passerelle par défaut de dhcp.


Mise à jour mars 2018

Voir cette réponse de @ Hugo1445 pour une version mise à jour qui fonctionne avec Ubuntu 17.10 et les versions plus récentes.

110
Christian Long

Je pourrais résoudre mon problème avec un mélange de solution de Christian Long. J'ai ajouté 2 adaptateurs:

Adaptateur 1 - NAT

Adaptateur 2 - hôte uniquement, vboxnet0

La seule différence était dans le fichier d'interface de 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

Dans la configuration réseau de VirtualBox, j'ai laissé DHCP vérifié.

Après un VM redémarrage, tout a bien fonctionné.

16
Alan Camillo

Il existe un autre moyen simple de ne pas créer un nouvel adaptateur NAT

  1. Sur la machine hôte, veuillez ajouter les règles iptables suivantes. Cela fera suivre les paquets via l'hôte et sur 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. Vous devrez également activer le transfert IP sur l'hôte en exécutant la commande suivante:

    Sudo sysctl -w net.ipv4.ip_forward=1
    
14
Long Bui

La configuration du réseau a été modifiée dans Ubuntu 17.10.1. Vous utilisez maintenant la configuration de netplan.

J'ai suivi ce guide ici

En tant que migration de la réponse de Christian, procédez comme suit:

Créez un nouveau fichier de configuration dans/etc/netplan pour contenir la configuration de votre adaptateur pour hôte uniquement.

par exemple Sudo nano /etc/netplan/02-netcfg.yaml

Entrez les informations suivantes pour configurer une adresse IP statique de 192.168.56.12 où enp0s3 est le nom de votre adaptateur d'hôte uniquement.

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

Ensuite, exécutez les deux commandes suivantes:

Sudo netplan generate
Sudo netplan apply

NAT devrait fonctionner sans configuration, exécutez ifconfig pour voir le résultat:

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
11
Hugo

Je viens d'ajouter 2 adaptateurs:

Adaptateur 1 hôte uniquement, vboxnet0

Adaptateur2 NAT

Et cela fonctionne parfaitement, je peux accéder à la machine virtuelle à partir de l'hôte et j'ai Internet sur le vm.

2
Guillermo Gonzalez

Oui j'ai eu ce problème c'était une douleur totale! Mais je l'ai résolu en installant simplement le serveur Squid Cache Proxy sur mon PC physique. Ainsi, mes PC virtualbox hébergés uniquement par l'hôte pouvaient se connecter à Internet!

J'ai fait un guide rapide de 3 minutes ici - pour tous ceux qui veulent comment ça marche! http://b0zmeister.wordpress.com/allowing-Host-only-virtualbox-guest-to-connect-to-the-internet/

1
B0zmeister