Configuration du NAT avec nftables

Activation du routage

Il faut commencer par activer le forwarding IPv4 dans le noyau Linux. On doit d’abord éditer le fichier /etc/sysctl.d/00.forwarding.conf (le nom du fichier a peu d’importance, seulement l’ordre d’exécution des fichiers du dossier).

/etc/sysctl.d/00.forwarding.conf
net.ipv4.ip_forward=1

Puis, on applique la configuration immédiatement (sinon il faudrait redémarrer) avec :

# sysctl --system

Règles de pare-feu du NAT

Configuration temporaire, pour tester :

# nft add table nat
# nft 'add chain nat postrouting { type nat hook postrouting priority 100 ; }'
# nft add rule nat postrouting ip saddr 10.0.X.0/24 oif ens18 snat to 192.168.10.Y(1)
1 ⚠️ Pensez à remplacer ici :
10.0.X.0/24

Adresse réseau du réseau interne

ens18

Interface réseau externe

192.168.10.Y

Adresse IP externe du routeur

On peut vérifier la prise en compte avec :

# nft list ruleset
table ip nat {
	chain postrouting {
		type nat hook postrouting priority srcnat; policy accept;
		ip saddr 10.0.X.0/24 oif "ens18" snat to 192.168.10.X
	}
}

Pour tester le bon fonctionnement depuis le client, essayer d’atteindre avec ping :

  1. Le routeur

  2. Le routeur suivant (box SFR)

  3. Une IP quelconque sur Internet (par exemple 9.9.9.9)

Si tout fonctionne, on peut appliquer les règles définitivement en écrivant dans le fichier /etc/nftables.conf le résultat de nft list ruleset :

/etc/nftables.conf
#!/usr/sbin/nft -f

flush ruleset

table ip nat {
	chain postrouting {
		type nat hook postrouting priority srcnat; policy accept;
		ip saddr 10.0.X.0/24 oif "ens18" snat to 192.168.10.Y
	}
}

Il faut également activer le service nftables au démarrage pour que le fichier soit pris en compte :

systemctl enable nftables

On peut maintenant redémarrer le routeur et tester si le client a toujours accès à tout.