Perché non esiste una route per localhost in Ubuntu?


12
$ sudo docker run --rm ubuntu:14.04 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

Questo non significa che 127.0.0.0/8 è indirizzato verso il gateway di 172.17.42.1 e non verso il dispositivo di loopback?


Intendevo: perché non esiste una route per il loopback in Ubuntu?
Balazs Rau,

Suppongo che percorsi espliciti per la rete di loopback siano del passato. Vedendo la tua domanda, dai un'occhiata ad alcuni dei nostri server e non ci sono route sulla tabella di routing per il loopback. Questo è valido anche per Solaris 10, non per Solaris 8 (sì, abbiamo ancora alcune scatole con Solaris 8).
alphamikevictor,

Risposte:


25

Il routecomando è obsoleto e non deve più essere utilizzato.

Il nuovo modo è utilizzare il set di comandi iproute, che sono tutti richiamati ipseguiti da un oggetto. Per esempio:

$ ip route show
default via 192.168.1.254 dev eth0 
192.168.0.0/23 dev eth0  proto kernel  scope link  src 192.168.1.27 

Ora, ti sento dire, sono praticamente le stesse informazioni! Sì, ma questa non è l'intera storia. Prima delle tabelle di routing (sì, plurale) arriva la tabella delle regole:

$ ip rule show
    0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

La tabella di routing che stavamo guardando prima è la maintabella di routing. La tua domanda riguarda la localtabella di routing, che contiene tutti i percorsi relativi alle connessioni locali. Questa tabella può essere mostrata come segue:

$ ip ro sh table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.0.0 dev eth0  proto kernel  scope link  src 192.168.1.27 
local 192.168.1.27 dev eth0  proto kernel  scope host  src 192.168.1.27 
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.27

(Puoi abbreviare ipopzioni / parametri purché siano ancora unici, quindi ip ro shè lo stesso di ip route show.)

Qui puoi vedere i percorsi di loopback.

Puoi fare ogni sorta di cose meravigliose con questo routing basato su policy , ti consiglio di leggere Policy Routing con Linux di Matthew G. Marsh per tutte le informazioni di cui avrai mai bisogno.


1
Solo una preoccupazione per la tua formulazione: la sua domanda riguardava in realtà il routing per gli indirizzi locali (127.0.0.0/8). table localè la risposta, ma non la domanda. È la risposta perché il traffico verso qualsiasi indirizzo 127. * viene convertito in un indirizzo di origine di 127.0.0.1 e penso che sia anche costretto a usarlo dev lo.
Peter Cordes,

1
Quindi la vera risposta alla domanda è "perché il loopback è speciale e non ne ha bisogno", è la vera risposta. Nessuna di quelle voci della tabella di routing dice qualcosa su come instradare a 127.1.1.1, per esempio, ma funziona ancora (come si può dire dai tempi di ping). Presumibilmente il codice di rete in casi speciali indirizzi locali per motivi di prestazioni, dal momento ip addrche non mostra di loavere più di un semplice 127.0.0.1indirizzo, ma riceverà effettivamente il traffico per qualsiasi IP in 127 ... / 8
Peter Cordes

4
@PeterCordes In realtà la linea local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1copre il percorso verso 127.1.1.1; significa che tutto ciò che inizia con 127. è locale.
wurtel,

Ah, ok non avevo capito tutto ciò che implicava una localvoce nella localtabella. Grazie.
Peter Cordes,

2

Il routecomando era vecchio da 10 anni e dovresti andare con i iproute2pacchetti.

Quando si utilizza ip route showla maintabella viene visualizzata. Per visualizzare la localtabella utilizzare ip route show table local.

Spero che abbia aiutato.

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.