2 votes

Terminer ou casser la connexion natée

J'ai un problème avec la connexion natted sous linux.

J'utilise Debian 10, et iptables pour faire du SNAT pour forcer tous mes paquets sortant de eth0 vers un port UDP spécifique pour utiliser une IP spécifique attachée à eth0 :

iptables -t nat -D POSTROUTING -o eth0 -p udp --dport 38041 -j SNAT --to-source 10.230.0.1

Mais parfois, l'IP source est redistribuée et elle change. Disons que dans mon exemple, elle passe de 10.230.0.1 à 10.230.0.4. L'IP est réaffectée à eth0, la règle iptables est supprimée et une nouvelle règle iptables est ajoutée (avec la bonne IP).

iptables -t nat -D POSTROUTING -o eth0 -p udp --dport 38041 -j SNAT --to-source 10.230.0.1
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 38041 -j SNAT --to-source 10.230.0.4

Lorsque je regarde mes règles iptables, tout semble correct :

#iptables -t nat -nL
...
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:38041 to:10.230.0.4

Mais ça ne marche pas. Quand je regarde mon trafic avec tcpdump :

#tcpdump -i eth0 udp port 38041
21:21:25.829610 IP 10.253.0.1.38041 > xx.xx.xx.xx.38041:  [...payload...]

J'ai essayé de jouer avec netstat-nat mais je n'ai rien réussi à en tirer.

L'ancienne IP est toujours utilisée dans la connexion natted. Je ne comprends pas pourquoi. Et cela se produit sur plusieurs serveurs, donc je ne pense pas qu'il s'agisse d'un problème.

Connaissez-vous la manière correcte d'annuler cette règle pour de bon et de la remplacer par la nouvelle ?

Merci !

2voto

James Mertz Points 390

Vous devrez utiliser conntrack -D pour supprimer les états NAT liés à ces connexions, ou attendez qu'elles expirent après inactivité.

Le NAT d'iptables est toujours stateful - chaque flux de paquets passe par la nat tableau une seule fois et le système se souvient de la traduction par la suite. (Ceci est fait aussi bien pour les connexions TCP que pour les flux UDP sans connexion, et est nécessaire pour "dé-NAT" correctement les paquets de réponse, car il n'y a pas de règles iptables explicites pour le faire).

Les états NAT sont stockés dans la mémoire du noyau. conntrack sous-système. Tant que conntrack dispose d'un enregistrement pour votre destination source particulière, il appliquera toujours la même traduction, sans tenir compte de vos règles iptables. nat règles.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X