Proxmox - NAT et Port Forwading

Date de publication: 29/04/2020

Bonjour à toutes et à tous ! Toujours dans l'objectif de faire évoluer mon architecture Proxmox, je me suis récemment penché sur deux sujets:

Ces deux questions peuvent paraître simples, mais elles le sont beaucoup moins lorsque l'on découvre un système d'hypervision tel que Proxmox. Dans cet article, je vais donc vous expliquer comment relever ces deux challenges techniques :)

Paramétrage du NAT

Je ne vais pas expliquer ici le principe et le fonctionnement du NAT. Si vous ne savez pas ce qu'il en est, voici un lien l'expliquant en détail. Le but est de faire en sorte que nos VMs, possédant une adresse IP privée, puissent contacter des ressources présentes sur Internet en utilisant l'adresse IP publique de notre hyperviseur Proxmox. Grâce à ce procédé, nos VMs auront une connectivité Internet totale et sécurisée. Sécurisée dans le sens où nous pourrons initier des connexions depuis notre réseau privée vers l'extérieur, mais l'inverse ne sera pas possible.

Prérequis

Dans mon cas, j'utiliserais les valeurs suivantes, à changer en fonction de votre configuration:

Vous êtes prêts ? Alors, c'est parti ! :D

Mise en place

Afin de mettre en place notre NAT, il suffit d'éditer le fichier /etc/network/interfaces sur notre hyperviseur. Il nous faut ensuite rajouter quelques lignes dans la section concernant notre interface vmbr0.

auto vmbr0
# Interface bridge pour réseau privé des VMs
iface vmbr0 inet static
        address  192.168.1.1 # Adresse de votre interface vmbr0
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward # Autorise le forwarding de packets
        post-up   iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o enp3s0 -j MASQUERADE # veuillez changer le réseau à NATer ainsi que le nom d'interface
        post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o enp3s0 -j MASQUERADE # veuillez changer le réseau à NATer ainsi que le nom d'interface

Il suffit maintenant de recharger la configuration des interfaces réseau grâce à la commande:

ifreload -a

Et c'est tout ! Notre NAT est maintenant actif. Il ne vous reste plus qu'à configurer vos VMs dans le même sous réseau que votre interface Bridge, et de leur assigner l'adresse de l'interface Bridge en tant que passerelle par défaut. Grâce à cela, vos VMs passeront par votre interface Bridge lorsqu'elles souhaiteront communiquer avec l'extérieur.

Paramétrage du Port Forwarding

Il se peut que certains de vos services aient besoin d'être joignables depuis l'extérieur de votre infrastructure. Dans ce cas, vos VMs doivent avoir certains ports exposés su Internet. Pour ce faire, nous avons la possibilité de mettre en place du Port Forwarding sur notre interface vmbr0. Imaginons que vous souhaitiez exposer le port 80 de votre VM 192.168.1.100 sur le port 8080 de notre IP publique. Afin de réaliser cette exposition, nous devons une fois encore éditer le fichier /etc/network/interfaces et y ajouter deux lignes dans la section dédiée à notre interface vmbr0.

auto vmbr0
# Interface bridge pour réseau privé des VMs
iface vmbr0 inet static
        address  192.168.1.1 # Adresse de votre interface vmbr0
        netmask  255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0

        post-up echo 1 > /proc/sys/net/ipv4/ip_forward        # Autorise le forwarding de packets
        post-up   iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o enp3s0 -j MASQUERADE # veuillez changer le réseau à NATer ainsi que le nom d'interface
        post-down iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o enp3s0 -j MASQUERADE # veuillez changer le réseau à NATer ainsi que le nom d'interface
   
        # VM à exposer - 8080:192.168.1.100:80
        post-up iptables -t nat -A PREROUTING -i enp3s0 -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80
        post-down iptables -t nat -D PREROUTING -i enp3s0 -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80

Ces règles iptables permettent de pré-router (-A PREROUTING) les paquets tcp (-p tcp) arrivant sur l'interface enp3s0 (-i enp3s0) sur le port 8080 (–dport 8080), et va alors les router vers l'adresse 192.168.1.100 sur le port 80 (–to 192.168.1.100:80). N'oubliez pas de changer les valeurs adéquates à votre guise ! Et encore une fois, n'oubliez pas de recharger vos interfaces afin d'appliquer les changements sur votre infrastructure.

Conclusion

Vous voilà prêts à mettre en place l'infrastructure de vos rêves ! (Quoi ? Exagérer ? MOI ?! Pas du tout…) Si cet article vous a été utile, n'hésitez surtout pas à me le dire, ça me fait toujours autant plaisir :) Sur ce, à bientôt pour un nouvel article !