1

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

Например, у меня есть хост с адресом 2001:db9:1::2 в интерфейсе e1 . Если я добавлю нормальный маршрут к 2001:db9:1::3 как показано ниже, ping6 работает нормально:

root@pc:/# ip -6 route add 2001:db9:1::3 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 dev e1  metric 1024

Затем я добавляю исходный маршрут с ключевым словом from , используя некоторый исходный адрес, не назначенный ни одному из моих интерфейсов:

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:a::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

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

Интересно, что если я добавлю маршрут с указателем from но с правильным адресом источника, будет выбран правильный маршрут и проверка связи будет успешной.

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:1::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:1::2 dev e1  metric 1024
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

(Я также попытался использовать 2001:db9:1::1 качестве источника, и результат все еще успешен, поэтому лексикографический порядок не имеет значения). Таким образом, кажется, что маршруты без ограничений источника игнорируются, если для пункта назначения существует маршрут с ограничением источника.

Я уже проверил конфигурацию ядра (версия 4.9.13) и IPV6_SUBTREES включены. Есть идеи?

1 ответ1

0

Похоже, что смешивание как обычных, так и исходных маршрутов в одной таблице маршрутизации приводит к непреднамеренному поведению. Это упоминается в net/ipv6/Kconfig в источнике ядра linux:

config IPV6_SUBTREES
    bool "IPv6: source address based routing"
    depends on IPV6_MULTIPLE_TABLES
    ---help---
      Enable routing by source address or prefix.

      The destination address is still the primary routing key, so mixing
      normal and source prefix specific routes in the same routing table
      may sometimes lead to unintended routing behavior.  This can be
      avoided by defining different routing tables for the normal and
      source prefix specific routes.

      If unsure, say N.

Помещение исходных ограниченных маршрутов в отдельную таблицу маршрутизации дает правильное поведение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .