¿Por qué no hay una ruta para localhost en 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

¿No significa esto que 127.0.0.0/8 se enruta hacia la puerta de enlace de 172.17.42.1 y no hacia el dispositivo de bucle invertido?


Quise decir: ¿por qué no hay una ruta para el loopback en Ubuntu?
Balazs Rau

Supongo que las rutas explícitas para la red de bucle invertido son del pasado. Al ver su pregunta, eche un vistazo a algunos de nuestros servidores y no hay rutas en la tabla de enrutamiento para loopback. Eso también es válido para Solaris 10, no para Solaris 8 (sí, todavía tenemos algunas cajas con Solaris 8).
alphamikevictor

Respuestas:


25

El routecomando está en desuso y ya no debe usarse.

La nueva forma es usar el conjunto de comandos iproute, que se invocan ipseguidos de un objeto. Por ejemplo:

$ 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 

Ahora, te escucho decir, ¡esta es básicamente la misma información! Sí, pero esta no es toda la historia. Antes de las tablas de enrutamiento (sí, plural) viene la tabla de reglas:

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

La tabla de enrutamiento que estábamos viendo antes es la maintabla de enrutamiento. Su pregunta se refiere a la localtabla de enrutamiento, que contiene todas las rutas relacionadas con las conexiones locales. Esta tabla se puede mostrar de la siguiente manera:

$ 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

(Puede abreviar ipopciones / parámetros siempre que sean únicos, por ip ro shlo tanto, es lo mismo que ip route show).

Aquí puedes ver las rutas de bucle invertido.

Puede hacer todo tipo de cosas maravillosas con este enrutamiento basado en políticas . Le recomiendo que lea Enrutamiento de políticas con Linux de Matthew G. Marsh para obtener toda la información que pueda necesitar.


1
Solo una preocupación sobre su redacción: su pregunta era en realidad sobre el enrutamiento de direcciones locales (127.0.0.0/8). table localEs la respuesta, pero no la pregunta. Es la respuesta porque el tráfico a cualquier dirección 127. * se convierte en tener una dirección de origen de 127.0.0.1, y creo que también se ve obligado a usar dev lo.
Peter Cordes

1
Entonces, la respuesta real a la pregunta es "porque el loopback es especial y no necesita uno", es la respuesta real. Ninguna de esas entradas de la tabla de enrutamiento dice nada sobre cómo enrutar a 127.1.1.1, por ejemplo, pero aún funciona (como se puede ver en los tiempos de ping). Presumiblemente, el código de red utiliza direcciones locales para casos especiales por razones de rendimiento, ya ip addrque no muestra lotener más que solo 127.0.0.1su propia dirección, pero en realidad recibirá tráfico para cualquier ip en 127 ... / 8
Peter Cordes

44
@PeterCordes En realidad, la línea local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1cubre la ruta a 127.1.1.1; significa que todo lo que comienza con 127. es local.
wurtel

Ah, ok, no había entendido todo lo que implicaba una localentrada en la localtabla. Gracias.
Peter Cordes

2

El routecomando era antiguo desde hace 10 años y debes ir con los iproute2paquetes.

Cuando está utilizando ip route showla maintabla se muestra. Para mostrar la localtabla use ip route show table local.

Espero que haya ayudado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.