2.4. Configuration du NAT à l'aide de nftables
Avec nftables
, vous pouvez configurer les types de traduction d'adresses réseau (NAT) suivants :
- Mascarade
- Source NAT (SNAT)
- NAT de destination (DNAT)
- Redirection
Vous ne pouvez utiliser que des noms d'interface réels dans les paramètres iifname
et oifname
. Les noms alternatifs (altname
) ne sont pas pris en charge.
2.4.1. Types de NAT
Il s'agit des différents types de traduction d'adresses réseau (NAT) :
- Masquerading et NAT à la source (SNAT)
Utilisez l'un de ces types de NAT pour modifier l'adresse IP source des paquets. Par exemple, les fournisseurs d'accès à Internet n'acheminent pas les plages d'adresses IP privées, telles que
10.0.0.0/8
. Si vous utilisez des plages d'adresses IP privées dans votre réseau et que les utilisateurs doivent pouvoir accéder à des serveurs sur Internet, mappez l'adresse IP source des paquets provenant de ces plages vers une adresse IP publique.La mascarade et le SNAT sont très semblables l'un à l'autre. Les différences sont les suivantes :
- Le masquage utilise automatiquement l'adresse IP de l'interface sortante. Par conséquent, il convient d'utiliser le masquage si l'interface sortante utilise une adresse IP dynamique.
- SNAT fixe l'adresse IP source des paquets à une IP spécifiée et ne recherche pas dynamiquement l'IP de l'interface sortante. Le SNAT est donc plus rapide que le masquage. Utilisez SNAT si l'interface sortante utilise une adresse IP fixe.
- NAT de destination (DNAT)
- Ce type de NAT permet de réécrire l'adresse et le port de destination des paquets entrants. Par exemple, si votre serveur web utilise une adresse IP d'une plage IP privée et n'est donc pas directement accessible depuis Internet, vous pouvez définir une règle DNAT sur le routeur pour rediriger le trafic entrant vers ce serveur.
- Redirection
- Ce type est un cas particulier de DNAT qui redirige les paquets vers la machine locale en fonction du crochet de la chaîne. Par exemple, si un service fonctionne sur un port différent de son port standard, vous pouvez rediriger le trafic entrant du port standard vers ce port spécifique.
2.4.2. Configuration du masquage à l'aide de nftables
Le masquage permet à un routeur de changer dynamiquement l'adresse IP source des paquets envoyés par une interface pour l'adresse IP de l'interface. Cela signifie que si l'interface se voit attribuer une nouvelle IP, nftables
utilise automatiquement la nouvelle IP pour remplacer l'IP source.
Remplacer l'IP source des paquets quittant l'hôte via l'interface ens3
par l'IP définie sur ens3
.
Procédure
Créer un tableau :
# nft add table nat
Ajoutez les chaînes
prerouting
etpostrouting
au tableau :# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
ImportantMême si vous n'ajoutez pas de règle à la chaîne
prerouting
, le cadrenftables
exige que cette chaîne corresponde aux réponses des paquets entrants.Notez que vous devez passer l'option
--
à la commandenft
pour éviter que le shell n'interprète la valeur négative de la priorité comme une option de la commandenft
.Ajoutez une règle à la chaîne
postrouting
qui correspond aux paquets sortants sur l'interfaceens3
:# nft add rule nat postrouting oifname "ens3" masquerade
2.4.3. Configuration de la NAT à la source à l'aide de nftables
Sur un routeur, le NAT de source (SNAT) vous permet de changer l'IP des paquets envoyés par une interface en une adresse IP spécifique. Le routeur remplace alors l'IP source des paquets sortants.
Procédure
Créer un tableau :
# nft add table nat
Ajoutez les chaînes
prerouting
etpostrouting
au tableau :# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
ImportantMême si vous n'ajoutez pas de règle à la chaîne
postrouting
, le cadrenftables
exige que cette chaîne corresponde aux réponses des paquets sortants.Notez que vous devez passer l'option
--
à la commandenft
pour éviter que le shell n'interprète la valeur négative de la priorité comme une option de la commandenft
.Ajoutez une règle à la chaîne
postrouting
qui remplace l'IP source des paquets sortants viaens3
par192.0.2.1
:# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
Ressources supplémentaires
2.4.4. Configuration de la NAT de destination à l'aide de nftables
Le NAT de destination (DNAT) permet de rediriger le trafic d'un routeur vers un hôte qui n'est pas directement accessible depuis l'internet.
Par exemple, avec DNAT, le routeur redirige le trafic entrant envoyé aux ports 80
et 443
vers un serveur web dont l'adresse IP est 192.0.2.1
.
Procédure
Créer un tableau :
# nft add table nat
Ajoutez les chaînes
prerouting
etpostrouting
au tableau :# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
ImportantMême si vous n'ajoutez pas de règle à la chaîne
postrouting
, le cadrenftables
exige que cette chaîne corresponde aux réponses des paquets sortants.Notez que vous devez passer l'option
--
à la commandenft
pour éviter que le shell n'interprète la valeur négative de la priorité comme une option de la commandenft
.Ajoutez une règle à la chaîne
prerouting
qui redirige le trafic entrant vers les ports80
et443
sur l'interfaceens3
du routeur vers le serveur web avec l'adresse IP192.0.2.1
:"# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1
En fonction de votre environnement, ajoutez une règle SNAT ou de masquage pour modifier l'adresse source des paquets renvoyés par le serveur web à l'expéditeur :
Si l'interface
ens3
utilise une adresse IP dynamique, ajoutez une règle de masquage :# nft add rule nat postrouting oifname "ens3" masquerade
Si l'interface
ens3
utilise une adresse IP statique, ajoutez une règle SNAT. Par exemple, si l'interfaceens3
utilise l'adresse IP198.51.100.1
:# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
Activer le transfert de paquets :
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Ressources supplémentaires
2.4.5. Configuration d'une redirection à l'aide de nftables
La fonction redirect
est un cas particulier de traduction d'adresse de réseau de destination (DNAT) qui redirige les paquets vers la machine locale en fonction du crochet de la chaîne.
Par exemple, vous pouvez rediriger le trafic entrant et transféré envoyé au port 22
de l'hôte local vers le port 2222
.
Procédure
Créer un tableau :
# nft add table nat
Ajoutez la chaîne
prerouting
à la table :# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }
Notez que vous devez passer l'option
--
à la commandenft
pour éviter que le shell n'interprète la valeur négative de la priorité comme une option de la commandenft
.Ajoutez une règle à la chaîne
prerouting
qui redirige le trafic entrant sur le port22
vers le port2222
:# nft add rule nat prerouting tcp dport 22 redirect to 2222
Ressources supplémentaires