Dvi atskiros taisyklės nusprendžia, ar VPN tunelis įveiks užkardą: prievadas, į kurį skambina klientas, ir protokolas, kuris neša naudingąją apkrovą. Atidarykite tik pirmąjį, ir tunelis autentifikuosis, bet po to nejudės jokie duomenys. Minimumas yra vienas TCP prievadas ir GRE PPTP, du UDP prievadai ir ESP L2TP/IPsec bei IKEv2, ir vienas prievadas SSTP, OpenVPN bei WireGuard. Kryptis, būsenos sekimas ir NAT nulemia likusią dalį.

Pradėkite nuo prievado, į kurį skambina klientas

Kiekviena šeima turi įėjimo tašką, su kuriuo klientas susisiekia pirmiausia, ir būtent tą įėjimo tašką turi įvardyti jūsų leidimo taisyklė. PPTP klientai jungiasi prie TCP 1723. L2TP/IPsec pradeda IKE UDP 500 ir pereina prie UDP 4500, kai naudojamas NAT perėjimas, o pats L2TP kadras yra UDP 1701 tunelio viduje. SSTP apvynioja sesiją TLS TCP 443, IKEv2 derasi UDP 500 ir 4500, OpenVPN pagal nutylėjimą naudoja UDP 1194, bet dažnai perkeliamas į TCP 443, o WireGuard klausosi UDP 51820.

FamilyRule to add on the gatewayTypical mistake
WireGuardUDP port from ListenPort, for the peer addressAssuming 51820 when the config says otherwise
OpenVPNThe configured UDP or TCP port, often 443Opening 1194 after the server moved
SSTPTCP 443 limited to the gateway IPAllowing 443 to any destination
IKEv2UDP 500 and UDP 4500, plus ESPAllowing only 500 and losing NAT-T
L2TP/IPsecUDP 500, 4500, ESP, and 1701 inside the tunnelExposing 1701 to the internet
PPTPTCP 1723 and IP protocol 47Writing a rule for TCP 47

Laikykite šiuos skaičius numatytosiomis reikšmėmis, o ne fiksuotomis savybėmis. WireGuard sąsaja naudoja bet kurį klausymosi prievadą, kurį deklaruoja jos konfigūracija, o OpenVPN serveris gali stovėti bet kuriame administratoriaus pasirinktame prievade. Perskaitykite serverio konfigūraciją prieš rašydami taisyklę, nes užkarda, atidaryta 1194, nieko neduoda į 443 perkeltam serveriui.

Trečiasis stulpelis yra vieta, kur dauguma pakeitimo tiketų nueina ne taip. Taisyklė egzistuoja, bet ji nurodo netinkamą paskirties vietą, netinkamą kryptį arba netinkamą transportą.

GRE ir ESP yra protokolų numeriai, o ne prievadai

GRE ir ESP visai neturi prievadų, todėl užkardos forma, priimanti tik prievadų numerius, negali jų išreikšti. GRE yra IP protokolas 47, o ESP yra IP protokolas 50, abu derinami pagal IP antraštės protokolo lauką. Taisyklė, parašyta kaip TCP prievadas 47, nieko neatitinka, ir taip PPTP politika atrodo teisinga, o vis tiek numeta kiekvieną paketą po rankos paspaudimo.

Namų maršrutizatoriai tai slepia už perdavimo žymės langelio, kuris įdiegia protokolo taisyklę ir, GRE atveju, NAT pagalbininką, reikalingą srautui susieti. Tikroje užkardoje protokolą pridedate patys: leiskite IP protokolą 47 į PPTP serverį, leiskite IP protokolą 50 į IPsec šliuzą. Ten, kur platforma nesiūlo protokolo lauko, išeitis yra inkapsuliavimas, todėl IKEv2 gali atsitraukti į UDP 4500 ir todėl OpenVPN bei WireGuard niekada nesusiduria su šia problema.

Prieš kaltindami klientą patikrinkite, ką taisyklė iš tikrųjų atitinka. Šliuze nulyje stovintis paketų skaitiklis sako, kad taisyklė niekada nebuvo suaktyvinta, ir joks kliento pusės perdiegimas to nepakeis.

Kryptis, būsena ir NAT pakeičia atsakymą

Į išorę skambinantis klientas ir į vidų klausantis šliuzas yra skirtingi reikalavimai, ir tas pats prievadų sąrašas gali būti teisingas viena kryptimi ir neteisingas kita. Būseną sekanti užkarda stebi UDP srautą 500 ir 4500 ir leidžia atsakymams grįžti be antros taisyklės. ESP ir GRE neperduoda prievadų, todėl NAT įrenginys neturi už ko užkabinti ir jam reikia pagalbininko arba inkapsuliavimo, kad sektų sesiją.

NAT perėjimas yra ta dalis, kuri praleidžiama. IKEv2 pradeda UDP 500, aptinka NAT įrenginį ir tęsia UDP 4500, todėl politika, leidžianti tik 500, duoda tunelį, kuris susikuria ir tada nutyla. L2TP/IPsec atlieka tą patį judesį. Jei jūsų įrašas rodo pirmąjį mainus, bet ne nuolatinį srautą, ieškokite taisyklės, kuri sustoja ties 500.

Užrašykite kryptį prie kiekvienos taisyklės. „Leisti UDP 4500“ nieko nereiškia, kol nepasakote iš kur ir į kur, o taisyklė, teisinga keliaujančiam klientui, paprastai neteisinga vietos su vietos partneriui.

Patikrinkite kiekvieną kelią įrašu

Vykdykite įrašą šliuze, o ne kliente: klientas įrašo tik tai, kas atėjo. Šie filtrai apima aukščiau išvardytas šeimas ir parodo, kurio etapo trūksta:

sudo tcpdump -ni any tcp port 1723
sudo tcpdump -ni any udp port 500 or udp port 4500
sudo tcpdump -ni any proto gre
sudo tcpdump -ni any proto 50

Skaitykite išvestį kaip seką. Kai derybos pasirodo, o naudingosios apkrovos protokolas ne, numetimas įvyksta kažkur tarp kliento ir šliuzo. Kai pasirodo abu, o puslapis vis tiek nepavyksta, užkarda nebėra įtariamasis; žiūrėkite maršrutizavimą, DNS ar klientui duotą adresų baseiną.

Įrenginyje be tcpdump tuos pačius įrodymus duoda sąsajos ir taisyklių skaitikliai. Baitai įeina, bet neišeina tunelio sąsajoje — tai rodo grįžimo kelią, o ne pradinę leidimo taisyklę.

Palikite taisyklių rinkinį, kurį galite apginti

SSTP TCP 443 yra neatskiriamas nuo įprasto HTTPS bet kuriam prievadais pagrįstam filtrui, ir tai yra esmė, kai tinklas leidžia tik žiniatinklio srautą. Todėl 443 taisyklė turėtų nurodyti šliuzą kaip paskirties vietą, o ne visą internetą. Ištrinkite laikinąsias bet ko į bet ką taisykles, kai tik tunelis pradeda veikti. Užsirašykite, kuri taisyklė atitiko, protokolo numerį, kur jis yra, ir kryptį, kad kitas žmogus pradėtų nuo įrodymų.

Debesų taško į vietą šliuzai padaro pasirinkimą matomą: atsisiųstas profilis naudoja arba SSTP 443, arba IKEv2 500 ir 4500, todėl atidaryti turėtumėte tik tą, kurį profilis iš tikrųjų pasirenka. PPTP nevertas GRE išimties šiuolaikiniame tinkle, nes mobilieji operatoriai dažnai numeta 47 protokolą nepriklausomai nuo jūsų užkardos. Prieš uždarydami tiketą patvirtinkite, kad taisyklė atitinka serverio konfigūracijos prievadą, kad protokolo laukas nustatytas ten, kur šeimai jo reikia, ir kad paskirties vieta yra šliuzas, o ne bet koks adresas.

Susiję straipsniai