Фіксаваныя UDP-парты могуць абысці пракід партоў, але не кожны NAT
Брандмаўэр са станам прапускае пакет партнёра як зваротны трафік, калі абодва бакі замацоўваюць адзін порт. Вось калі гэта працуе і што ціха гэта спыняе.
Два хатнія маршрутызатары, без пракінутых партоў, і VPN, які часам усё ж падключаецца. UDP дазваляе гэта, бо брандмаўэр прапусціць пакет, які ён можа супаставіць з патокам, што машына ўжо пачала. Гэта ўмоўная хітрасць, а не функцыя, і ўмовы лёгка назваць, калі ведаеш, што менавіта параўноўвае брандмаўэр. Яны ж — прычына таго, што аднолькавыя профілі паводзяць сябе па-рознаму ў розных сетках.
Параўнанне, якое робіць брандмаўэр
Кожная зыходная дэйтаграма стварае кароткачасовы запіс: адрас крыніцы, порт крыніцы, адрас прызначэння, порт прызначэння. Усё, што прыходзіць і супадае з запісам, лічыцца адказам і прапускаецца. Правілы для ўваходных тут ні пры чым.
Таму пытанне не ў тым, ці пускае брандмаўэр партнёра ўнутр. Пытанне ў тым, ці пакет партнёра выглядае як адказ, якога чакае запіс. Змяніце адно поле гэтага чатырохчастковага картэжу — і пакет робіцца чужым. Таму працоўная наладка можа зламацца, калі змяняецца толькі нумар порта, і таму той самы порт можа працаваць на адным маршрутызатары і не працаваць на наступным.
Замацуйце лакальны порт крыніцы — і той самы нумар з'явіцца з абодвух бакоў абмену. У гэтым увесь механізм, і гэта тлумачыць, чаму хітрасць крохкая, а не таямнічая.
Замацаванне аднаго порта на кожным баку
Стандартны UDP-порт OpenVPN — 1194, а lport задае порт крыніцы, з якога ідзе адпраўка. Замацуйце абодвух партнёраў — і зыходны картэж кожнага будзе паказваць на порт, які слухае другі:
# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194
Гэта працуе, толькі пакуль ніводзін маршрутызатар паміж імі не перапісвае порт крыніцы. Калі пакеты з'яўляюцца ў перахопе, але тунель не ўзнімаецца, перапісванне — першы падазроны.
Дзе картэж перастае супадаць
NAT, які адлюстроўвае па прызначэнні, дае кожнаму партнёру розны знешні порт. Адрас, які партнёру сказалі выкарыстоўваць, — не той адрас, які да яго даходзіць, таму ўваходны пакет ні з чым не супадае і моўчкі адкідваецца.
Аператарскае трансляванне, шматслойны NAT і рандомізацыя партоў сканчаюцца аднолькава. Гэтак жа, як любы прамежкавы прыбор, што перапісвае парты, пакідаючы адрасы нязменнымі.
З патокавымі транспартамі горш. Рукапоціск TCP адсочваецца крок за крокам, таму VPN на базе TCP такім спосабам не прабіць зусім, і яму патрэбны слухач дзесьці на шляху.
Звычайна першым здае адзін бок
На практыцы дзве сеткі рэдка паводзяць сябе аднолькава. Адзін маршрутызатар можа выдаваць прадказальнае адлюстраванне, а другі — порты па кожным прызначэнні, і вынік — канфігурацыя, якая працуе паміж двума дамамі і не працуе з мабільнай сеткі. Справаздачы, што супярэчаць адна адной, звычайна апісваюць дзве розныя пары маршрутызатараў. Ні адзін аўтар не памыляецца, і ні адзін вынік не абагульваецца.
Высветліце, які бок скінуў пакет, перш чым чапаць профілі. Перахопы з абодвух бакоў вырашаюць гэта з адной спробы: дэйтаграмы, што выходзяць з A і ніколі не дасягаюць B, азначаюць, што паток перапісалі ў дарозе, а дэйтаграмы, што прыходзяць у B без адказу назад, азначаюць, што брандмаўэр не прыняў іх як звязаныя.
Два партнёры з публічнымі адрасамі IPv6 абыходзяць усю праблему. Без трансляцыі няма чаго супастаўляць, таму дастаткова правіла брандмаўэра з імёнамі партнёраў, і праект перастае залежаць ад паводзін маршрутызатара.
Калі спыніць спробы
Хост з публічным адрасам — надзейны адказ. Ён можа завяршыць тунель для абодвух партнёраў або проста дапамагчы ім даведацца бягучы знешні адрас адно аднаго, і абедзве схемы працуюць пры любым NAT. Кіруемы оверлей дае тую ж каардынацыю, калі палітыка дазваляе.
Нічога з гэтага не патрабуе адключанага брандмаўэра. Выключэнне аховы дзеля прамога злучэння адкідвае прычыну, з-за якой прамая спроба была прывабнай, і пакідае машыну адкрытай на ўвесь час тэсту.
Спачатку паспрабуйце прамую схему, потым запішыце, што ўбачылі. Паводзіны NAT і перахоп, што іх паказаў, каштуюць больш, чым пара партоў, якой вы ў выніку скарысталіся, бо наступная сетка будзе іншай. Дапаможнік OpenVPN 2.6 дакументуе lport і опцыі remote, ад якіх гэта залежыць.