104 votes

Dans VirtualBox, comment puis-je configurer des machines virtuelles hôtes uniquement qui peuvent accéder à l'Internet ?

Lorsque je configure des machines virtuelles avec VirtualBox, je souhaite souvent obtenir les caractéristiques suivantes

  • La VM a une IP statique
  • l'hôte peut accéder à la VM sans transfert de port
  • VM peut accéder à l'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 avoir à me soucier de sécuriser ou de reconfigurer la machine virtuelle.

Aucune des méthodes de connexion réseau de VirtualBox ne répond à ces exigences à elle seule.

  • NAT
    Nécessite une redirection de port si vous souhaitez vous connecter à la VM depuis l'hôte.

  • Hôte seulement
    La VM ne peut accéder à l'internet que si l'hôte est un routeur.

  • Bridged
    Expose la VM au réseau ; non portable.

117voto

Christian Long Points 3167

Je peux obtenir la configuration que je veux en configurant deux adaptateurs sur le vm.

VirtualBox 4.2.12
Ubuntu 12.04 invité

Dans VirtualBox > Préférences > Réseau, configurez un réseau réservé aux hôtes.

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 seulement, 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 étaient nommés eth1 et eth2 (et lo, l'interface de bouclage).

Ensuite, modifiez 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

なお 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 @Hugo14453 pour une version mise à jour qui fonctionne avec Ubuntu 17.10 et plus.

18voto

Baa Points 1873

La configuration réseau a changé dans Ubuntu 17.10.1. Vous utilisez maintenant la configuration netplan.

J'ai suivi ce guide ici

En guise de migration de la réponse de Christian, faites ce qui suit :

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

Par exemple sudo nano /etc/netplan/02-netcfg.yaml

Entrez ce qui suit pour configurer une IP statique de 192.168.56.12 où enp0s3 est le nom de votre adaptateur 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

17voto

Alan Camillo Points 171

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

Adaptateur 1 - NAT

Adaptateur 2 - hôte seulement, vboxnet0

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

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

15voto

Long Bui Points 151

Il existe un autre moyen simple qui ne nécessite pas de créer un nouvel adaptateur NAT.

  1. Sur la machine hôte, veuillez ajouter les règles iptables suivantes. Cela permettra d'acheminer les paquets à travers l'hôte et vers l'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 d'IP sur l'hôte en lançant la commande suivante :

    sudo sysctl -w net.ipv4.ip_forward=1

4voto

Je viens d'ajouter 2 adaptateurs :

Adaptateur 1 hôte seulement, vboxnet0

Adaptateur2 NAT

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X