Come impostare percorsi statici in Ubuntu Server?


51

Ho usato Ubuntu da Ubuntu 8.10; oggi sto lavorando con Ubuntu 12.04 Server.

Ho difficoltà a mantenere percorsi statici all'avvio. Di solito inserivo i comandi di route

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

in /etc/rc.localo vorrei creare un file (chiamato routes) all'interno della directory /etc/network/if-up/, ma noto che su Ubuntu 12.04 non funziona.

Se digito i comandi nella shell, funzionano, ma gli stessi comandi non funzionano quando si trovano nel file specificato.

Ho già provato a cambiare il nome del file con altri nomi pensando che il mio nome file ( routes) potrebbe essere errato in Ubuntu 12.04, ma anche quello non ha funzionato.

Noto anche che il comando /sbin/ifconfigfunziona, meno il /sbin/route.

Cosa è cambiato nell'impostazione della rete?

Come posso definire percorsi statici su Ubuntu 12.04?


Solo per verificare: rc.local è eseguibile e inizia con la linea shebang? Forse è un problema con il tuo comando. Puoi provare a reindirizzare stderr su un file ( your_command > stderr.txt 2>&1) e controllarne l'output ...
Salem,

Dovresti impostare i percorsi in / etc / network / interfaces, non in /etc/rc.local. E i nuovi comandi che dovresti usare è ip adde ip route. Un comando per governare la rete. :)
Anders,

Sicuramente lettoman 5 interfaces
David Tonhofer,

Risposte:


64

Puoi inserire percorsi statici 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

13
Sintassi per / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t,

1
Spiegheresti gentilmente le tue ultime due righe nella risposta o forniresti un link alla fonte di conoscenza? Grazie!
itsols

È possibile visualizzare -net 192.68.0.0 come carattere jolly, dicendo che tutti i pacchetti destinati a 192.168. *. * Devono essere instradati tramite il gateway predefinito 192.168.1.1. Il kernel tenterà quindi di risolvere quel gateway predefinito, ma se ha già una voce ARP, invierà il pacchetto dall'interfaccia che ha appreso che il gateway risiede con il MAC di destinazione per l'hop successivo. Spero che ti aiuti un po '.
Neil McGill,

C'è anche /etc/network/interfaces.d/ che potrebbe essere un posto migliore per inserire il percorso.
Elia Lynn,

Funziona, ma non è descritto nelle pagine man per le interfacce di rete. È questo standard?
BЈовић

18

Ho scoperto molto spesso che il posto giusto per definire una route statica è in / etc / network / interfaces, va bene se ad esempio riavvierai la rete a livello globale con /etc/init.d/networking restart. Ma se hai intenzione di utilizzare ifdown e ifup per arrestare singolarmente un'interfaccia, ifup si concluderà con l'errore:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Per questo motivo tenta di definire un percorso ma è già definito. L'interfaccia sarà attiva comunque, ma ifup non aggiornerà / eseguirà / network / ifstate quindi la prossima volta che ci farai ifdown non sarai in grado di farlo a meno che tu non usi il flag --force.

Per fare in modo che ifup continui a configurare anche se le route sono già definite, puoi usare questo formato quando definisci le route in / 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

In questo modo avrai l'avviso nell'output ma la configurazione dell'interfaccia sarà completata

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553

1
Perché non aggiungere semplicemente "down ip route del 192.168.0.0/16 via 192.168.10.1" alla configurazione?
wt

Perché le persone fanno cose come l'uso ifconfigmanuale, invece di correre ifdown, quindi vogliono essere in grado di recuperare utilizzando gli strumenti corretti. Pertanto è utile se tali strumenti sono resistenti allo stato imprevisto mentre tentano di correggere lo stato. Il || truesuggerimento è buono. Aggiunta di una linea verso il basso troppo è utile.
Phil P

5
Da un utente casuale: utilizzare "sostituisci" invece di "aggiungi" nel comando ip. Esempio: up ip route replace 172.16.0.0/24 via 192.168.10.1"sostituisci" aggiungerebbe il percorso se non esiste ancora, ma se esiste un percorso con lo stesso selettore, verrà sostituito da quello corrente, anche se hanno la stessa destinazione.
Xen2050,

9

Puoi provare questo (aggiungilo a /etc/network/interfaces), questo è un modo quasi completo per impostare i percorsi:

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

C'è un pacchetto ifupdown-extra disponibile in Ubuntu.
Fornisce script automatici (installati in/etc/network/*/ ), uno dei quali viene utilizzato per aggiungere route statiche.

Il file di configurazione per questo è /etc/network/routes

La parte superiore di questo file di configurazione ha una buona descrizione:

Questo file di configurazione viene letto dallo script if-update down-static e dallo script /etc/init.d/networking-routes per impostare un elenco di route associate a una determinata interfaccia o route globali.

Un esempio di percorso che utilizzo è:

192.168.240.0 255.255.255.0 192.168.130.3 em3

1

ciò che ha funzionato per noi è stato

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

correvo su un Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

ma su un Ubuntu mancava il "gw" tra IP e l'ultima parte "netmask" (anche -n non richiesto su Ubuntu)


10
questo funziona perfettamente per rotte temporanee (non persistenti), la domanda è su come rendere persistenti le rotte
anneb

0

Preferisco usare nmcli.

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

Per esempio:

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

Quindi applicare le modifiche riavviando il servizio NetworkManager:

sudo systemctl restart NetworkManager.service

0

Utilizzando nmclisono stato in grado di eseguire una soluzione persistente (la soluzione @isapir non ha funzionato sul mio dispositivo).

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

Per esempio:

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

Dopo di che è possibile applicare le modifiche impostando la connessione su e giù (non è necessario il riavvio completo di NetworkManager):

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

Per vedere le connessioni correnti eseguite:

sudo nmcli connection
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.