Таблица маршрутизации используется в порядке от наиболее специфической до наименее специфичной.
Однако в 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
пуста и зарезервирована для последующей обработки, если предыдущие правила по умолчанию не выбирали пакет.
Вы можете добавить свои собственные таблицы и добавить правила, чтобы использовать их в определенных случаях. Например, если у вас есть два интернет-соединения, но один хост или подсеть всегда должны маршрутизироваться через одно конкретное интернет-соединение.
Книга Policy Routing with Linux объясняет все это в мельчайших деталях.