ESP — гэта IP-пратакол 50, а не TCP-порт 50: што дазваляць
Нумары пратаколаў і нумары партоў — гэта розныя прасторы імёнаў. Правіла для TCP-порта 50 нічога не дазваляе, а абыход NAT пераносіць ESP у UDP 4500.
Формы для наладкі міжсеткавага экрана пытаюцца 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 існуе менавіта для гэтага: ён заварочвае пакет ESP у UDP, каб у транслятара былі парты для перазапісу.
| Form on the wire | How it is identified | What the firewall must permit |
|---|---|---|
| IKE negotiation | UDP with a destination port | UDP 500, and 4500 once traversal is detected |
| Native ESP | IP protocol 50 in the outer header | The protocol itself, with no port to name |
| ESP inside UDP | UDP 4500 carrying an ESP payload | The 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, і нічога, калі не. Другая паказвае, якая з дзвюх форм фактычна перасякае інтэрфейс, і гэта спыняе спрэчкі пра канфігурацыю, якая выглядае правільнай на паперы.
Супярэчлівыя доказы належаць да таго ж кроку. Правіла, якое паведамляе пра нуль супадзенняў, кажа вам, што пакет ніколі да яго не дайшоў, а гэта пытанне маршрутызацыі або селектара, а не міжсеткавага экрана.
Затым асобна пацвердзіце канал кіравання. У 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. Трымайце выпраўленне правіла і праверку маршрутызацыі як два асобныя высновы.
Запішыце форму, якую вы назіралі, правіла пратакола, якое вы дадалі, і лічыльнік, які ўбачылі пасля. Тры радкі, і наступны чалавек зможа адрозніць памылку прасторы імёнаў ад памылкі маршрутызацыі за хвіліну, а не за паўдня.