IPsec с няколко подмрежи губи обратния трафик? Пребройте reqid
Еднопосочният трафик през тунел с няколко подмрежи обикновено е разминаване на политика и reqid, а не на криптиране или маршрутизация. Четете базите xfrm по ред.
Трафикът напуска една площадка и никога не се връща, двата шлюза съобщават за завършено договаряне, а единствената следа е куп изходящи пакети без отговори. На крайна точка с Linux обичайната причина не е силата на криптирането, MTU или таблица за маршрутизация. Това е гранулярността на записите в политиката и номерът, който свързва всяка политика с асоциация за сигурност. Процедурата по-долу чете тези две бази, преди да пипне нещо друго.
Разделете симптома, преди да промените нещо
Еднопосочна повреда при завършено договаряне по IKE стеснява проблема до пътя на данните. Или изходящата политика е съвпаднала и отговорът е бил изхвърлен, или отговорът изобщо не е пристигнал, защото другата страна не е имала с какво да го изпрати. От гледна точка на приложение двата случая изглеждат еднакво, а базите xfrm ги различават.
Не започвайте с MTU. Грешен MTU дава забавяния и симптоми на фрагментация, а не чисто разделяне на посоките с растящи изходящи броячи.
Прочетете базата с политики и базата със състояния
В Linux криптирането се решава от записите в политиката, затова подходяща политика, а не маршрут, вкарва пакет в тунела. Стартирайте ip xfrm policy, за да видите селекторите, посоката, приоритета и шаблона на всеки запис, и ip xfrm state, за да видите установените асоциации с техните reqid. Политиката и асоциацията се свързват чрез този reqid.
Разгледайте и трите посоки. Изходяща и входяща покриват трафика към и от този хост; посоката на препращане е важна, когато хостът маршрутизира за други. Липсващ или несъответстващ запис в една посока обяснява еднопосочен резултат без никаква криптографска повреда.
Класическата асиметрия: един reqid за няколко подмрежи
Честа повреда идва от партньор, който инсталира политики за всички договорени подмрежи под един reqid, което се случва с generate_policy require при racoon. Трафикът тогава излиза през асоциацията, установена последна, докато другата страна държи отделна асоциация за всяка подмрежа. Отговорите пристигат на асоциация, чийто reqid не сочи политиката, която би трябвало да ги приеме, и ядрото ги изхвърля след декриптиране.
Поправката е промяна в конфигурацията, а не правило на защитна стена: generate_policy unique; дава на всяка политика собствен reqid, така че асоциациите на партньора по политика имат съответстващи партньори. Приложете го, договорете се отново и пребройте различните reqid за очакваните подмрежи, преди да обявите успех.
Ако две подмрежи все още делят един reqid, докато другата страна очаква два, открили сте асиметрията. Запишете съответствието, защото то е доказателството, че следващата промяна я е поправила или запазила.
Селекторите идват от договарянето, а не от вашата конфигурация
Защитените диапазони са това, за което са се споразумели двата края, а не това, което е поискала едната страна. Клиент, който предлага двойка хостове срещу широк отдалечен диапазон, получава стеснената версия на шлюза и не може да я разшири. Четете инсталираните селектори, а не тези в локалния ви файл.
Когато целта е обратната — да задържите едно местоназначение извън тунела, добавете политика за заобикаляне с по-малък номер на приоритет, за да победи автоматично инсталирания запис. Политика без шаблон разрешава открит текст, което я прави съзнателно изключение за регистър на промените, а не стъпка за отстраняване на грешки.
Проверявайте в този ред и знайте как да се върнете назад
Избройте политиките за всяка подмрежа в двете посоки, включително препращането, ако хостът маршрутизира. Пребройте различните reqid и потвърдете по един на политика от страната, която го очаква. Сравнете инсталираните селектори с договорените. След подновяване на ключа прочетете отново броячите по асоциация, защото прегледаната асоциация може вече да я няма. Проверете маршрутите последни, тъй като липсващ маршрут към отдалечената подмрежа дава подобен еднопосочен симптом при чисти броячи на политиката.
Преди да промените партньора, запазете текущия изход на двете команди xfrm. Ако новата настройка не възстанови обратната посока, възстановяването на този изход е по-бързо връщане назад от преизграждане на тунела по памет и запазва сравнението честно.