Ich habe zwei Netzwerkschnittstellen auf einem Linux-PC und muss die Schnittstelle, die ein bestimmter Prozess verwendet, manuell festlegen.
Das Programm (Twinkle Softphone) hat keine ähnliche Option, daher glaube ich, dass es extern eingestellt werden muss.
Wie kann ich es tun?
Bearbeiten: Ich versuche nicht, einen Serverprozess an eine bestimmte Schnittstelle zu binden, sondern ein Client-Programm über eine bestimmte Schnittstelle mit einem Server in Verbindung zu setzen.
linux
networking
Andrea Spadaccini
quelle
quelle
Antworten:
Sie können Code zur Laufzeit mit LD_PRELOAD ersetzen (@windows Sie können eine ähnliche Technik verwenden, die Umwege genannt wird , ziemlich ausgefallen). Auf diese Weise wird der dynamische Linker angewiesen, zunächst alle Bibliotheken in den Prozess zu laden, den Sie ausführen möchten, und anschließend weitere Bibliotheken hinzuzufügen. du benutzt es normalerweise so:
und dadurch änderst du was
ls
macht.Für Ihr Problem würde ich versuchen, http://www.ryde.net/code/bind.c.txt , die Sie wie folgt verwenden können:
So baust du es:
Eine längere Anleitung finden Sie unter http://daniel-lange.com/archives/53-Binding-applications-to-a-specific-IP.html
ähnliche Hacks und Tools:
quelle
force_bind
Projekt von Catalin M. Boie unterstützt ipv6ip netns kann das.
TL; DR: Erstellen Sie Netzwerknamespaces, ordnen Sie ihnen Schnittstellen zu und führen Sie dann "ip netns exec NAME cmd ..." aus.
Überprüfe einfach, ob deine Distribution IP-Netze unterstützt ... (Backtrack 5r3 nicht, während Kali dies tut;))
IN MEHR DETAILS:
Warum ist dies besser als das Binden der IP über LD_PRELOAD? Da LD_PRELOAD die von den Prozessen verwendete Route nicht steuert. Es wird die erste Route verwenden.
Und da immer die gleiche Route verwendet wird, wird standardmäßig die für die Route registrierte Schnittstelle verwendet (was nicht erwünscht ist).
quelle
ip netns exec myNamespace firefox
sudo ip netns exec myNamespace su -u someUser -c firefox
Ich glaube nicht, dass es möglich ist, einen Prozess zur Verwendung einer bestimmten Schnittstelle zu zwingen.
Ich denke jedoch, dass Sie in der Lage sein könnten, mit ipchain / iptables zu spielen und zu erzwingen, dass ein bestimmter Port, den Ihr Prozess überwacht, nur Pakete über eine bestimmte Schnittstelle empfängt.
Nützliches HOWTO: http://tldp.org/HOWTO/IPCHAINS-HOWTO.html
quelle
Basierend auf @olivervbk Antwort unten ist meine!
Führen Sie alle Befehle als "root" aus.
Verwenden Sie den Befehl ...
... um den Namen der Netzwerkschnittstelle herauszufinden, die Sie verwenden möchten.
Führen Sie die folgenden Befehle als Vorlage aus ...
HINWEIS I: Die Flags "-b -u" im Befehl "sudo" ermöglichen es der Anwendung, mit Ihrem Benutzer (nicht "root") und im Hintergrund ausgeführt zu werden und das Terminal freizugeben. Das
2> /dev/null 1> /dev/null &
Snippet soll verhindern, dass Ausgaben von "[APP_NAME]" am Terminal gedruckt werden.ANMERKUNG II: Die Werte von ip "10.1.1.10" und "10.1.1.1" sind willkürlich.
HINWEIS III: Um für mich zu arbeiten, musste ich den
dhcpcd [INTERFACE_NAME]
Befehl ausführen .Um den Namespace zu entfernen, verwenden Sie ...
... oder...
... um existierende zu entfernen.
quelle
Wenn ein Programm keine Option zum Einstellen der Überwachungsschnittstelle hat, überwacht es normalerweise ALLE Schnittstellen. (Sie können dies überprüfen mit
lsof -i
).Am einfachsten ist es, iptables-Firewallregeln zu erstellen, die eingehenden Datenverkehr auf Schnittstellen, auf denen er nicht sichtbar sein soll, auf seine Ports lenken.
quelle
Alternative I:
Verwenden Sie ld_preload, um das Schnittstellen-Gateway https://github.com/Intika-Linux-Network/App-Route-Jail zu erzwingen
Erzwingen Sie, dass eine Anwendung eine bestimmte Netzwerkschnittstelle verwendet
Wir müssen herausfinden, welches Gateway die Netzwerkschnittstelle verwendet, und dann dieses Gateway zu unserer inhaftierten Anwendung zwingen und somit die Anwendung zwingen, sich an eine bestimmte Netzwerkschnittstelle zu binden
Pro Anwendungs-Gateway
192.168.1.1
als erzwungenes Gateway verwendet. Diese Routenregel wirkt sich nicht auf andere Anwendungen aus. Diese Manipulation muss beispielsweise nur einmal beim Systemstart durchgeführt werden, wenn Sie dies möchten Verwenden Sie diese Lösung täglichAlternative II:
Firejail https://firejail.wordpress.com/ kann eine Anwendung zur Verwendung eines bestimmten Netzwerks zwingen, die Kompatibilität ist jedoch eingeschränkt.
quelle
Warum sollte ein Programm eine andere Schnittstelle als die mit dem Server verbundene verwenden, um mit diesem Server zu kommunizieren? Wenn das System die mit einem Server verbundene Schnittstelle nicht verwendet, um mit diesem Server zu kommunizieren, liegt ein Problem auf Systemebene (Routing-Tabelle) vor und es hat nichts damit zu tun, welcher Prozess zufällig mit diesem Server kommunizieren möchte.
Verschiedene Server in IP-Netzwerken haben unterschiedliche IP-Adressen. Der Kernel sollte anhand der Routing-Tabelle wissen, welche Schnittstelle verwendet werden muss, um eine bestimmte IP-Adresse zu erreichen. Wenn Sie versuchen, mit zwei verschiedenen Servern zu kommunizieren, die dieselbe IP-Adresse haben, wird das System verwirrt (unter anderem, weil die Verbindungen nur intern nach Zieladresse indiziert werden). Sie können dies tun, aber es handelt sich um eine Korrektur auf Systemebene, bei der ein Server in ein separates logisches Netzwerk gestellt wird, das nur über Software-NAT mit dem Computer verbunden ist.
Wenn sie also unterschiedliche IP-Adressen haben, verwenden Sie Routen, um die richtige Schnittstelle auszuwählen. Wenn sie die gleiche IP-Adresse haben, müssen Sie NAT verwenden, damit sie unterschiedliche IP-Adressen für das System zu haben scheinen.
quelle