2016-04-07 3 views
0

Ich entwickle eine Anwendung mit tcl-Sprache, die aus mehreren Prozessen besteht. Jeder Prozess muss Daten über einen Socket (IP, Port) an eine externe IP-Adresse senden. Ich sollte nur den Port 5060 verwenden (da ich einen SIP-Server simuliere). Das Problem ist, dass nur ein Thread den Port 5060 jedes Mal verwenden kann, wenn der Socket verwendet wird (parallele Threads, die denselben Quellport verwenden, sind dann unmöglich), also sollte ich das lösen. Ich frage mich, ob ich Linux iptables verwenden kann, um Source-Port von jedem Thread zu ändern, wenn mehrere Threads gleichzeitig ausgeführt werden (jeder auf einem anderen Socket) ==> alle übertragenen Pakete von der Maschine sind mit dem gleichen Quellport 5060.Firewall-Iptables-Linux: Wie man den gleichen Quellport für alle ausgehenden Pakete erzwingt

Jeder Vorschlag oder Information ist willkommen. (Ich brauche ein konkretes Beispiel, wenn der Fall) Vielen Dank im Voraus.

+0

IMHO diese Frage vom Thema geschrieben, aber FWIW Ich denke nicht, dass es irgendeinen Grund gibt, warum Sie nicht in der Lage sein sollten, dass jeder Thread den gleichen Quellport verwendet. – Alnitak

Antwort

1

Warum können Sie das nicht aus mehreren Threads verwenden? Ausgehende Pakete sollten keinen Konflikt haben - das wäre nur ein Problem, wenn an einen Port für eingehende Verbindungen gebunden wird, was nur durch einen einzigen Thread erledigt werden kann. Wenn dies der Fall ist, ist Ihr Anwendungsdesign insofern fehlerhaft, als nur ein Thread dies tun sollte Verbindungen annehmen und sie an Arbeiter weitergeben.

Um die Frage zu beantworten ... Diese iptables Regel sollte alle ausgehenden Pakete an einen bestimmten Port umleiten.

iptables -I OUTPUT -j REDIRECT --to-port 5060 

Wenn Sie wollen, dass diese zu einer bestimmten Schnittstelle

iptables -I OUTPUT -i eth0 -j REDIRECT --to-port 5060 

Oder nur binden, wenn zu einem bestimmten Ziel zu sprechen

iptables -I OUTPUT -s www.xxx.yyy.zzz -j REDIRECT --to-port 5060