Proxmox VE : découvrez comment créer un réseau privé avec NAT
Sommaire
I. Présentation
Ce tutoriel aborde la création d'un réseau NAT sur un serveur Proxmox VE, avec également la création d'une règle de port forwarding (redirection de port) pour rendre accessible de l'extérieur du réseau NAT un service hébergé sur une VM ou un conteneur.
Il est à noter que Proxmox VE ne propose plus, nativement, la création d'un réseau NAT. Cette possibilité était disponible il y a quelques années, mais elle a été supprimée par une mise à jour de Proxmox VE 5.1. Désormais, il convient de faire quelques manipulations manuelles pour créer un réseau NAT avec le mécanisme de Linux Bridge de Proxmox VE. C'est ce que nous allons voir.
L'avantage du réseau NAT, c'est qu'il vous permet de créer un réseau virtuel isolé, qui dispose tout de même d'un accès à Internet. C'est une configuration avantageuse dans le cadre d'un Lab.
Note : vous pouvez créer un réseau NAT à partir des fonctions de SDN de Proxmox VE, en créant un Subnet avec l'option SNAT activée. Cette méthode sera évoquée en fin d'article.
Si vous souhaitez en savoir plus sur la gestion du réseau avec Proxmox VE, consultez cet article :
II. Création d'un réseau NAT sur Proxmox
Dans la suite de ce tutoriel, nous verrons comment créer un réseau NAT à partir d'une interface Linux Bridge et quelques règles iptables. On parlera aussi de port forwarding, afin de rendre accessible un service hébergé sur le réseau NAT (et donc, isolé).
A. Étape n°1 : créer une interface Linux Bridge
Pour commencer, accédez à l'interface Web de Proxmox. Puis, sélectionnez votre hyperviseur afin d'accéder au menu suivant : System > Network. Quand c'est fait, cliquez sur le bouton "Create" et choisissez "Linux Bridge". Ici, nous allons créer l'interface via le web et finaliser la configuration en ligne de commande. Vous pourriez tout à fait réaliser l'intégralité de la configuration directement dans le fichier /etc/network/interfaces.

Nommez cette interface : vous pouvez indiquer NAT ou simplement laisser le nom vmbrX. Puis, indiquez un commentaire pour préciser l'objet de ce réseau. Vous devez aussi indiquer une adresse IP associée à cette interface, comme ici 10.10.10.1/24. Elle sera utilisée comme passerelle par défaut par les clients connectés à ce réseau, cela veut donc dire que le sous-réseau est adressé en 10.10.10.0/24.

Pour valider, cliquez sur "Create" pour créer le nouveau pont réseau sur votre hyperviseur. Cliquez sur "Apply Configuration" dès maintenant, c'est important !
Note : vous remarquerez que ce Linux Bridge n'est pas associé à une interface physique, c'est tout à fait normal.
B. Étape n°2 : configurer le NAT sur le réseau
Désormais, nous allons devoir modifier la configuration réseau de Proxmox VE de façon un peu plus approfondie. En effet, nous devons activer l'IP forwarding et utiliser des règles iptables pour mettre en place le NAT via l'IP masquerade.
Connectez-vous à votre Proxmox via SSH ou via le "Shell" en ligne. Puis, modifiez le fichier de configuration du réseau :
nano /etc/network/interfaces
Au sein de la section correspondante à l'interface NAT créée précédemment, ajoutez ces trois lignes :
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
Voici à quoi servent ces trois lignes, dans l'ordre :
- Active le routage IPv4 sur l’hôte Proxmox pour permettre le transfert de paquets entre interfaces réseau (IP forwarding).
- Ajoute une règle NAT qui remplace l’adresse source des paquets provenant du réseau
10.10.10.0/24par celle de l’interfacevmbr0(NAT vers l’extérieur). - Supprime cette même règle NAT lorsque l’interface est arrêtée, pour garder une configuration propre.
Vous devez donc adapter le réseau IP et le nom de l'interface vmbr0, en fonction de votre configuration. Ici, j'utilise vmbr0, car elle me donne accès à Internet au niveau de mon hôte Proxmox VE.
Une fois les modifications effectuées, enregistrez et fermez le fichier.
C. Étape n°3 : redémarrer le réseau
Pour appliquer la nouvelle configuration, redémarrez le service réseau (ce qui implique une interruption du réseau sur tout l'hôte Proxmox) :
systemctl restart networking.service
La configuration est terminée. Désormais, testons.
D. Étape n°4 : connecter une VM au réseau NAT
Pour tester, c'est simple. Vous n'avez qu'à modifier la configuration d'une VM ou d'un conteneur pour que sa carte réseau soit liée à l'interface Linux Bridge créée précédemment, à savoir NAT pour ma part. Ensuite, vous devez configurer une adresse IP statique sur le réseau 10.10.10.0/24, car il n'y a pas de serveur DHCP. Libre à vous de monter un serveur DHCP sur une VM connectée à ce réseau, voire même via un conteneur LXC.
La connectivité réseau est opérationnelle :

Si le pare-feu est actif sur votre VM / conteneur, il est fort probable que les flux ne soient pas autorisés. Dans ce cas, vous devez appliquer l'astuce fournie dans la documentation de Proxmox VE, à savoir ajouter ces deux lignes dans le fichier interfaces (à la suite de la configuration précédente) :
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
Enregistrez, fermez le fichier et redémarrez le service réseau.
systemctl restart networking.service
Testez de nouveau.
Si cela ne fonctionne pas, c'est probablement parce que l'option "MAC filter" est activée dans les options du pare-feu de l'invité. Elle sert notamment à empêcher l'usurpation d'adresses MAC (MAC spoofing), ce qui est gênant dans le cadre du NAT. Désactivez l'option et ça devrait aller mieux.

E. Facultatif - Créer une règle de redirection de port
Dans le cas où vous souhaitez accéder au service hébergé sur une VM depuis l'extérieur du réseau NAT, vous devez créer une règle de port forwarding. Là encore, vous devez éditer le fichier interfaces pour déclarer la règle.
Voici un exemple :
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 33891 -j DNAT --to-destination 10.10.10.10:3389
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 33891 -j DNAT --to-destination 10.10.10.10:3389
Ici, la règle redirige tout le trafic TCP entrant sur le port 33891 de l’interface vmbr0 (via laquelle est exposée le nœud) vers la machine interne 10.10.10.10 (soit la VM Windows configurée dans le réseau NAT) sur le port 3389, permettant ainsi d’accéder au service Bureau à distance (RDP) de la VM depuis l'extérieur.
Ce qui donne :

Une connexion est alors possible depuis une machine distante :

III. Réseau NAT avec le SDN de Proxmox
La création d'un réseau NAT en s'appuyant sur les capacités de SDN de Proxmox VE, et donc d'Open vSwitch, est tout à fait possible. De façon à pouvoir distribuer des adresses IP aux clients (DHCP) et résoudre les noms (DNS), vous devez installer et configurer le paquet dnsmasq sur votre hyperviseur. Ces deux commandes sont donc la première étape à accomplir.
apt install dnsmasq
systemctl disable --now dnsmasq
La suite de la configuration s'effectue à partir de l'interface web de Proxmox VE.
Commencez par créer une nouvelle zone simple : SDN > Zones > Add > Simple. Nommez cette zone NAT, par exemple, et liez la zone à votre noeud.

Basculez sur la partie réseau virtuel : SDN > VNets. Ici, créez un nouveau Vnet que vous pouvez appeler vnetnat et qui est rattaché à la zone NAT.

Sur la droite, vous pouvez ajouter un nouveau sous-réseau à ce Vnet. Après l'avoir sélectionné, cliquez sur "Create". Définissez alors l'adresse réseau et la passerelle (ce sera l'adresse IP de sortie pour les clients du réseau NAT). Ici, je suis partie sur un sous-réseau en 10.10.20.0/24. Et, surtout, cochez l'option "SNAT" pour faire du Source NAT.

Basculez sur l'onglet "DHCP Ranges" de façon à définir la plage d'adresses IP à distribuer. Le DHCP intégré est appréciable, en comparaison de la méthode basée sur les Linux Bridge.

Quand la configuration est terminée, validez : SDN > Apply.

Si vous connectez l'interface réseau d'une VM au réseau vnetnat, celle-ci devrait récupérer une adresse IP via le DHCP. Voici un exemple :

Dans le cas où le firewall est actif sur votre environnement Proxmox VE (ce qui est préférable), vous devez créer 2 règles pour autoriser les flux DHCP et DNS. Sinon, les services seront bloqués. Pour créer une règle au niveau du Datacenter (recommandé pour le SDN) : Datacenter > Firewall > Add.
La première règle à créer pour le DHCP :

La seconde règle à créer pour le DNS :

Je vous proposerai prochainement un article complet sur la configuration du firewall Proxmox VE.
IV. Conclusion
En suivant ce tutoriel, vous devriez être en mesure de créer un réseau NAT avec un Linux Bridge ou avec Open vSwitch (SDN), en fonction de vos préférences et de vos habitudes. Si vous n'avez jamais utilisé le module SDN, il peut s'avérer judicieux de commencer par un réseau NAT avec Linux Bridge.
Si vous avez des difficultés à faire fonctionner une configuration, n'hésitez pas à redémarrer le nœud Proxmox. Parfois, c'est nécessaire pour bien appliquer les changements et faire en sorte que la configuration soit effective.

