Utiliser iptables pour changer un port de destination
Question
Est-il possible de changer le port de destination d'un paquet UDP en utilisant iptables?
J'essaie de faire en sorte qu'un agent SNMP envoie des interruptions sur 1620 au lieu de 162. Malheureusement, je n'ai réussi à changer que le port source:
iptables -t nat -A POSTROUTING -p udp --port 162 -j SNAT --to: 1620
La solution
Cette utilisation n'est apparemment pas prise en charge. Tiré de http://www.netfilter.org/documentation/HOWTO/NAT- HOWTO.txt :
6.3.7. Modification de la destination des connexions générées localement
Le code NAT vous permet d'insérer Règles DNAT dans la chaîne OUTPUT, mais
ceci n’est pas entièrement supporté dans la 2.4 (il peut être, mais il faut un nouveau
option de configuration, quelques tests, et un peu de codage, donc à moins que Quelqu'un engage Rusty à l'écrire, je Je ne m'attendrais pas à ça bientôt).La limitation actuelle est que vous peut seulement changer la destination à
la machine locale (par exemple `j DNAT --to 127.0.0.1 '), à aucune autre machine, sinon les réponses ne seront pas être traduit correctement.
Autres conseils
En supposant que vous sachiez à quelle machine vous voulez envoyer:
iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620
vous pouvez rediriger 162 vers 1620
iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-port 1620
@PiedPiper avait raison. Avec DNAT, vous devez spécifier une adresse IP, mais nous souhaitons uniquement effectuer la redirection de port. Par conséquent, -j REDIRECT peut fonctionner dans ce cas.
Voir http: //www.netfilter .org / documentation / HOWTO // NAT-HOWTO-6.html # ss6.2
Au lieu de créer SNAT, essayez avec DNAT. Le port source est modifié car SNAT signifie SourceNAT, donc DNAT fonctionnera pour vous.
Vous pouvez configurer une règle de renvoi, puis réinjecter le paquet avec le port modifié.
Je l'ai fait il y a longtemps sous Mac OS X, mais c'est le même principe sous Linux: http: //blog.dv8. ro / 2006/08 / using-divert-sockets-on-mac-os-x.html
Vous devez créer un proxy transparent très simple.