Назад | Перейти на главную страницу

Нужен ли для каждой настраиваемой таблицы маршрутизации (со шлюзом / по умолчанию) маршрут области связи?

Моя машина Centos имеет настраиваемую таблицу маршрутизации foo_table содержащий только маршрут шлюза по умолчанию:

# ip route add default via 10.0.2.1 table foo_table
# ip route show table foo_table  
default via 10.0.2.1 dev bond0.2

Правило политики направляет весь трафик из 10.0.2.22, используя эту таблицу:

# ip rule show
0:      from all lookup local 
32765:  from 10.0.2.22 lookup foo_table 
32766:  from all lookup main 
32767:  from all lookup default 

Когда я отслеживаю маршрут с машины Centos 10.0.2.22 на другую машину в той же локальной подсети, пакет сначала направляется на маршрутизатор, а затем на сервер:

# traceroute -In 10.0.2.60
traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets
 1  10.0.2.1  3.573 ms  3.972 ms  4.219 ms
 2  10.0.2.60  1.461 ms  1.494 ms  1.700 ms

Естественно, я бы хотел, чтобы локальный трафик не задействовал без надобности такой маршрутизатор.

в main таблица маршрутизации, конечно, есть маршрут области связи для локальной подсети:

10.0.2.0/24 dev bond0.2  proto kernel  scope link  src 10.0.2.22

Я так понимаю, потому что foo_table консультируется перед main (согласно ip rule show), маршрут по умолчанию через 10.0.2.1 в foo_table вместо этого используется, даже если местом назначения является локальный адрес ссылки.

Означает ли это, что я должен добавить маршрут области действия ссылки в foo_table также?

# ip route add 10.0.2.0/24 dev bond0.2 scope link table foo_table
# ip route show table foo_table  
10.0.2.0/24 dev bond0.2  scope link
default via 10.0.2.1 dev bond0.2

Похоже, что проблема решена, но правильно ли это?

# traceroute -In 10.0.2.60
traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets
 1  10.0.2.60  0.339 ms  0.355 ms  0.399 ms

Правильно ли я понимаю, что происходит? (У меня минимальный опыт маршрутизации.)

Вы знаете, в чем цель foo_table является? Мне кажется, что его эффект заключается в маршрутизации всего трафика с интерфейса 10.0.2.22 (в том числе в локальную подсеть) через маршрутизатор, что, по вашему мнению, вам не нужно. Какое содержание /etc/iproute2/rt_tables ? Вы также не говорите, какой маршрут по умолчанию находится в main стол.

Чтобы этого избежать, добавьте маршрут подсети в foo_table как вы предлагаете, или просто удалите правило:

ip rule del from 10.0.2.22 lookup foo_table

Насколько я знаю, вам не нужно указывать scope link добавить маршрут подсети к foo_table, просто

ip route add 10.0.2.0/24 dev bond0.2 table foo_table

поскольку вы все равно указываете префикс, соответствующий ссылке. Возможно, я неправильно понял.

((Кстати, полагаю default маршрут в основной таблице можно перенести в default таблица для простоты, но default по соглашению кажется пустым, возможно, потому что маршрут по умолчанию зависит от настроенного интерфейса.))

Для всех, кто сталкивался с этим, я нашел ответ на аналогичный вопрос на родном сайте: https://unix.stackexchange.com/questions/27850/routing-tables-and-default-routes

В общем, вы увидите два правила (как минимум) в своей таблице маршрутизации для большинства разновидностей * nix.

У вас будет маршрут к вашей локальной сети (в этом примере 10.11.12.0/24):

10.11.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

И один, определяющий ваш маршрут по умолчанию.

0.0.0.0 10.11.12.1 0.0.0.0 UG 0 0 0 eth0

Итак, что это эффективно сообщает вашему ядру, так это:

отправлять любые пакеты, идущие в 10.11.12.0/24 out eth0, напрямую, без конкретной отправки их на маршрутизатор по умолчанию (флаги: U = route is UP)

отправлять любые пакеты на любой адрес, кроме локальной сети (0.0.0.0 соответствует чему угодно) на шлюз (10.11.12.1) (флаги: U = route is Up, G = gateway).

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

Настраивая и вызывая интерфейс, ядро ​​автоматически создаст этот локальный сетевой маршрут.

Вам не нужно вручную добавлять этот маршрут.