Outils pour utilisateurs

Outils du site


app:virtualbox:port-forwarding

Accéder à un service réseau de la VM depuis l’hôte

Par défaut, la VM est configurée avec une interface Ethernet en mode NAT. Dans ce mode, le service Virtualbox joue le rôle d'un routeur, la VM se trouve dans un réseau virtuel, derrière le routeur Virtualbox. Pour pouvoir accéder au service souhaité fournit par la VM depuis la machine hôte (externe au réseau virtuel) il faut donc configurer une règle de NAT (de la même manière qu'il faut le faire pour accéder a un service depuis Internet lorsqu'il est fournit par une machine sur un réseau privé derrière un routeur).

Grâce à la règle de NAT, toute communication arrivant sur un port choisit sur l’hôte sera transférée sur l'invité.

Procédure

Pour pouvoir créer la règle:

  1. Déterminer l'adresse IP du système invité
  2. Identifier un port libre sur le système hôte
  3. Créer la règle avec la commande de gestion vboxmanage ou l'interface graphique

Déterminer l'IP de l'invité

Il est possible de retrouver l'adresse IP du système invité depuis l’hôte si les additions invité ont été installés. Dans ce cas, avec vboxmanage:

vboxmanage guestproperty enumerate ma-vm | grep -i ip

Sinon récupérer l'IP depuis le système invité via les outils disponibles.

Un port sur l’hôte

Utiliser un port hors de la plage réservée 0-1024, utiliser netstat pour s'assurer que le port est libre.

 netstat -an | grep ":8080"

Création de la règle NAT

Depuis l'interface graphique:

  • Sélectionner la VM puis l'option Configuration…
  • Section Réseau, sur l'onglet de l'interface, déployer Avancé
  • Cliquer sur le bouton Redirection de ports
  • Ajouter la règle dans la fenêtre Règles de redirection de ports

En ligne de commande, utiliser vboxmanage avec l'argument modifyvm:

vboxmanage modifyvm "ma-vm" --natpf1 "nom_regle,tcp,ip-hote,8088,ip-vm,80"

La commande showvminfo listera la règle nouvellement définie:

$ vboxmanage showvminfo debian-8
...
NIC 1 Rule(0):   name = ssh, protocol = tcp, host ip = 127.0.0.1, host port = 2222, guest ip = 10.0.2.15, guest port = 22
...
La configuration du port forwarding se fait VM éteinte. Si celle-ci est en cours d’exécution: prendre un instantané, l’arrêter, configurer la règle et relancer l'instantané pour la retrouver dans le même état.

Supprimer la règle de forwarding

En cas d'erreur ou pour supprimer une règle de forwarding devenue inutile:

$ vboxmanage modifyvm "ma-vm" --natpf1 delete ma-regle

Exemples

Serveur Web

La commande netstat permet de lister les ports en cours d'utilisation sur l’hôte:

$ netstat -an | grep ":80"
tcp6       0      0 :::80                   :::*                    LISTEN
$

Ici le port 80 de l'hôte est utilisé, on essai de déterminer si un autre port est libre, par exemple le port 8080

$ netstat -an | grep ":8080"
$

Au second essai, le port 8080 n'est pas listé. Il n'est pas utilisé par un service sur l’hôte. On peut donc l'utiliser pour la création de la règle.

La syntaxe de création de règle:

vboxmanage modifyvm "ma-vm" --natpf1 "nom_regle,tcp,ip-hote,8088,ip-vm,80"
$ vboxmanage modifyvm "ubuntu-server-14.04" --natpf1 "srv_web,tcp,127.0.0.1,8080,10.0.2.15,80"

Accès SSH

On configure ici le NAT pour accéder en ssh depuis l’hôte au système virtualisé.

  • Sur la VM via ifconfig, noter l'IP de la VM, elle sera utile lors la création de la règle.
  • Déterminer un port libre sur l'hôte via netstat

Créer la règle de NAT

$ vboxmanage modifyvm "ubuntu-16-server" --natpf1 "nat_ssh, tcp, 127.0.0.1, 2223, 10.0.2.15, 22"

Vérifier la présence de la règle:

$ vboxmanage showvminfo "ubuntu-16-server"

La section consacrée à l'interface doit lister la règle:

...
NIC 1 Rule(0):   name = nat_ssh, protocol = tcp, host ip = 127.0.0.1, host port = 2223, guest ip = 10.0.2.15, guest port = 22
...

Démarrer la VM

$ vboxmanage startvm "ubuntu-16-server"

Se connecter à la VM depuis l’hôte via ssh

$ ssh uservm@127.0.0.1 -p 2223
app/virtualbox/port-forwarding.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1