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:
- Comment NATer mes VMs sur mon adresse IP publique ?
- Comment faire du Port Forwarding sur mes VMs ?
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
- Un accès root à l’hyperviseur
- Une adresse IP publique configurée sur une interface de l’hyperviseur
- Une interface Bridge, non Bridgée, configurée avec une adresse IP correspondant à votre réseau privé.
Dans mon cas, j’utiliserais les valeurs suivantes, à changer en fonction de votre configuration:
- Adresse IP publique: 1.2.3.4
- Réseau privée pour VMs: 192.168.1.0/24
- Nom de mon interface Bridge: vmbr0
- Nom de mon interface Ethernet publique: enp3s0
- Adresse IP privée de mon interface Bridge: 192.168.1.1
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 !