Votre VM est en NAT et vous voulez exposer un service (web, SSH, etc.) depuis l’extérieur ? Cette recette vous montre comment configurer le port forwarding selon votre firewall.
Prérequis
Section intitulée « Prérequis »- VM en NAT avec une IP fixe ou connue (ex:
192.168.122.10) - Accès root sur l’hôte KVM
- Connaître le port à exposer (ex: 80 pour HTTP, 22 pour SSH)
Principe
Section intitulée « Principe »En NAT, les VMs ne sont pas joignables depuis l’extérieur. Le port forwarding redirige un port de l’hôte vers un port de la VM :
Internet → hôte:8080 → NAT DNAT → VM:80Configuration selon le firewall
Section intitulée « Configuration selon le firewall »firewalld est le firewall par défaut sur RHEL 9, Fedora, Rocky, Alma.
Vérifier que firewalld est actif
Section intitulée « Vérifier que firewalld est actif »systemctl status firewalldAjouter une règle de port forwarding
Section intitulée « Ajouter une règle de port forwarding »# Rediriger le port 8080 de l'hôte vers le port 80 de la VMsudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.122.10:toport=80
# Rendre la règle permanentesudo firewall-cmd --runtime-to-permanentVérifier
Section intitulée « Vérifier »sudo firewall-cmd --zone=public --list-forward-portsSupprimer la règle
Section intitulée « Supprimer la règle »sudo firewall-cmd --zone=public --remove-forward-port=port=8080:proto=tcp:toaddr=192.168.122.10:toport=80 --permanentsudo firewall-cmd --reloadnftables remplace iptables sur les distributions modernes.
Vérifier que nftables est actif
Section intitulée « Vérifier que nftables est actif »systemctl status nftablessudo nft list ruleset | head -20Ajouter une règle de port forwarding
Section intitulée « Ajouter une règle de port forwarding »# Créer la règle DNATsudo nft add rule ip nat PREROUTING tcp dport 8080 dnat to 192.168.122.10:80
# Autoriser le forwardsudo nft add rule ip filter FORWARD ip daddr 192.168.122.10 tcp dport 80 acceptPersister les règles
Section intitulée « Persister les règles »sudo nft list ruleset > /etc/nftables.confVérifier
Section intitulée « Vérifier »sudo nft list chain ip nat PREROUTINGiptables est encore utilisé sur certaines distributions ou configurations legacy.
Ajouter une règle de port forwarding
Section intitulée « Ajouter une règle de port forwarding »# Rediriger le port 8080 de l'hôte vers le port 80 de la VMsudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.122.10:80
# Autoriser le forwardsudo iptables -A FORWARD -p tcp -d 192.168.122.10 --dport 80 -j ACCEPTPersister les règles
Section intitulée « Persister les règles »sudo apt install iptables-persistentsudo netfilter-persistent savesudo dnf install iptables-servicessudo service iptables saveVérifier
Section intitulée « Vérifier »sudo iptables -t nat -L PREROUTING -n -vsudo iptables -L FORWARD -n -vSupprimer la règle
Section intitulée « Supprimer la règle »sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.122.10:80sudo iptables -D FORWARD -p tcp -d 192.168.122.10 --dport 80 -j ACCEPTVérifier que ça fonctionne
Section intitulée « Vérifier que ça fonctionne »Depuis une machine externe :
curl http://<ip-hote>:8080# Doit afficher la page web de la VMDépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
| Connection refused | Service non démarré dans la VM | Vérifier que le service écoute sur le bon port |
| Connection timeout | Règle mal appliquée | Vérifier les règles avec iptables -L ou nft list |
| Marche en local, pas en externe | Firewall hôte bloque | Ouvrir le port sur l’interface externe |
Alternative : utiliser un bridge
Section intitulée « Alternative : utiliser un bridge »Si vous avez besoin d’exposer plusieurs services ou de simplifier la configuration, envisagez de passer en mode bridge. Voir le guide réseau KVM.