Warum gibt es in Ubuntu keine Route für localhost?

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

Bedeutet dies nicht, dass 127.0.0.0/8 zum Gateway von 172.17.42.1 und nicht zum Loopback-Gerät geleitet wird?

Balazs Rau
quelle
Ich meinte: Warum gibt es in Ubuntu keine Route für Loopback?
Balazs Rau
Ich nehme an, explizite Routen für Loopback-Netzwerke stammen aus der Vergangenheit. Wenn ich Ihre Frage sehe, schaue ich mir einige unserer Server an und es gibt keine Routen in der Routing-Tabelle für Loopback. Dies gilt auch für Solaris 10, nicht für Solaris 8 (ja, wir haben noch einige Boxen mit Solaris 8).
Alphamikevictor

Antworten:

25

Der routeBefehl ist veraltet und sollte nicht mehr verwendet werden.

Die neue Methode besteht darin, die iproute-Befehle zu verwenden, die alle mit ipgefolgt von einem Objekt aufgerufen werden. Beispielsweise:

$ 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 

Nun, ich höre Sie sagen, das ist im Grunde die gleiche Information! Ja, aber das ist nicht die ganze Geschichte. Vor den Routing-Tabellen (ja, Plural) steht die Regeltabelle:

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

Die Routing-Tabelle, die wir uns zuvor angesehen haben, ist die mainRouting-Tabelle. Ihre Frage betrifft die localRouting-Tabelle, die alle Routen enthält, die sich auf lokale Verbindungen beziehen. Diese Tabelle kann wie folgt angezeigt werden:

$ 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

(Sie können ipOptionen / Parameter abkürzen , solange sie noch eindeutig sind. Daher ip ro shist dies dasselbe wie ip route show.)

Hier sehen Sie die Loopback-Routen.

Mit diesem richtlinienbasierten Routing können Sie alle möglichen wunderbaren Dinge tun. Ich empfehle Ihnen, Policy Routing mit Linux von Matthew G. Marsh zu lesen, um alle Informationen zu erhalten, die Sie jemals benötigen werden.

wurtel
quelle
1
Nur ein Anliegen bezüglich Ihres Wortlauts: Seine Frage betraf eigentlich das Routing für lokale Adressen (127.0.0.0/8). table localist die Antwort, aber nicht die Frage. Dies ist die Antwort, da der Datenverkehr zu einer beliebigen 127. * -Adresse in eine Quelladresse von 127.0.0.1 konvertiert wird und ich denke, dass dies auch erforderlich ist dev lo.
Peter Cordes
1
Die eigentliche Antwort auf die Frage lautet also "weil Loopback etwas Besonderes ist und keine benötigt", lautet die eigentliche Antwort. Keiner dieser Routing-Tabelleneinträge sagt etwas darüber aus, wie zum Beispiel zu 127.1.1.1 geroutet werden soll, aber es funktioniert immer noch (wie Sie an den Ping-Zeiten erkennen können). Vermutlich handelt der Netzwerkcode aus Leistungsgründen für lokale Adressen, da er ip addrnicht lomehr als nur 127.0.0.1seine eigene Adresse enthält, sondern tatsächlich Datenverkehr für jede IP in 127 ... / 8
Peter Cordes
4
@PeterCordes Tatsächlich local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1deckt die Linie die Route zu 127.1.1.1 ab; es bedeutet, dass alles, was mit 127 beginnt, lokal ist.
Wurtel
Ah, ok, ich hatte nicht alles verstanden, was ein localEintrag in der localTabelle implizierte. Vielen Dank.
Peter Cordes
2

Der routeBefehl war seit 10 Jahren alt und Sie sollten mit den iproute2Paketen gehen.

Wenn Sie ip route showdie mainTabelle verwenden, wird angezeigt. Um die localTabelle anzuzeigen, verwenden Sie ip route show table local.

Hoffe es hat geholfen.

Iulian
quelle