Binden Sie Software an verschiedene Netzwerkschnittstellen


37

Ich habe zwei verschiedene Netzwerkschnittstellen, die mit 2 Netzwerken verbunden sind. Einer ist ein eth0 und der andere ein wlan0. Wie kann ich einer Software anweisen, nur eine bestimmte Schnittstelle zu verwenden?

Grundsätzlich möchte ich, dass Firefox eth0 verwendet, da es sich um das LAN-Netzwerk der Universität handelt und ich zu Intranetsites gehen muss. Das andere ist ein für das Internet offenes WLAN-Netzwerk und ich möchte es an Chrome binden.

Ich arbeite und muss das Intranet benutzen. Also ist eth0 meine Wahl, aber eth0 ist ein Intranet ohne Internetzugang (offensichtlich). Da ich einen Internetzugang haben möchte, bin ich mit wlan0 (Universitäts-WLAN für Studenten) verbunden.

Das Problem ist, wenn ich beide verbunden habe, sucht der Browser manchmal mit eth0 nach www.stackoverflow.com. Daher wollte ich einen Browser zuweisen, der nur eine bestimmte Oberfläche verwendet.


Ist Routing nicht eine bessere Lösung für Ihre Probleme? Ich meine, dass Verbindungen zu ubuntu.stackexchange.com die gleiche Schnittstelle von jedem Programm verwenden sollten.
Javier Rivera

Antworten:


23

Sie können keine Client-Software an bestimmte Netzwerkschnittstellen binden, aber Sie können dem Kernel mitteilen, dass Sie nur eine Netzwerkschnittstelle für einige IP-Adressen und die andere für alles andere verwenden möchten. Dies wird als "Routing" bezeichnet und kann mit den Befehlen /sbin/routeund konfiguriert werden /sbin/ip.

Wenn ich Ihre Frage richtig gelesen habe, möchten Sie über die Schnittstelle eine Verbindung zu Intranet-IP-Adressen eth0und über die Schnittstelle eine Verbindung zum Internet herstellen wlan0.

Wenn Sie den Befehl ausführen ip route list, sollten Sie eine Ausgabe wie die folgende sehen (Zahlen sind unterschiedlich, und Sie können auch mehr Zeilen enthalten):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

Die ersten beiden Zeilen enthalten Informationen zu den mit Schnittstellen verbundenen Netzwerken eth0und wlan0: Netzwerkverkehr, der an Computer in diesen Netzwerken gerichtet ist, wird über die entsprechende Schnittstelle direkt an diese gesendet.

In der letzten Zeile wird die "Standardroute" angegeben: Wenn Ihr Computer mit einem Computer in einem Netzwerk kommunizieren möchte, mit dem er nicht verbunden ist (z. B. dem stackoverflow.com-Server), wird der Datenverkehr über den eth0Host weitergeleitet 10.60.44.1( genannt "Standard-Gateway").

wlan0Um also den Internet-Verkehr durchzuleiten , sollten Sie sicherstellen, dass die letzte Zeile in der ip route listAusgabe ungefähr so lautet:

default via A.B.C.D dev wlan0 proto static

Wo A.B.C.Dist die IP-Adresse des Gateways im WLAN? Wenn die Ausgabe nicht "dev wlan0" enthält, können Sie sie mit dem folgenden Befehl ändern:

sudo ip route change to default dev wlan0 via A.B.C.D

Sie können das Richtige A.B.C.Dauf wlan0zwei Arten herausfinden :

  1. Suchen Sie in Verzeichnis /var/lib/dhcp3/: Sie sollten einige dhclient-...-wlan0.leaseDateien finden. Öffnen Sie die neueste und suchen Sie nach einer Zeile mit der darin enthaltenen Zeichenfolge option router: Der Rest der Zeile gibt die IP-Adresse an A.B.C.D.

  2. Fragen Sie Ihre lokalen Netzwerkadministratoren. (Wahrscheinlich sowieso das Beste.)

Mit dieser Konfiguration sollten Sie in der Lage sein:

  • Surfen im Internet durch wlan0
  • Durchsuchen Sie Ihr Intranet eth0, sofern es sich in einem einzelnen Netzwerk befindet .

Wenn sich Ihr Intranet über mehrere Netzwerke erstreckt, müssen Sie Routen für diese hinzufügen - und dazu müssen Sie auf jeden Fall mit den Administratoren des lokalen Netzwerks interagieren. :-)


Nur aus Neugier: Was ist, wenn ich DNS binden möchte (um Subdomains einzuschließen) anstatt IP-Adressen?
Dierre

1
@dierre Kurz gesagt: Das Routing basiert nicht auf IP-Adressen. Die lange Geschichte beginnt mit der Feststellung, dass Routing eine Sache der Netzwerkschicht 3 ist, sodass es nicht einmal über DNS-Namen informiert ist, deren Auflösung weiter oben im Netzwerkprotokollstapel stattfindet ...
Riccardo Murri,

yeah yeah, ich meinte nicht mit routing. Ich meine im Allgemeinen. Kann es gemacht werden? DNS an Netzwerkschnittstellen binden?
Dierre

@dierre Was genau möchtest du tun? Einen DNS-Server nur auf einer bestimmten Netzwerkschnittstelle antworten lassen? Oder mit einem DNS-Client (dh DNS-Auflösung) nur eine ausgewählte Schnittstelle verwenden?
Riccardo Murri

1
@ Riccardo Murri: ubuntu.stackexchange.com/questions/4988/… et voilà
dierre

2

"ip netns" erstellt Netzwerknamespaces. Sie können dann virtuelle Schnittstellen erstellen (ip link add ... veth) und diese den Namespaces zuordnen.

Die Namespaces können so konfiguriert werden, dass sie beispielsweise unterschiedliche Routen verwenden (und somit unterschiedliche Schnittstellen verwenden).

Dann können Sie Befehle in diesem Namespace ausführen, die den erstellten Namespace verwenden. "Ip netns exec NAME cmd ..."

Quelle: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.