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

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

Спасибо!

1 ответ1

0

Проблема заключалась в том, что 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 (идентификатор main, как видно из /etc/iproute2/rt_tables). Мой strongswan.conf теперь выглядит так:

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

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