Pourquoi n'y a-t-il pas de route pour localhost dans 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

Cela ne signifie-t-il pas que 127.0.0.0/8 est routé vers la passerelle de 172.17.42.1 et non vers le périphérique de bouclage?


Je voulais dire: pourquoi n'y a-t-il pas de route de bouclage dans Ubuntu?
Balazs Rau

Je suppose que les routes explicites pour le réseau de bouclage sont du passé. Voyant votre question, je jette un œil à certains de nos serveurs et il n'y a pas de routes sur la table de routage pour le bouclage. C'est également valable pour Solaris 10, pas pour Solaris 8 (oui, nous avons encore des boîtes avec Solaris 8).
alphamikevictor

Réponses:


25

La routecommande est obsolète et ne devrait plus être utilisée.

La nouvelle façon consiste à utiliser l'ensemble de commandes iproute, qui sont toutes invoquées avec ipsuivi d'un objet. Par exemple:

$ 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 

Maintenant, je vous entends dire, ce sont essentiellement les mêmes informations! Oui, mais ce n'est pas toute l'histoire. Avant les tables de routage (oui, au pluriel) vient la table de règles:

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

La table de routage que nous examinions auparavant est la maintable de routage. Votre question concerne la localtable de routage, qui contient tous les itinéraires relatifs aux connexions locales. Ce tableau peut être présenté comme suit:

$ 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

(Vous pouvez abréger les ipoptions / paramètres tant qu'ils sont toujours uniques, c'est donc ip ro shla même chose que ip route show.)

Ici, vous pouvez voir les itinéraires de bouclage.

Vous pouvez faire toutes sortes de choses merveilleuses avec ce routage basé sur des politiques , je vous recommande de lire Policy Routing with Linux de Matthew G. Marsh pour toutes les informations dont vous aurez besoin.


1
Juste une préoccupation au sujet de votre formulation: sa question portait en fait sur le routage des adresses locales (127.0.0.0/8). table localest la réponse, mais pas la question. C'est la réponse parce que le trafic vers n'importe quelle adresse 127. * est converti en ayant une adresse source de 127.0.0.1, et je pense qu'il est également forcé d'utiliser dev lo.
Peter Cordes

1
Donc, la vraie réponse à la question est "parce que le bouclage est spécial et n'en a pas besoin", est la vraie réponse. Aucune de ces entrées de table de routage ne dit quoi que ce soit sur la route vers 127.1.1.1, par exemple, mais cela fonctionne toujours (comme vous pouvez le constater à partir des heures de ping). Vraisemblablement, le code de mise en réseau utilise des adresses locales pour des raisons de performances, car ip addril ne montre lopas plus que 127.0.0.1sa propre adresse, mais il recevra en fait du trafic pour n'importe quelle IP en 127 ... / 8
Peter Cordes

4
@PeterCordes En fait, la ligne local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1couvre la route vers 127.1.1.1; cela signifie que tout ce qui commence par 127. est local.
wurtel

Ah, ok je n'avais pas tout compris d'une localentrée dans le localtableau. Merci.
Peter Cordes

2

La routecommande était ancienne depuis 10 ans et vous devriez aller avec les iproute2packages.

Lorsque vous utilisez ip route showle maintableau s'affiche. Pour afficher le localtableau, utilisez ip route show table local.

J'espère que cela a aidé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.