2010-10-18 32 views
0

En référence à C++ iptables redirection forming separate packets, je suis confronté à un problème extrêmement particulier maintenant. Je suis en train de rediriger tout le trafic entrant sur le port UDP 5060 au port 56790, et tout le trafic sortant de 5060 au port 56789. J'ai utilisé ces règles iptables:C++ bizarre RAW sockets et iptables question

iptables -t nat -I PREROUTING -p udp ! -s localhost --dport 5060 -j REDIRECT --to-port 56790 
iptables -t nat -I OUTPUT -p udp ! -s localhost --sport 5060 -j REDIRECT --to-port 56789 

J'écoute sur les deux ports en utilisant RAW SOCKETS après avoir réglé l'interface en mode PROMISCUUS utilisant ioctl.

Je vois des paquets sur 56789 côté i.e.SENDING, et je ne vois pas de paquets sur 56790, alors que Wireshark montre que de nombreux paquets sont livrés au port 5060.

Pourquoi cela se produit? Des idées? Pensez-vous que c'est un problème avec les règles iptables ou quelque chose à voir avec les sockets raw?

+0

J'ai essayé ceci sur DEUX machines d'Ubuntu 10.04 maintenant. La même chose se produit. Le REDIRECT PREROUTING ne fonctionne tout simplement pas. Qu'est-ce qui ne va pas? !! :( – SkypeMeSM

+0

Je pense que vous devriez utiliser la table "mangle" si vous utilisez l'action "-j REDIRECT" –

+0

Dans tous les cas, la configuration d'iptables est un sujet pour serverfault, en votant pour se déplacer. –

Répondre

0

Les sockets raw reçoivent une copie du paquet d'origine avant la modification (incoming). Sur sortant, c'est inversé.