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

Моя машина 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 

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

# 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

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

2 ответа

Решение

Вы знаете, какова цель 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 непосредственно из eth0, без специальной отправки их на маршрутизатор по умолчанию (флаги: U = route is UP)

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

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

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

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

Другие вопросы по тегам