Jak ustawić trasy statyczne w Ubuntu Server?

51

Używam Ubuntu od Ubuntu 8.10; dzisiaj pracuję z Ubuntu 12.04 Server.

Mam problem z utrzymaniem statycznych tras podczas uruchamiania. Zwykle umieszczałem polecenia trasy

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

w /etc/rc.locallub chciałbym utworzyć plik (o nazwie routes) w katalogu /etc/network/if-up/, ale zauważam, że w Ubuntu 12.04 to nie działa.

Jeśli wpisuję polecenia w powłoce, działają, ale te same polecenia nie działają, gdy znajdują się w określonym pliku.

Próbowałem już zmienić nazwę pliku na inne, uważając, że moja nazwa pliku ( routes) może być błędna w Ubuntu 12.04, ale to również nie działa.

Zauważam również, że polecenie /sbin/ifconfigdziała, pomniejszone o /sbin/route.

Co zmieniło się w konfiguracji sieci?

Jak zdefiniować trasy statyczne w systemie Ubuntu 12.04?

Frank Allan
źródło
Wystarczy sprawdzić: czy plik rc.local jest wykonywalny i zaczyna się od linii shebang? Może to problem z twoim poleceniem. Możesz spróbować przekierować stderr do pliku ( your_command > stderr.txt 2>&1) i sprawdzić jego wynik ...
Salem
Powinieneś ustawić trasy w / etc / network / interfaces, a nie w /etc/rc.local. A nowe polecenia, których powinieneś używać to ip addi ip route. Jedno polecenie do rządzenia siecią. :)
Anders
Zdecydowanie przeczytajman 5 interfaces
David Tonhofer,

Odpowiedzi:

64

Możesz umieścić trasy statyczne w /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
źródło
13
Składnia dla / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t
1
Czy uprzejmie wyjaśniłbyś swoje ostatnie dwa wiersze w odpowiedzi lub podałbyś link do źródła wiedzy? Dzięki!
itsols
-Net 192.68.0.0 można wyświetlić jako symbol wieloznaczny, mówiąc, że wszystkie pakiety przeznaczone dla 192.168. *. * Powinny być kierowane przez domyślną bramę 192.168.1.1. Jądro spróbuje następnie rozwiązać tę domyślną bramę, ale jeśli ma już wpis ARP, wyśle ​​pakiet z interfejsu, którego się nauczył, że brama znajduje się na docelowym MAC dla następnego przeskoku. Mam nadzieję, że to trochę pomoże.
Neil McGill,
Istnieje również /etc/network/interfaces.d/, który może być lepszym miejscem do ustawienia trasy.
Elijah Lynn
Działa to, ale nie zostało to opisane na stronach podręcznika użytkownika dla interfejsów sieciowych. Czy to standard?
BЈовић
18

Bardzo często stwierdziłem, że poprawne miejsce do zdefiniowania trasy statycznej znajduje się w / etc / network / interfaces, jest ok, jeśli zamierzasz globalnie zrestartować sieć, na przykład /etc/init.d/networking restart. Ale jeśli zamierzasz użyć ifdown i ifup do indywidualnego zamknięcia interfejsu, ifup zakończy się błędem:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Z tego powodu próbuje zdefiniować trasę, ale jest już zdefiniowana. Interfejs i tak będzie działał, ale jeśli ifup nie zaktualizuje / nie uruchomi / sieci / ifstate, więc następnym razem zrobisz to, jeśli nie będziesz w stanie tego zrobić, chyba że użyjesz flagi --force.

Aby ifup kontynuował konfigurowanie, nawet jeśli trasy są już zdefiniowane, możesz użyć tego formatu podczas definiowania tras w / etc / network / interfaces

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

W ten sposób na wyjściu pojawi się ostrzeżenie, ale konfiguracja interfejsu zostanie zakończona

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553
mseisdedos
źródło
1
Dlaczego po prostu nie dodać do konfiguracji „down ip route del 192.168.0.0/16 przez 192.168.10.1”?
w00t
Ponieważ ludzie robią takie rzeczy, jak używanie ifconfigręczne, zamiast uruchamiać ifdown, chcą być w stanie odzyskać dane za pomocą odpowiednich narzędzi. Dlatego przydatne jest, jeśli narzędzia te są odporne na nieoczekiwany stan podczas próby naprawienia stanu. || trueSugestia jest dobry. Pomocne jest także dodanie dolnej linii .
Phil P
5
Od przypadkowego użytkownika: użyj polecenia „replace” zamiast „add” w poleceniu ip. Przykład: up ip route replace 172.16.0.0/24 via 192.168.10.1„zamień” doda trasę, jeśli jeszcze nie istnieje, ale jeśli istnieje trasa z tym samym selektorem, zostanie zastąpiona bieżącą, nawet jeśli mają one to samo miejsce docelowe.
Xen2050,
9

Możesz spróbować (dodać do /etc/network/interfaces), jest to prawie kompletny sposób ustawiania tras:

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
źródło
6

W Ubuntu dostępny jest pakiet ifupdown-extra .
Zapewnia automatyczne skrypty (zainstalowane /etc/network/*/), z których jeden służy do dodawania tras statycznych.

Plik konfiguracyjny do tego to /etc/network/routes

Góra tego pliku konfiguracyjnego ma dobry opis:

Ten plik konfiguracyjny jest odczytywany przez skrypt static-route if-updown i skrypt /etc/init.d/networking-routes w celu ustawienia listy tras powiązanych z danym interfejsem lub trasami globalnymi.

Przykładowa trasa, której używam to:

192.168.240.0 255.255.255.0 192.168.130.3 em3
NGRhodes
źródło
1

działało dla nas

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

Kiedyś działałem na komputerze Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

ale w Ubuntu brakowało elementu „gw” między adresami IP a ostatnią częścią „maski sieci” (także -n nie jest wymagane w Ubuntu)

Peter Perháč
źródło
10
działa to idealnie w przypadku tras tymczasowych (nietrwałych), pytanie dotyczy uzyskania trwałości tras
Anne
0

Wolę używać nmcli.

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

Na przykład:

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

Następnie zastosuj zmiany, ponownie uruchamiając usługę NetworkManager:

sudo systemctl restart NetworkManager.service
isapir
źródło
0

Używając nmclibyłem w stanie uruchomić trwałe rozwiązanie (rozwiązanie @isapir nie działało na moim urządzeniu).

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

Na przykład:

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

Następnie zastosowanie zmian jest możliwe poprzez ustawienie połączenia w dół i w górę (nie ma potrzeby pełnego restartu NetworkManager):

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

Aby zobaczyć bieżące połączenia uruchomione:

sudo nmcli connection
ofirule
źródło