Wie stelle ich die Priorität von Netzwerkverbindungen in Ubuntu ein?

41

Wenn ein Ubuntu 11.04-Computer gleichzeitig mit WiFi und 3G verbunden ist, wie stelle ich die Priorität ein, damit die Anwendungen (Browser usw.) zuerst WiFi verwenden können? Wenn das nicht verfügbar ist, sollte es das 3G verwenden.

Grundsätzlich möchte ich die Reihenfolge festlegen, in der die Netzwerkverbindungen genutzt werden.

Edit: Ich bin auf der Suche nach einem einfacheren Ansatz, der für diejenigen nützlich wäre, die sich nur wohlfühlen und keine Ubuntu / Linux-Experten sind.

Praveen Sripati
quelle

Antworten:

27

Ich bin überrascht , niemand hat den einfachstenen Befehl erwähnt , dies zu tun: ifmetric. Es kann mit installiert werden sudo apt-get install ifmetric. Mit diesem Befehl können Sie die Metrik einer beliebigen Schnittstelle ändern. Die Schnittstelle mit niedrigerer Metrik wird für das Internet bevorzugt .

Um dies zu verwenden, sehen Sie sich zuerst die Metriken mit dem routeBefehl an:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0
0.0.0.0         10.42.0.2       0.0.0.0         UG    600    0        0 wlan0

Hier eth0hat eine niedrigere Metrik, so dass es gegenüber bevorzugt wird wlan0. Wenn Sie es vorziehen möchten wlan0, senken Sie die Metrik:

sudo ifmetric wlan0 50

Nun würde die Routing-Tabelle so aussehen:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.2       0.0.0.0         UG    50     0        0 wlan0
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0

Jetzt wird Linux wlan0für das Internet verwendet. Die Änderung wird sofort wirksam.

shivams
quelle
1
Gute Antwort. Thx (auch für die Route -n). Ich musste nach der Installation von ifmetric neu starten, um den Befehl zum Ändern der Metrik zu erhalten
Thorsten Niehues
Wie man diese Änderung dauerhaft macht (ich möchte nicht versehentlich meinen iPhone-Hotspot verwenden)
Thorsten Niehues
2
@ThorstenNiehues: Eine schnelle Lösung meiner Meinung nach ist es permanent zu machen kommt den ifmetric Befehl crontab hinzuzufügen, indem Sie crontab -eund dann die Zeile am Ende hinzu: @reboot sudo ifmetric wlan0 50.
Shivams
Es klappt. Danach kann ich jedoch nicht mehr auf lokale Maschinen zugreifen (zB über einen Browser). Irgendeine Idee? Vielen Dank.
Tomasb
@tomasb: interessanter zweifel. Dies ist jedoch zu erwarten, da Sie durch Ändern der Schnittstelleneinstellung in das lokale Netzwerk der bevorzugten Schnittstelle gelangen. Eine einfache Möglichkeit, auf lokale Maschinen zuzugreifen, besteht darin, über eine virtuelle Maschine auf sie zuzugreifen. Es muss jedoch bessere Lösungen geben. Lass mich nachdenken und antworten.
Shivams
14

Durch Festlegen der Metriken ändern Sie die Prioritäten. Die Verwendung der höheren Metrik ist "teurer", sodass das Betriebssystem die Schnittstellen mit der niedrigsten Metrik verwendet, wenn es Datenverkehr weiterleiten muss. Wenn die Schnittstelle mit der niedrigeren Metrik heruntergefahren wird, wird die Schnittstelle mit der höheren Metrik verwendet, da dies die einzige Schnittstelle ist, die zum Weiterleiten des Datenverkehrs zu diesem bestimmten Netzwerk / Ziel verwendet werden kann.

Die Metriken sind in der Datei / etc / network / interfaces angegeben und verweisen auf die Dokumentation.

Verwenden Sie einen beliebigen Texteditor, um die Datei zu bearbeiten, die Netzwerke zu identifizieren und nur die metricParameter zu ändern und zu speichern. Ein Neustart ist der einfachste Weg, um alle Werte zurückzusetzen, ohne auf die Details des Neustarts der Netzwerkdienste einzugehen.

Harrymc
quelle
2
Harry - Danke für die Antwort - Das Netzwerk, an dem ich interessiert bin, wird in der "ifconfig" angezeigt, nicht aber in "/ etc / network / interfaces". Was wird in "ifconfig" und was in "/ etc / network / interfaces" angezeigt?
Praveen Sripati
1
Das Hinzufügen von eth0 zu "/ etc / network / interfaces" ist riskanter. Sie können versuchen, ifconfig als root zu konfigurieren, um die Metrik für die Schnittstelle zu ändern (stellen Sie sicher, dass sie nach dem Start erhalten bleibt).
Harrymc
Wenn ich 'sudo ifconfig eth1 metric 4' ausführe, wird folgende Fehlermeldung angezeigt: 'SIOCSIFMETRIC: Operation nicht unterstützt'. goo.gl/UhXBJ sagt: 'Zusätzlich verwenden nicht alle Systeme das metrische Argument. ..... Wenn Sie ein Linux-System konfigurieren, fügen Sie für jede Schnittstelle einen expliziten Route-Befehl hinzu. "Es scheint, als gäbe es in Ubuntu keinen direkten Ansatz wie auf einer Benutzeroberfläche für einen Anfänger.
Praveen Sripati
2
Offenbar entscheidet sich Linux nach einem schnellen Geschwindigkeitstest für alle Adapter für den schnellsten Adapter. Metrik wird auf vielen Distributionen nicht mehr unterstützt. Sie können immer noch versuchen, Dinge über "/ etc / network / interfaces" zu diktieren, aber ich weiß nicht, wie erfolgreich Sie sein werden. Siehe auch diese Frage .
Harrymc
3
Die einfachste Lösung, die jeder ausführen kann, besteht darin, die Schnittstelle, die Sie nicht verwenden möchten, auszuschalten oder auf "Diese Verbindung nur für Ressourcen in ihrem Netzwerk verwenden" zu beschränken (wenn Sie auch Ihren Drucker oder was auch immer darauf haben) gleichen Router).
Harrymc
7
  1. Die Priorisierung von Schnittstellen für den allgemeinen Datenverkehr erfolgt durch Ändern der Routing-Metriken. Jeder Route sind Parameter wie Anzahl der Sprünge und Bandbreiten zugeordnet. Informationen zum routeBefehl finden Sie in der Option "metric" auf der Manpage .

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref     Use Iface
    0.0.0.0         192.168.1.254   255.255.255.255 U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     256    0        0 eth0
    
  2. Das Priorisieren des Anwendungszugriffs auf Netzwerkressourcen wird häufig durch "Traffic Shaping" behandelt. Ich würde eine Websuchmaschine verwenden, um festzustellen, ob Ubuntu oder der Router dies können.


Fußnote.

Unter MS Windows, aber nicht unter Linux, gibt der netstat -nrBefehl die gleichen Informationen aus wie route print. Einschließlich der Routing-Metriken.

RedGrittyBrick
quelle
Auf der Manpage für die Route "Metrik Die 'Entfernung' zum Ziel (normalerweise in Hops gezählt). Sie wird nicht von aktuellen Kernels verwendet, kann aber von Routing-Daemons benötigt werden." Ich bin mir nicht sicher, ob der Metric-Parameter auf einem normalen Ubuntu-Desktop irgendeine Auswirkung hat.
Praveen Sripati
1
Können Sie mir bitte den spezifischen Routenbefehl geben, um dies zu tun?
Praveen Sripati
11
@PraveenSripati - Ich glaube nicht, dass Sie 100 Ihrer hart verdienten Mitarbeiter für eine solche Antwort gaben - technisch korrekt, aber es hilft Ihnen oder mir nicht. :-( Ich suche auch einen bestimmten Befehl.
Lord Loh.
1
Wirklich was für eine Antwort? Auch netstat -nr zeigt die Metrik nicht an. Antwort von @shivams
Thorsten Niehues
3

Ich habe es nicht wirklich ausprobiert, aber NCD (Network Configuration Daemon - 1) kann für diesen Zweck verwendet werden. Die Site behauptet, die Netzwerkkonfiguration zu vereinfachen. Die Syntax scheint einfach zu sein.

#Warten Sie auf eine Netzwerkverbindung. Bevorzugen Sie eth1, indem Sie es vor eth0 setzen.
list ("NET-eth1", "NET-eth0") pnames;

(1) - http://code.google.com/p/badvpn/wiki/NCD

Praveen Sripati
quelle
Du hast recht, meine NCD-Software macht das gut; Das Beispiel dort funktioniert wie es ist. Ich sollte jedoch beachten, dass die pnamesListe in der Tat nur ein Argument für die multidepend()Aussage in der nächsten Zeile ist - dies ist diejenige, die die Prioritäten umsetzt. Der Mechanismus dahinter ist , dass , wenn eth1aufkommt , wenn eth0bereits oben ist, wird sie ausgeführt multiprovide("NET-eth1");, weil NET-eth1vor ist NET-eth0, multidepend()wird nach unten gehen und kommen wieder nach oben sofort, sondern Variablen aus dem eth1Belichtungsprozess statt eth0.
Ambroz Bizjak
Ich sah es mir an, konnte es aber nicht herausfinden. Das sollte nicht so schwer sein.
SDsolar
3

Dies ist alles auf Routenmetriken zurückzuführen. Sie möchten die Standardroute mit der niedrigsten Metrik löschen und dann die alte Route mit der höheren Metrik wiederherstellen. Bitte folgen Sie den Befehlen unten.

Nehmen wir an, Ihre Routing-Tabelle sieht folgendermaßen aus:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.87.254    0.0.0.0         UG    100    0        0 ens38
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

Löschen Sie nun das Standard-Gateway

# route delete default gateway

Stellen Sie nun das ältere Standard-Gateway wieder her (beachten Sie, dass die Metrik in diesem Fall höher als 102 ist als die aktuelle Standardroute 101).

# route add default gw 10.16.87.254 metric 102 dev ens38                                                              
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
0.0.0.0         10.16.87.254    0.0.0.0         UG    102    0        0 ens38
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
PnotNP
quelle
Das funktioniert. Hinweis für alle andere Novizen (ich hatte diese ein paar Mal zu lesen , um zu folgen , was geschieht): Schritt 1 entfernt den Eintrag für Gateway= 10.16.87.254, die das ist UGmit dem niedrigsten Metric, und Schritt 2 setzt es wieder mit einem höheren Metricso ist es steht weiterhin als Backup zur Verfügung, falls das 192.168.151.2nicht verfügbar ist.
WillC
0

[Update] Ab Ubuntu 18.04 LTS (Server) netplanist dies der Standard-Wrapper für die Netzwerkverwaltung. Die Konfiguration von Netplan erfolgt standardmäßig über eine YAML- Datei /etc/netplan/01-netcfg.yaml(weitere Details hier ).

Die Routing- Metrik wird durch die metricOption " " definiert , die eine positive Ganzzahl erwartet (dies 100ist im Allgemeinen der Standardwert). Hier ist das Beispiel von der Referenzseite:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses:
      - 10.0.0.10/24
      - 11.0.0.11/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      routes:
      - to: 0.0.0.0/0
        via: 10.0.0.1
        metric: 100
      - to: 0.0.0.0/0
        via: 11.0.0.1
        metric: 100

Die Route mit der niedrigsten metric(Pfadlänge) wird zum "bevorzugten" Gateway. (Verwenden Sie:, sudo netplan tryum Änderungen zu aktivieren.)

Beachten Sie, dass Sie in einer Roaming-Umgebung (mehrere Verbindungen, Ein- und Ausschalten) möglicherweise den optionalParameter (boolean) auf true(Standard ist false) setzen möchten :

network:
  version: 2
  ethernets:
    enred:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    engreen:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200
      # this is plugged into a test network that is often
      # down - don't wait for it to come up during boot.
      optional: true

Beachten Sie die leicht abweichende Syntax für die Routenmetrik bei DHCP-Verbindungen.

Sie können NetworkManagerdiesen Teil der Konfiguration auch als Renderer verwenden. Ich nehme an, ich habe mich noch nicht selbst getestet. Sie können diesen Teil der Konfiguration auch über GUI-Tools anzeigen / bearbeiten.

renderer (Skalar)

Verwenden Sie für diese Definition das angegebene Netzwerk-Backend. Derzeit unterstützt werden networkdund NetworkManager. Diese Eigenschaft kann global in networks:, für einen Gerätetyp (z. B. ethernets:) oder für eine bestimmte Gerätedefinition angegeben werden. Standard ist networkd.

(Das allerletzte große Beispiel auf der Referenzseite zeigt eine solche hybride Verwendung beider Renderer.)

Siehe auch diese Frage (askubuntu) .

»Dev
quelle