Нужна ли каждой пользовательской таблице маршрутизации (со шлюзом по умолчанию) маршрут области действия канала?
Моя машина 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).
Если у вас больше интерфейсов, или вы используете несколько компьютеров, или если у вас настроены определенные маршруты сети или хоста, вы можете увидеть больше маршрутов, чем это, но это своего рода минимум, который вы будете видеть на регулярной основе.
Конфигурируя и вызывая интерфейс, ядро автоматически создает маршрут локальной сети.
Вам не нужно вручную добавлять этот маршрут.