Pagalbos gija baigiasi nuosprendžiu „simetrinis NAT, VPN čia neveiks“, o tada klientas tris kartus be priežasties perinstaliuojamas. Etiketė daro žalą, nes atsako į klausimą, kurio niekas neuždavė. Klientas, kuris jungiasi į išorę prie fiksuoto serverio, sukuria atvaizdavimą tuo metu, kai išsiunčia pirmą paketą, o atsakymui leidžiama grįžti pagal taisykles, kurias įgyvendina beveik kiekvienas tinklas. Tai, ką atvaizdavimas, priklausantis nuo galinio taško, iš tikrųjų apsunkina, yra du bendraamžiai, bandantys pasiekti vienas kitą tuo pačiu metu, ir tai yra kitas bandymas.

Už vienos etiketės slypi du klausimai

Pirmas klausimas – ar už šio tinklo esantis mazgas gali atidaryti sesiją žinomu viešu adresu ir portu. Tunelio klientui tai įprastas atvejis, o atsakymas beveik visada yra taip. Maršrutizatorius užregistruoja vidinį šaltinį, priskiria išorinį portą ir praleidžia atsakymą, nes jis priklauso sesijai, prasidėjusiai iš vidaus.

Antras klausimas – ar du mazgai už skirtingų tinklų gali rasti bendrą kelią ir siųsti vienas kitam be serverio viduryje. Tai priklauso nuo to, kaip kiekvienas tinklas priskiria tuos išorinius portus, ir tik ten atvaizdavimo elgsena turi reikšmės.

Sumaišius abu, atsiranda klasikinė klaidinga diagnozė: bendraamžių funkcija nepavyksta, kažkas paleidžia NAT tipo testą, pamato blogiausią kategoriją ir daro išvadą, kad įprastas tunelis taip pat negali veikti. Tunelis niekada nebuvo tai, kas nepavyko.

Atvaizdavimas ir filtravimas yra atskiros savybės

RFC terminologija yra tikslesnė už tiekėjų vartojamus pavadinimus, ir verta ją perkelti į bilietą, nes ji išsprendžia ginčus. Atvaizdavimas – tai, kaip priskiriamas išorinis portas. Filtravimas – tai, kurie įeinantys paketai praleidžiami. Tinklas gali būti griežtas viename ir liberalesnis kitame, ir būtent ta kombinacija yra tai, ką bendraamžių protokolas turi atlaikyti.

BehaviourWhat it meansEffect on a direct peer path
Endpoint-independent mappingOne external port for every destinationDiscovery works if the port is advertised
Address-dependent mappingNew port per remote addressWorks only if both sides probe the same pair
Address-and-port-dependentNew port per remote address and portUsually needs a relay

Trečia eilutė yra tai, ką dauguma vartotojiškų maršrutizatorių ir mobiliojo ryšio operatorių turi omenyje sakydami simetrinis. Atkreipkite dėmesį, kad etiketė aprašo tik priskyrimą. Tinklas su tokiu atvaizdavimu ir liberaliu filtravimu vis tiek gali priimti įeinančius paketus į portą, kurį ką tik priskyrė, todėl skylių gręžimas vienuose pavyksta, o kituose ne.

Filtravimas turi savo tris atvejus ir savo pavadinimą kiekvienam. Rašyti biliete „simetrinis NAT“, kai turima omenyje „filtravimas, priklausantis nuo adreso ir porto“, nukreipia kitą žmogų į netinkamą vadovo skyrių. Abu testuojant elgiasi skirtingai, tad klaida nėra akademinė.

Išmatuokite atvaizdavimą, o ne įvardykite jį

Priskirtą portą galite stebėti tiesiogiai iš bet kurios jūsų valdomos UDP paslaugos serverio pusės. Pradėkite fiksavimą viešajame mazge, siųskite iš kliento ir perskaitykite šaltinio portą, su kuriuo atėjo paketas:

sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820

Galinio taško eilutė yra naudingiausia iš trijų, nes WireGuard įrašo paskutinį adresą ir portą, gautus iš kiekvieno bendraamžio. Palyginkite tą portą su tuo, kurį klientas mano naudojantis. Jie skirsis visada, kai vyksta koks nors vertimas, ir svarbus klausimas yra tai, ar reikšmė išlieka stabili.

Pakartokite stebėjimą antrojo paskirties porto arba antrojo serverio atžvilgiu ir vėl palyginkite. Jei išorinis portas keičiasi pagal paskirties vietą, atvaizdavimas priklauso nuo adreso ir porto. Jei jis lieka tas pats, tinklas duoda vieną atvaizdavimą ir aptikimas turi šansą.

STUN pagrįsti įrankiai praneša tą pačią klasifikaciją vienu žingsniu, ir juos naudoti tinka, kai tinklas leidžia išeinantį UDP į viešą STUN serverį. Kai neleidžia, aukščiau aprašytas fiksavimo metodas vis dar veikia ir nereikalauja nieko, išskyrus mazgą, kurį jau valdote.

Pasirinkite gedimą atitinkantį sprendimą

Jei nepavykstanti funkcija yra bendraamžių, palaikomi atsakymai yra retransliatorius, susitikimo paslauga, kurią pasiekia abu bendraamžiai, arba kita topologija. TURN egzistuoja būtent tam, o produktas, pateikiantis savo retransliatorių, jums sako, kad tikisi kai kurių tinklų priešiškumo.

Jei nepavykstanti funkcija yra įprastas tunelis, atvaizdavimo elgsena nėra jūsų problema ir niekas iš aukščiau nebegalioja. Patikrinkite, ar klientas tikrai siunčia, ar serveris mato paketą ir ar atsakymas grįžta. Ši seka yra trys stebėjimai, ir jai nereikia žinoti nieko apie maršrutizatoriaus NAT kategoriją.

Tai, kas neveikia, yra vietinio porto pakeitimų barstymas, kol kažkas prisijungs. Kliento šaltinio porto pakeitimas nekeičia to, kaip tinklas priskiria atvaizdavimus. Atsitiktinė sėkmė penktuoju bandymu yra klaidingai teigiamas rezultatas, ir mėnesius jis bus cituojamas kaip sprendimas.

Užrašykite architektūrą, o ne nuosprendį

Naudinga pastaba pasako, koks protokolas, kuria kryptimi prasideda sesija, ar kelyje yra retransliatorius ir kas buvo pastebėta laide. „simetrinis NAT, neveikia“ yra netinkama, nes ji vienu metu klaidinga dėl tunelio ir nieko nesako apie bendraamžio kelią.

Įtraukite išmatuotą porto stabilumą ir filtravimo elgseną, jei juos testavote. Šie du faktai leidžia kam nors kitam numatyti, ar nauja funkcija veiks tame tinkle, nekartojant viso tyrimo. Jie taip pat sensta geriau nei tiekėjo kategorija, kuri kiekviename pagalbos puslapyje reiškia ką nors šiek tiek kito.

Galiausiai, rašydami laikykite po ranka RFC 4787 terminologiją. Tikslių terminų vartojimas kainuoja vieną sakinį ir neleidžia kitam skaitytojui pakartoti tos pačios klaidingos diagnozės, o tai ir yra visas pastabos rašymo tikslas.

Susiję straipsniai