Формулярите за защитна стена питат за TCP порт и очевидният отговор е 50. Този отговор не разрешава нищо, защото ESP е IP протокол номер 50, а номерата на протоколите не са портове. Двете пространства от имена споделят малки цели числа и нищо друго и грешката остава невидима, докато IKE не приключи, а защитеният трафик така и не пристигне.

Две пространства от имена, които споделят малки числа

IP заглавката носи поле за протокол, което посочва какво следва: 6 за TCP, 17 за UDP, 1 за ICMP, 50 за ESP, 51 за AH. Заглавката на TCP или UDP носи номера на портове, които избират процес на хоста местоназначение. Протокол 50 и TCP порт 50 са несвързани стойности, но диалогов прозорец може да ги представи като взаимозаменяеми.

Затова правило за пренасочване на портове не може да изрази вградения ESP. Няма порт местоназначение на ESP, който да се пренасочи, а устройство, което разбира само правила за портове, изобщо няма речник за този пакет. Правилното правило вместо това посочва IP протокола. Всеки диалог за портове е грешният инструмент за този пакет.

Объркването има и втора половина. Когато пакетът е шифрован, всичко вътре в него е непрозрачно, включително TCP заглавката на първоначалната връзка. Защитна стена, която проверява портове в този пакет, гледа външната заглавка, която във вградения случай няма портове за проверка.

Вграден ESP, след това инкапсулираната алтернатива

Вграденият ESP се пренася директно като IP протокол, което е едновременно ефективно и неудобно. Ефективно е, защото няма допълнителна заглавка, и неудобно, защото всяко устройство, което извършва транслация на адреси и портове, не може да го проследи. NAT traversal съществува, за да реши това, като обвива ESP пакета в UDP, така че транслаторът да има портове за пренаписване.

Form on the wireHow it is identifiedWhat the firewall must permit
IKE negotiationUDP with a destination portUDP 500, and 4500 once traversal is detected
Native ESPIP protocol 50 in the outer headerThe protocol itself, with no port to name
ESP inside UDPUDP 4500 carrying an ESP payloadThe UDP port pair, which translation devices can track

Двете форми са алтернативни внедрявания на един и същ канал за данни, а не слоеве на един. Разрешаването на вградения ESP не разрешава инкапсулираната форма, а разрешаването на UDP 4500 не разрешава вградения трафик, затова наборът от правила трябва да съответства на внедряването, а не да покрива и двете случайно.

Откриването също е важно тук. Крайните точки избират между формите по време на договарянето и превключването обикновено се случва, когато между тях бъде открит NAT. Затова път, който се промени след установяване на тунела, може да премести трафика в пространство от имена, което правилата ви никога не са покривали.

Прочетете коя форма всъщност използва връзката

Питайте крайната точка, вместо да гадаете от защитната стена. В Linux записът за състоянието съобщава дали асоциацията използва UDP инкапсулация и кои портове участват. Прихващането на пакети отговаря на същия въпрос от кабела и двете са по-бързи от четене на набор от правила и надяване.

ip xfrm state | grep -A3 encap
tcpdump -ni any 'ip proto 50 or udp port 4500'

Първата команда показва тип инкапсулация, когато се използва NAT traversal, и нищо, когато не се. Втората показва коя от двете форми действително пресича интерфейса и това слага край на споровете за конфигурация, която изглежда правилна на хартия.

Обратните доказателства принадлежат към същата стъпка. Правило, което съобщава нула съвпадения, ви казва, че пакетът никога не е стигнал до него, а това е въпрос на маршрутизация или селектор, не на защитна стена.

След това потвърдете контролния канал отделно. IKE има свои портове и свои журнали, а завършено договаряне без данни е точно разделението, за което е тази статия.

Напишете правилото в правилното пространство от имена

Правилото за протокол и правилото за порт са различни инструкции, затова инструментът трябва да изрази това, което имате предвид. В nftables съвпадението по протокол е явно, а инкапсулираната алтернатива получава свое UDP правило. Дръжте двете правила едно до друго, за да се вижда двойката при преглед.

nft add rule inet filter input ip protocol esp accept
nft add rule inet filter input udp dport { 500, 4500 } accept

Не разширявайте нито едно от правилата, за да компенсирате грешна диагноза. Разрешаване на всичко за протокола ESP на всеки интерфейс или разрешение за UDP от всяко към всяко оправя симптом и премахва контрола, който сте се опитвали да настроите. Тесният поддържан поток почти винаги е достатъчен, след като формата е известна.

И накрая, дръжте слоевете правилни, когато тунелът работи, а приложението не. Пакетите, които пристигат на шлюза, все още се нуждаят от препращане, обратен маршрут и политика, която ги допуска, и нищо от това не се изразява с правило за ESP. Липсващият порт обяснява конкретен отказ, а не всеки отказ на IPsec. Дръжте поправката на правилото и проверката на маршрутизацията като два отделни извода.

Запишете формата, която наблюдавахте, правилото за протокол, което добавихте, и брояча, който видяхте след това. Три реда и следващият човек може да различи грешка в пространството от имена от маршрутна грешка за минута, вместо за следобед.

Подобни статии