У меня следующая ситуация:
- - - - - - -
| 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?