← retour aux snippets

nftables: NAT et redirection de port (DNAT)

Mettre en place DNAT/masquerade pour exposer un service interne via l'IP publique.

bash network #nftables#nat#dnat

objectif

Rediriger un port de l’IP publique vers une machine interne et NATer les flux sortants.

code minimal

sudo nft add table ip nat
sudo nft add chain ip nat prerouting { type nat hook prerouting priority -100; }
sudo nft add chain ip nat postrouting { type nat hook postrouting priority 100; }

# DNAT: 203.0.113.10:443 -> 10.0.0.10:443
sudo nft add rule ip nat prerouting ip daddr 203.0.113.10 tcp dport 443 dnat to 10.0.0.10:443

# masquerade sur l'interface wan0
sudo nft add rule ip nat postrouting oifname "wan0" masquerade

utilisation

# vérifier la table nat
sudo nft list table ip nat

# tester depuis l'extérieur
curl -I https://203.0.113.10/

variante(s) utile(s)

# redirection de plage de ports
sudo nft add rule ip nat prerouting ip daddr 203.0.113.10 tcp dport 30000-30100 dnat to 10.0.0.10

# SNAT vers une IP spécifique si plusieurs IP publiques
sudo nft add rule ip nat postrouting oifname "wan0" ip saddr 10.0.0.0/24 snat to 203.0.113.10

notes

  • chargez aussi des règles filter pour autoriser le trafic redirigé.
  • ajustez interfaces et adresses à votre environnement.
  • la redirection locale peut nécessiter sysctl net.ipv4.ip_forward=1.