Маршрутизация туннеля Strongswan ipv6

Маршрутизация туннеля Strongswan ipv6

Я пытаюсь решить странную проблему с маршрутизацией. У меня настроен маршрутизатор (Turris, работающий под управлением настроенного OpenWRT) с туннелированием ipv6-соединения Strongswan. Это отлично работает для самого маршрутизатора, так как его ipv6-соединение работает нормально (через туннель, мой провайдер не предлагает нативный ipv6).

TL;DR: Маршруты выбираются не так, как я ожидал. Как наиболее общий, ::/0, по-видимому, всегда оказывается предпочтительным, хотя доступно соответствие /64.

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

Хотя ipsec работает, я получаю интерфейс ipsec0 и следующие маршруты:

Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
::/0                                        ::                                      U     1024   0        2 ipsec0  
2a01:490:19:42::/64                         ::                                      U     1024   0        0 br-lan  

Здесь 2a01:490:19:42::/64 — это ранг, который я выделил для своей локальной сети, 2a01:490:19:42::1 — это IP-адрес маршрутизатора в этой сети.

Вот некоторые наблюдения:

1) Когда я пингую 2a01:490:19:42::1 с компьютера в моей локальной сети, маршрутизатор отвечает, но отправляет ответ в интерфейс ipsec0. Понятия не имею, почему. Разве не должен быть более конкретный префикс 2a01:490:19:42::/64 на br-lan быть предпочтительным? Кажется, он правильно выбирает исходный IP-адрес 2a01:490:19:42::1.

2) То же самое происходит, когда я пытаюсь отправить пакет из своей локальной сети на какой-то другой сайт, скажем, ping6 stackexchange.com. Пакеты попадают на маршрутизатор, пересылаются, сервер отправляет ответ, маршрутизатор его получает... и отправляет обратно на интерфейс ipsec0.

3) Нет политик xfrm. ip xfrm polничего не возвращает. Но Strongswan работает, и у меня сложилось впечатление, что Strongswan всегда создает какие-то политики. В моей предыдущей настройке мне пришлось добавить некоторые, чтобы разрешить прохождение пакетов в туннель, но меня немного смущает пустой список политик.

Хорошо, так в чем проблема? Почему для моих пакетов ipv6 предпочтителен самый общий маршрут, ::/0?

Спасибо!

решение1

Проблема была в том, что ipsec вставил свои правила в другую таблицу маршрутизации (таблица 220) и создал политику для направления трафика туда:

root@turris:/etc/config# ip rule list
0:  from all lookup local 
220:    from all lookup 220 
32766:  from all lookup main 
32767:  from all lookup default 

Но таблица 220содержала только маршрут по умолчанию в туннель ipsec, а не в локальную сеть:

root@turris:/etc/config# ip -6 r show table 220
default dev ipsec0  proto static  src 2a01:490:19:42::1  metric 1024 

Что неизбежно привело к пересылке всех пакетов в туннель.

Сеть самого маршрутизатора работала только потому, что они принимались, а не маршрутизировались.

Я исправил это, указав strongswan вставить правила маршрутизации в основную таблицу вместо этого, установив charon.routing_table = 254(id основной таблицы, как показано в /etc/iproute2/rt_tables). strongswan.confТеперь мой код выглядит так:

charon {
#       load_modular = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
        routing_table = 254 # main
}

Связанный контент