Création d’un réseau interne grâce au NAT sur Proxmox VE 5

Il y a quelques semaines maintenant, j’ai repensé mon cloud personnel. Auparavant basé sur ESXi, j’ai changé de technologie pour revenir sur quelque chose de plus « léger » que je connaissais déjà : Proxmox. Cet hyperviseur basé sur Debian m’avait causé dans sa version 4 pas mal de maux de tête pour réussir à monter un réseau et donner accès à internet à mes VM sans qu’elles n’utilisent d’IP globales ; la version 5 ne fait pas vraiment mieux, c’est pourquoi je vais partager dans cet article les opérations nécessaires via l’interface de Proxmox et via la modification du fichier /etc/network/interfaces.

Sur l’hôte, dans les paramètres réseau, doivent apparaître juste après l’installation la carte physique de la machine et un bridge. Il est très important de ne pas y toucher sous peine de rendre la machine injoignable après le redémarrage ou la recharge de la configuration des cartes. L’interface web ne semblant pas traduire correctement les valeurs saisies en un fichier de configuration propre, on va donc passer par la modification en direct du fichier /etc/network/interfaces pour y créer un deuxième bridge qui sera notre réseau local.

En l’ouvrant avec nano en utilisateur root, il doit ressembler à ceci (je vais appeler dans cet exemple ma carte réseau eth0 et mon IP 26.10.19.91), en gras les paramètres qu’il faut absolument vérifier afin qu’ils soient sur cette valeur :

auto lo
iface lo inet loopback


iface eth0 inet manual


auto vmbr0
iface vmbr0 inet static
  address 26.10.19.91
  netmask 255.255.255.0
  gateway 26.10.19.1
  bridge_ports eth0
  bridge_stp off
  bridge_fd 0 


auto vmbr1
iface vmbr1 inet static
  address 192.168.2.1
  netmask 255.255.255.0
  bridge_ports none
  bridge_stp off
  bridge_fd 0

Le vmbr1 est le nouveau bridge sur lequel nous allons raccorder nos VM pour leur donner accès à internet et pouvoir faire du NAT afin de les joindre depuis l’extérieur sur la même IP que l’hôte et qu’elles puissent éventuellement communiquer entre elles.

Un redémarrage plus tard (relancer les interfaces réseaux n’est pas suffisant), le nouveau pont doit apparaître dans la section réseau de l’interface web :

Par la suite, en configurant le réseau sur les VM, on indiquera une adresse IP comprise entre 192.168.2.2 et 192.168.2.254 (si vous avez laissé le sous-réseau par défaut) et 192.168.2.1 en gateway. Concernant les serveurs DNS, il est possible d’utiliser des serveurs DNS externes ou internes ; parmi les DNS publics, on peut renseigner par exemple 1.1.1.1 qui est le DNS public CloudFlare, ou le réputé 8.8.8.8 de Google.

Maintenant que les machines peuvent avoir une IP définie, afin de les joindre via certaines applications, il ne reste plus qu’à faire le NAT dans iptables. Toujours en root, on autorise le routage des paquets venant sur l’interface vmbr0 (qui est liée à eth0, la carte physique liée à internet) vers notre sous-réseau fraîchement créé :

iptables -t nat -A POSTROUTING -s ‘192.168.2.0/24’ -o vmbr0 -j MASQUERADE

Et enfin, si l’on souhaite ouvrir le port 80 sur 192.168.2.2 :

iptables -t nat -A PREROUTING -i vmbr0 -p tcp –dport 80 -j DNAT –to 192.168.2.2:80

A noter que si l’on souhaite simplement retirer une règle, on remplace -A par -D. iptables ne sauvegardant pas de manière permanente les règles, elles sont perdues au redémarrage. Il est possible d’installer des applications permettant de faire des backup/restore des règles ou bien d’ajouter les règles au fichier /etc/network/interfaces en utilisant post-up pour les règles à exécuter une fois que l’interface est montée, et post-down pour celles a exécuter quand l’interface est désactivée. Par exemple :

post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp –dport 80 -j DNAT –to 192.168.2.2:80

post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp –dport 80 -j DNAT –to 192.168.2.2:80

Pour plus d’informations concernant iptables et ses possibilités, je vous renvoie à ce lien.

Lien pour marque-pages : Permaliens.

6 Commentaires

  1. Bonjour,
    ok pour la config et on accède comment à la vm depuis l’extérieur ? en utilisant l’adresse de l’hôte et le port ouvert par iptables (80 dans l’exemple) ?

    • Bonjour,
      Exactement. Si par exemple vous hébergez un site web sur le port 80 sur une VM qui a pour IP 192.168.1.25, et que votre hyperviseur a pour IP 12.34.56.78, vous allez interroger dans votre navigateur web http://12.34.56.78:80 pour accéder au site web, pour peu que vous ayez bien intégré la règle de NAT indiquant à la couche réseau de l’hyperviseur que les requêtes sur le port 80 doivent aller à la VM ayant pour IP 192.168.1.25.

  2. Bonjour,

    Je viens moi-même de reprendre, comme responsable dans une association, la gestion d’une machine virtuelle (environnement Windows 10) hébergée à distance, avec laquelle les membres de notre bureau pouvaient jusqu’à présent se connecter via VNCViewer. Depuis quelques jours la machine virtuelle n’est plus accessible.
    Je suis donc allé voir ce qu’il en était via Proxmox qui est notre système d’exploitation du système. J’ai alors constaté en ouvrant la console que la carte réseau n’avait plus d’accès internet. Je pense donc qu’il s’agit d’un problème lié à sa configuration.
    Lorsque je consulte les caractéristiques de la carte réseau je vois qu’elle est configurée avec un bridge vmbr1, une adresse MAC, pas de VLAN. En revanche quand je vais dans SERVICES, onglet réseau, le bridge vmbr1 n’apparaît pas, on voit un seul bridge vmbr2. De plus, si je peux parfaitement arrêter et redémarrer la machine virtuelle, je me suis aperçu que SERVICES était arrêté, et ne peut être démarré (j’ai le message Error startup for container).
    Je n’y connais pas grand chose dans ce domaine, pouvez-vous m’aider ?

  3. J’ai finalement retrouvé vmbr1 dans le menu Proxmox du noeud complet, je n’avais regardé qu’un sous-ensemble !
    Pour compléter mon message, voici la configuration inscrite dans le fichier /etc/network/interfaces que j’ai ouvert avec Nano :

    auto lo
    iface lo inet loopback

    iface enp3s0 inet manual

    auto vmbr0
    iface vmbr0 inet dhcp
    bridge-ports enp3s0
    bridge-stp off
    bridge-fd 0

    auto vmbr1
    iface vmbr1 inet static
    address 192.168.0.254/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0

    enp3s0 est le nom de ma carte réseau.
    Par rapport au fichier type que vous montrez, on voit quelques différences importantes, notamment inet dhcp et non inet static pour vmbr0, et pas de mention d’adress ni netmask ni gateway pour vmbr0, et pas de netmask pour vmbr1.

    Peut-être ces éléments détaillés permettent-ils un diagnostic ?

    Cordialement

    • Bonjour,
      Cela fait malheureusement quelques années que je n’ai pas touché à Proxmox.
      Normalement, vmbr1 doit être l’interface réseau qui doit être montée sur votre machine virtuelle. Il doit y avoir un netmask normalement.
      Pour la différence concernant vmbr0, cela ne doit pas poser de problèmes, par contre cela veut dire que l’interface vmbr0 récupère son IP depuis un serveur DHCP et qu’elle n’est donc pas configurée de manière statique.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.