Wie stelle ich statische Routen in Ubuntu Server ein?

51

Ich benutze Ubuntu seit Ubuntu 8.10; Heute arbeite ich mit Ubuntu 12.04 Server.

Ich habe Schwierigkeiten, statische Routen beim Booten beizubehalten. Normalerweise würde ich die Routenbefehle setzen

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

in /etc/rc.localoder ich würde eine Datei (mit Namen routes) im Verzeichnis erstellen /etc/network/if-up/, aber ich stelle fest, dass es unter Ubuntu 12.04 nicht funktioniert.

Wenn ich die Befehle in die Shell eingebe, funktionieren sie, aber dieselben Befehle funktionieren nicht, wenn sie sich in der angegebenen Datei befinden.

Ich habe bereits versucht, den Dateinamen in andere Namen zu ändern, weil ich dachte, mein Dateiname ( routes) könnte in Ubuntu 12.04 fehlerhaft sein, aber das hat auch nicht funktioniert.

Mir ist auch aufgefallen, dass der Befehl /sbin/ifconfigfunktioniert, abzüglich der /sbin/route.

Was hat sich in der Netzwerkeinrichtung geändert?

Wie kann ich unter Ubuntu 12.04 statische Routen definieren?

Frank Allan
quelle
Nur um zu überprüfen, ob rc.local ausführbar ist und mit der shebang-Zeile beginnt. Vielleicht ist es ein Problem mit Ihrem Befehl. Sie können versuchen, stderr in eine Datei umzuleiten ( your_command > stderr.txt 2>&1) und deren Ausgabe zu überprüfen ...
Salem
Sie sollten Routen in / etc / network / interfaces festlegen, nicht in /etc/rc.local. Und neue Befehle, die Sie verwenden sollten, sind ip addund ip route. Ein Befehl, um das Netz zu regieren. :)
Anders
Lesen Sie auf jeden Fallman 5 interfaces
David Tonhofer

Antworten:

64

Sie können statische Routen einfügen in /etc/network/interfaces:

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1
Eric Carvalho
quelle
13
Syntax für / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t
1
Würden Sie bitte Ihre letzten beiden Zeilen in der Antwort erläutern oder einen Link zur Wissensquelle bereitstellen? Vielen Dank!
itsols
Sie können -net 192.68.0.0 als Platzhalter anzeigen, wobei alle Pakete für 192.168. *. * Über das Standard-Gateway 192.168.1.1 weitergeleitet werden sollten. Der Kernel versucht dann, dieses Standard-Gateway aufzulösen. Wenn er jedoch bereits einen ARP-Eintrag hat, sendet er das Paket an die Schnittstelle, von der er erfahren hat, dass das Gateway mit dem Ziel-MAC für diesen nächsten Hop verbunden ist. Hoffe das hilft ein bisschen.
Neil McGill
Es gibt auch /etc/network/interfaces.d/, wo Sie die Route besser platzieren können.
Elijah Lynn
Dies funktioniert, ist jedoch in den Manpages für Netzwerkschnittstellen nicht beschrieben. Ist das Standard?
Freitag,
18

Ich habe sehr oft festgestellt, dass sich der richtige Ort zum Definieren einer statischen Route in / etc / network / interfaces befindet. Es ist in Ordnung, wenn Sie das Netzwerk global neu starten, beispielsweise mit /etc/init.d/networking restart. Wenn Sie jedoch ifdown und ifup verwenden, um eine Schnittstelle einzeln herunterzufahren, endet ifup mit dem Fehler:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Aus diesem Grund wird versucht, eine Route zu definieren, diese ist jedoch bereits definiert. Die Benutzeroberfläche ist trotzdem aktiv, aber ifup wird nicht aktualisiert / ausgeführt / vernetzt / ifstate. Wenn Sie uns das nächste Mal ifdown mitteilen, können Sie dies nur tun, wenn Sie das Flag --force verwenden.

Damit die Konfiguration fortgesetzt werden kann, auch wenn Routen bereits definiert sind, können Sie dieses Format verwenden, wenn Sie Routen in / etc / network / interfaces definieren

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

Auf diese Weise wird die Warnung in der Ausgabe angezeigt, die Schnittstellenkonfiguration wird jedoch abgeschlossen

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553
mseisdedos
quelle
1
Warum nicht einfach eine "down ip route del 192.168.0.0/16 via 192.168.10.1" zur Konfiguration hinzufügen?
23.
Da Benutzer Dinge wie die ifconfigmanuelle Verwendung ausführen, anstatt sie auszuführen ifdown, möchten sie in der Lage sein, mithilfe der richtigen Tools eine Wiederherstellung durchzuführen. Daher ist es hilfreich, wenn diese Tools dem unerwarteten Zustand standhalten, wenn sie versuchen, den Zustand zu beheben. Der || trueVorschlag ist gut. Das Hinzufügen einer Downline ist ebenfalls hilfreich.
Phil P
5
Von einem zufälligen Benutzer: Verwenden Sie im Befehl ip "replace" anstelle von "add". Beispiel: up ip route replace 172.16.0.0/24 via 192.168.10.1"Ersetzen" fügt die Route hinzu, wenn sie noch nicht vorhanden ist. Wenn jedoch eine Route mit demselben Selektor vorhanden ist, wird sie durch die aktuelle Route ersetzt, auch wenn sie dasselbe Ziel hat.
Xen2050
9

Sie können dies ausprobieren (hinzufügen /etc/network/interfaces), dies ist fast die vollständige Methode zum Festlegen von Routen:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/
mmehboobhan
quelle
6

In Ubuntu ist ein Paket ifupdown-extra verfügbar.
Es bietet automatische Skripte (installiert in /etc/network/*/), von denen eines zum Hinzufügen statischer Routen verwendet wird.

Die Konfigurationsdatei dafür ist /etc/network/routes

Am Anfang dieser Konfigurationsdatei befindet sich eine gute Beschreibung:

Diese Konfigurationsdatei wird vom Skript "static-routes if-updown" und vom Skript "/etc/init.d/networking-routes" gelesen, um eine Liste der Routen einzurichten, die entweder einer bestimmten Schnittstelle oder globalen Routen zugeordnet sind.

Eine Beispielroute, die ich benutze, ist:

192.168.240.0 255.255.255.0 192.168.130.3 em3
NGRhodes
quelle
1

was bei uns funktioniert hat war

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

Früher lief ich auf einem Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

aber auf einem Ubuntu fehlte das "gw" zwischen IPs und dem letzten "netmask" -Teil (auch -n auf Ubuntu nicht erforderlich)

Peter Perháč
quelle
10
Dies funktioniert perfekt für temporäre (nicht persistente) Routen. Die Frage ist,
ob
0

Ich benutze lieber nmcli.

nmcli device modify <device-name> ipv4.routes "<ip>/<mask> <gw>" ipv4.route-metric 25

Zum Beispiel:

nmcli device modify wlp2s0 ipv4.routes "1.1.1.0/24 192.168.0.1" ipv4.route-metric 25

Übernehmen Sie anschließend die Änderungen, indem Sie den NetworkManager-Dienst neu starten:

sudo systemctl restart NetworkManager.service
Isapir
quelle
0

Mit konnte nmcliich eine dauerhafte Lösung ausführen (@isapir-Lösung funktionierte auf meinem Gerät nicht).

sudo nmcli connection modify <conection-name> +ipv4.routes "<ip>/<mask> <gw> <mt>"

Zum Beispiel:

sudo nmcli connection modify ssid-name +ipv4.routes "1.1.1.0/24 192.168.0.1 100"

Danach können die Änderungen übernommen werden, indem die Verbindung unterbrochen und wieder hergestellt wird (kein vollständiger Neustart von NetworkManager erforderlich):

sudo nmcli con down ssid-name ; sudo nmcli con up ssid-name

So zeigen Sie die aktuellen Verbindungen an:

sudo nmcli connection
ofirule
quelle