Чому в Ubuntu немає маршруту для 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

Чи це не означає, що 127.0.0.0/8 спрямовується до шлюзу 172.17.42.1, а не до пристрою петлевого звороту?


Я мав на увазі: Чому в Ubuntu немає маршруту для зворотного зв'язку?
Балаш Рау

Я припускаю, що явні маршрути для мережі зворотного зв'язку є минулими. Бачачи ваше запитання, я зазирнув до деяких наших серверів, і в таблиці маршрутизації для зворотного зв'язку немає маршрутів. Це також справедливо для Solaris 10, а не для Solaris 8 (так, у нас все ще є кілька коробок із Solaris 8).
alphamikevictor

Відповіді:


25

routeКоманда застаріла і не повинна більше використовуватися.

Новий спосіб полягає у використанні iproute набору команд, до яких усі викликаються ipоб'єктом, а потім об'єктом. Наприклад:

$ 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 

Тепер, я чую, ви говорите, це в основному та сама інформація! Так, але це не вся історія. Перед таблицями маршрутизації (так, множина) з'являється таблиця правил:

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

Таблиця маршрутів, яку ми розглядали раніше, - це mainтаблиця маршрутизації. Ваше запитання стосується localтаблиці маршрутів, яка містить усі маршрути, що стосуються локальних з'єднань. Ця таблиця може бути показана наступним чином:

$ 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

(Ви можете скоротити ipпараметри / параметри до тих пір, поки вони все ще унікальні, отже, ip ro shце те саме, що ip route show.)

Тут ви можете побачити зворотні маршрути.

За допомогою цієї маршрутизації на основі політики ви можете робити всілякі чудові речі , рекомендую ознайомитись з маршрутизацією політики за допомогою Меттью Г. Марша для всієї інформації, яка вам коли-небудь знадобиться.


1
Лише хвилює ваше формулювання: його питання було насправді про маршрутизацію локальних адрес (127.0.0.0/8). table localце відповідь, але не питання. Це відповідь, оскільки трафік на будь-яку адресу 127. * перетворюється на адресу джерела 127.0.0.1, і я думаю, що також змушений використовувати dev lo.
Пітер Кордес

1
Тож справжня відповідь на питання "тому, що циклічне відтворення спеціальне і воно не потребує", це справжня відповідь. Жоден із цих записів таблиці маршрутів нічого не говорить про те, як, наприклад, прокласти маршрут до 127.1.1.1, але він все ще працює (як ви можете сказати з часу ping). Імовірно, мережевий код локальних адрес у спеціальних випадках з міркувань продуктивності, оскільки ip addrне показує, що loмає більше ніж просто 127.0.0.1свою власну адресу, але він фактично отримає трафік для будь-якого ip у 127 ... / 8
Пітер Кордес

4
@PeterCordes Насправді лінія local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1охоплює маршрут до 127.1.1.1; це означає, що все, що починається з 127., є локальним.
wurtel

Ах, добре, я не зрозумів усе, що означає localзапис із localтаблиці. Спасибі.
Пітер Кордес

2

routeКоманда була старою , так як 10 років тому , і ви повинні йти з iproute2пакетами.

При використанні ip route showв mainтаблиці відображається. Для відображення використання localтаблиці ip route show table local.

Сподіваюся, це допомогло.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.