[iptables] comportement étrange
Publié : jeu. 25 mars 2021, 20:10
Bonjour,
Je suis ingé en robotique et j'utilise beaucoup de capteurs qui sont souvent en Ethernet.
Dans mes robots j'ai plusieurs calculateurs (un gros CPU, un gros GPU, etc ...) et suivant le type de capteurs (caméra, laser, etc ...) les données ne sont pas traitées par le même CPU.
Ça fait un moment que je bricole avec iptables pour faire des routes nat pour rediriger mes flux (de l'UDP en général) un peu partout sur mon réseau interne.
Pour ça j'utilise des commandes iptables -t nat... pour faire mes routes, qui seront lancées au boot. Et tcpdump pour faire du debug.
Le scénario que j'ai souvent est le suivant :
- On me branche le capteur, le capteur (10.0.0.30) crache toutes ses tripes en UDP vers l'IP de mon calculo principal (10.0.0.1)
- Je regarde ce qu'il se passe avec tcpdump, j'en déduis que je dois rediriger les UDP du port 1234 qui viennent de 10.0.0.30 vers 10.0.0.2:2000 ( un second calculo, par exemple). Donc je tape la ligne suivante :
iptables -A PREROUTING -t nat -i eth0 --source 10.0.0.30/32 --dport 1234 -j DNAT --to-destination 10.0.0.2:2000
- Je me log sur mon calculo qui est en 10.0.0.2 et je fais un "tcpdump -i eth0 port 2000" et dans 800% du temps j'ai RIEN.
- Alors je balance ma nouvelle règle dans un script de boot et je reboot tout et en général là ça marche, mais pas toujours...
Mes questions :
- C'est vraiment pas possible de faire des routes à chaud ? Est ce que mon soucis c'est qu'il y a déjà des paquets qui correspondent à la règle qui sont passés dans le noyaux et du coup il veut pas appliquer ma règle ?
- Y a t'il un moyen de debug ce genre de chose, est ce qu'il y a quelque chose que je fais mal ?
- Dans le cas ou je m'y prendrais mal, quelle est LA bonne méthode pour faire ce genre de chose ?
Merci beaucoup pour votre aide
Je suis ingé en robotique et j'utilise beaucoup de capteurs qui sont souvent en Ethernet.
Dans mes robots j'ai plusieurs calculateurs (un gros CPU, un gros GPU, etc ...) et suivant le type de capteurs (caméra, laser, etc ...) les données ne sont pas traitées par le même CPU.
Ça fait un moment que je bricole avec iptables pour faire des routes nat pour rediriger mes flux (de l'UDP en général) un peu partout sur mon réseau interne.
Pour ça j'utilise des commandes iptables -t nat... pour faire mes routes, qui seront lancées au boot. Et tcpdump pour faire du debug.
Le scénario que j'ai souvent est le suivant :
- On me branche le capteur, le capteur (10.0.0.30) crache toutes ses tripes en UDP vers l'IP de mon calculo principal (10.0.0.1)
- Je regarde ce qu'il se passe avec tcpdump, j'en déduis que je dois rediriger les UDP du port 1234 qui viennent de 10.0.0.30 vers 10.0.0.2:2000 ( un second calculo, par exemple). Donc je tape la ligne suivante :
iptables -A PREROUTING -t nat -i eth0 --source 10.0.0.30/32 --dport 1234 -j DNAT --to-destination 10.0.0.2:2000
- Je me log sur mon calculo qui est en 10.0.0.2 et je fais un "tcpdump -i eth0 port 2000" et dans 800% du temps j'ai RIEN.
- Alors je balance ma nouvelle règle dans un script de boot et je reboot tout et en général là ça marche, mais pas toujours...
Mes questions :
- C'est vraiment pas possible de faire des routes à chaud ? Est ce que mon soucis c'est qu'il y a déjà des paquets qui correspondent à la règle qui sont passés dans le noyaux et du coup il veut pas appliquer ma règle ?
- Y a t'il un moyen de debug ce genre de chose, est ce qu'il y a quelque chose que je fais mal ?
- Dans le cas ou je m'y prendrais mal, quelle est LA bonne méthode pour faire ce genre de chose ?
Merci beaucoup pour votre aide