1

У меня следующая ситуация:

- - - - - - -
| namespace |-------o      o------
- - - - - - -     vethY   ppp0
          vethX

где:

  • ppp0 - это интерфейс PPP, а его IP-адрес - 192.168.100.169/24.
  • vethX - это виртуальный интерфейс Ethernet внутри пространства имен, а его IP-адрес - 10.0.0.3/24.
  • vethY - это другой виртуальный интерфейс Ethernet, его IP-адрес 10.0.0.5/24, а также шлюз по умолчанию для пространства имен.

На самом деле таблица маршрутизации в пространство имен выглядит следующим образом:

$ sudo ip netns exec my_namespace ip route
default via 10.0.0.5 dev vethX
10.0.0.0/24 dev vethX proto kernel scope link src 10.0.0.3

Я хочу использовать политику на основе маршрутизации в этом сценарии; в частности, я хочу использовать пользовательскую таблицу маршрутизации, когда входящий интерфейс сетевых пакетов - это vethY или интерфейс ppp0 .

Я создал пользовательскую таблицу маршрутизации с именем ' T1 ', добавив запись "T1" в файл /etc/iproute2/rt_tables .
Затем я добавил правило маршрутизации политики, которое сообщит системе, когда использовать эту новую таблицу маршрутизации.
Итак, теперь правила политики маршрутизации:

$ ip rule
0:      from all lookup local
32764:  from all iif ppp0 lookup T1
32765:  from all iif vethY lookup T1
32766:  from all lookup main
32767:  form all lookup default

Затем я добавил следующие правила в свою таблицу

$ ip route show table T1
default via 192.168.100.169 dev ppp0
10.0.0.0/24 dev vethY scope link
192.168.100.180 dev ppp0 scope link

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

С этой конфигурацией, если я нахожусь в пространстве имен и пингую 10.0.0.5, я не получаю ответы (ни ответ ARP).
Пакеты запроса достигают интерфейса vethY (я видел это с помощью wireshark), но ответ не генерируется.
Если мой кэш arp пуст, то при отправке запроса arp ответ arp отправляться не будет.

Вместо этого, если я добавлю правило
10.0.0.0/24 dev vethY scope link
также в основную таблицу все пакеты передаются корректно.

Почему я не получаю ответы, если я не добавляю это правило в основную таблицу?
Почему основная таблица задействована, поскольку я настроил маршрутизацию на использование T1 для всех пакетов, приходящих либо от vethY, либо от ppp0?

0