в каком порядке анализируется таблица маршрутов?

19

На моем компьютере мне нужна следующая таблица маршрутизации:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0

Я не понимаю, как это анализируется, я имею в виду сверху вниз или снизу вверх?

Если он анализируется сверху вниз, то все будет всегда отправляться на маршрутизатор в моем доме, даже если назначение ip было 192.168.1.15; но что я знал (неправильно?), так это то, что если компьютер находится внутри моей локальной сети, то, как только я восстановил пункт назначения MAC с помощью широковещательного сообщения, мой компьютер мог бы отправить сообщение непосредственно адресату.

zer0uno
источник

Ответы:

19

Таблица маршрутизации используется в порядке от наиболее специфической до наименее специфичной.

Однако в 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 объясняет все это в мельчайших деталях.

wurtel
источник
Есть ли способ изменить этот приоритет?
Мени
4

Таблица маршрутизации обычно применяется в порядке от «наиболее определенного» до «наименее определенного». Пункт назначения 0.0.0.0с сетевой маской 0.0.0.0, т. Е. Маршрут по умолчанию , является наименее конкретным из возможных и поэтому всегда будет применяться последним.

Если у вас есть MAC-адрес для другого ПК в вашей локальной сети, но он находится в другой подсети, вы можете добавить конкретный маршрут хоста для этого ПК, и вы, вероятно, получите связь.

roaima
источник
s / обычно / всегда /. Это очень важно для работы таблиц маршрутизации.
Селада,
1
@Celada Я опустил упоминание о метриках для "тех же определенных" маршрутов. И затем есть политика маршрутизации. На данный момент, по крайней мере, я обычно наготове .
roaima