Я пытаюсь решить странную проблему в маршрутизации. У меня настроен роутер (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 ответ на вопрос
0
Krakonos
Проблема была в том, что ipsec вставил свои правила в другую таблицу маршрутизации (table 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 }