Таблиця маршрутизації використовується в порядку найбільш конкретного до найменш конкретного.
Однак на Linux це трохи складніше, ніж ви могли очікувати. По-перше, існує більше однієї таблиці маршрутизації, і коли використовується таблиця маршрутизації, залежить від ряду правил.
Щоб отримати повне зображення:
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip route show 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 route show table main
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 route show table default
$
local
Таблиця є спеціальною таблицею маршрутизації , що містить високі маршрути управління пріоритету для локальних і широкомовних адрес.
main
Таблиця є нормальною таблицею маршрутизації , що містить всі маршрути без політики. Це також таблиця, яку ви побачите, чи просто виконаєте ip route show
(або ip ro
коротко). Я рекомендую більше не використовувати стару route
команду, оскільки вона лише показує main
таблицю, а її вихідний формат дещо архаїчний.
Таблиця default
порожня і зарезервована для післяобробки, якщо попередні правила за замовчуванням не обрали пакет.
Ви можете додати свої власні таблиці та додати правила, щоб використовувати їх у конкретних випадках. Один із прикладів, якщо у вас є два підключення до Інтернету, але один хост або підмережа завжди повинні бути маршрутизовані через одне конкретне з'єднання з Інтернетом.
Routing Policy з Linux книги пояснює все це в найдрібніших деталях.