Dlaczego w Ubuntu nie ma trasy dla hosta lokalnego?

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

Czy to nie znaczy, że 127.0.0.0/8 jest kierowany do bramy 172.17.42.1, a nie do urządzenia zwrotnego?

Balazs Rau
źródło
Miałem na myśli: Dlaczego w Ubuntu nie ma drogi do pętli zwrotnej?
Balazs Rau,
Przypuszczam, że wyraźne trasy dla sieci pętli zwrotnej pochodzą z przeszłości. Widząc twoje pytanie, spoglądam na niektóre nasze serwery i nie ma tras w tablicy routingu dla pętli zwrotnej. Dotyczy to również Solaris 10, a nie Solaris 8 (tak, nadal mamy kilka pudeł z Solaris 8).
alphamikevictor,

Odpowiedzi:

25

routeKomenda jest przestarzała i nie powinien być stosowany dłużej.

Nowym sposobem jest użycie zestawu komend iproute, z których wszystkie są wywoływane ipza pomocą obiektu. Na przykład:

$ 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 

Teraz słyszę, jak mówisz, to w zasadzie ta sama informacja! Tak, ale to nie jest cała historia. Przed tabelami routingu (tak, w liczbie mnogiej) pojawia się tabela reguł:

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

Tabela routingu, na którą patrzyliśmy wcześniej, jest maintabelą routingu. Twoje pytanie dotyczy localtabeli routingu, która zawiera wszystkie trasy związane z połączeniami lokalnymi. Ta tabela może być pokazana w następujący sposób:

$ 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

(Możesz skracać ipopcje / parametry tak długo, jak długo są one unikalne, a zatem ip ro shsą takie same jak ip route show.)

Tutaj możesz zobaczyć trasy pętli zwrotnej.

Z tym routingiem opartym na zasadach możesz robić różne cudowne rzeczy. Polecam przeczytanie Policy Routing z Linuksem przez Matthew G. Marsha dla wszystkich informacji, których kiedykolwiek potrzebujesz.

wurtel
źródło
1
Troska o twoje sformułowania: jego pytanie dotyczyło routingu adresów lokalnych (127.0.0.0/8). table localjest odpowiedzią, ale nie pytaniem. Jest to odpowiedź, ponieważ ruch do dowolnego adresu 127. * jest konwertowany na adres źródłowy 127.0.0.1 i myślę, że również jest zmuszony do korzystania dev lo.
Peter Cordes
1
Tak więc prawdziwa odpowiedź na pytanie brzmi „ponieważ sprzężenie zwrotne jest wyjątkowe i nie potrzebuje go”, jest prawdziwą odpowiedzią. Żaden z tych wpisów tabeli routingu nie mówi na przykład o tym, jak trasować do 127.1.1.1, ale nadal działa (jak można stwierdzić na podstawie czasów pingowania). Przypuszczalnie kod sieciowy specjalnych przypadków lokalnych adresów ze względu na wydajność, ponieważ ip addrnie pokazuje, loże ma więcej niż tylko 127.0.0.1własny adres, ale w rzeczywistości będzie odbierał ruch dla dowolnego adresu IP w 127 ... / 8
Peter Cordes
4
@PeterCordes W rzeczywistości linia local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1obejmuje trasę do 127.1.1.1; oznacza to, że wszystko zaczynające się od 127. jest lokalne.
wurtel
Ach, ok, nie zrozumiałem wszystkiego, co sugeruje localwpis w localtabeli. Dzięki.
Peter Cordes,
2

routeKomenda była stara, ponieważ 10 lat temu i należy udać się z iproute2pakietów.

Podczas korzystania ip route showz mainwyświetlana jest tabela. Aby wyświetlić localtabelę, użyj ip route show table local.

Mam nadzieję, że to pomogło.

Iulian
źródło