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?


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

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

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/

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

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)


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.