У меня следующая ситуация:
- - - - - - -
| namespace |-------o o------
- - - - - - - vethY ppp0
vethX
где:
ppp0
это интерфейс PPP и его IP-адрес 192.168.100.169/24vethX
виртуальный интерфейс Ethernet внутри пространства имен, его IP-адрес — 10.0.0.3/24vethY
— это еще один виртуальный интерфейс 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
интерфейс.
Я создал пользовательскую таблицу маршрутизации с именем 'Т1' добавление записи "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?