Simetriskais NAT un VPN: mēriet kartējumu, nevis etiķeti
No galapunkta atkarīgais kartējums ietekmē vienaudžu atklāšanu, nevis parastu klienta un servera tuneli. Izmēriet portu un, ja tiešais ceļš neizdodas, izmantojiet starpnieku.
Atbalsta pavediens beidzas ar spriedumu „simetriskais NAT, VPN šeit nedarbosies“, un pēc tam klients trīs reizes bez iemesla tiek pārinstalēts. Etiķete nodara ļaunumu, jo tā atbild uz jautājumu, ko neviens nav uzdevis. Klients, kas savienojas uz āru ar fiksētu serveri, izveido kartējumu tajā brīdī, kad nosūta pirmo paketi, un atbildei tiek ļauts atgriezties saskaņā ar noteikumiem, ko īsteno gandrīz katrs tīkls. To, ko kartējums, kas atkarīgs no galapunkta, patiešām sarežģī, ir divi vienaudži, kas vienlaikus cenšas sasniegt viens otru, un tas ir cits tests.
Aiz vienas etiķetes slēpjas divi jautājumi
Pirmais jautājums ir, vai resursdators aiz šī tīkla var atvērt sesiju uz zināmu publisku adresi un portu. Tunelēšanas klientam tas ir parasts gadījums, un atbilde gandrīz vienmēr ir jā. Maršrutētājs reģistrē iekšējo avotu, piešķir ārējo portu un palaiž atbildi cauri, jo tā pieder sesijai, kas sākās no iekšpuses.
Otrais jautājums ir, vai divi resursdatori aiz dažādiem tīkliem var atrast kopīgu ceļu un sūtīt viens otram bez servera pa vidu. Tas ir atkarīgs no tā, kā katrs tīkls piešķir šos ārējos portus, un tikai tur kartējuma uzvedībai ir nozīme.
Abu sajaukšana rada klasisko nepareizo diagnozi: vienaudžu funkcija neizdodas, kāds palaiž NAT tipa testu, ierauga sliktāko kategoriju un secina, ka arī parastais tunelis nevar darboties. Tunelis nekad nav bijis tas, kas neizdevās.
Kartējums un filtrēšana ir atsevišķas īpašības
RFC terminoloģija ir precīzāka par nosaukumiem, ko lieto piegādātāji, un to ir vērts pārnest uz biļeti, jo tā izšķir strīdus. Kartējums ir tas, kā tiek piešķirts ārējais ports. Filtrēšana ir tas, kuri ienākošie paketes tiek laistas cauri. Tīkls var būt stingrs vienā un liberāls otrā, un tieši šī kombinācija ir tas, kam vienaudžu protokolam jāiztur.
| Behaviour | What it means | Effect on a direct peer path |
|---|---|---|
| Endpoint-independent mapping | One external port for every destination | Discovery works if the port is advertised |
| Address-dependent mapping | New port per remote address | Works only if both sides probe the same pair |
| Address-and-port-dependent | New port per remote address and port | Usually needs a relay |
Trešā rinda ir tas, ko lielākā daļa sadzīves maršrutētāju un mobilo sakaru operatoru saprot ar vārdu simetrisks. Ņemiet vērā, ka etiķete apraksta tikai piešķiršanu. Tīkls ar šādu kartējumu un liberālu filtrēšanu joprojām var pieņemt ienākošās paketes uz portu, ko tas tikko piešķīra, tāpēc caurumu urbšana dažos izdodas, bet citos ne.
Filtrēšanai ir savi trīs gadījumi un savs nosaukums katram. Rakstīt biļetē „simetriskais NAT“, ja domāts „filtrēšana, kas atkarīga no adreses un porta“, nosūta nākamo cilvēku uz nepareizo rokasgrāmatas nodaļu. Abi testā uzvedas atšķirīgi, tāpēc kļūda nav akadēmiska.
Mēriet kartējumu, nevis dodiet tam vārdu
Piešķirto portu varat novērot tieši no jebkura jūsu pārvaldīta UDP pakalpojuma servera puses. Sāciet uztveršanu publiskajā resursdatorā, nosūtiet no klienta un nolasiet avota portu, ar kuru pakete ieradās:
sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820
Galapunkta rinda ir visnoderīgākā no trim, jo WireGuard reģistrē pēdējo adresi un portu, ko saņēmis no katra vienaudža. Salīdziniet šo portu ar to, kuru klients domā, ka izmanto. Tie atšķirsies vienmēr, kad notiek jebkāda tulkošana, un svarīgais jautājums ir, vai vērtība paliek stabila.
Atkārtojiet novērojumu pret otru galamērķa portu vai otru serveri un salīdziniet vēlreiz. Ja ārējais ports mainās atkarībā no galamērķa, kartējums ir atkarīgs no adreses un porta. Ja tas paliek tāds pats, tīkls jums dod vienu kartējumu, un atklāšanai ir iespēja.
STUN balstīti rīki ziņo to pašu klasifikāciju vienā solī, un tos var lietot, kad tīkls atļauj izejošo UDP uz publisku STUN serveri. Kad neatļauj, iepriekš aprakstītā uztveršanas metode joprojām darbojas un neprasa neko citu kā resursdatoru, kuru jau pārvaldāt.
Izvēlieties kļūmei atbilstošu risinājumu
Ja neizdevusies funkcija ir vienaudžu funkcija, atbalstītās atbildes ir starpnieks, tikšanās pakalpojums, kuram var piekļūt abi vienaudži, vai cita topoloģija. TURN pastāv tieši šim nolūkam, un produkts, kas piegādā savu starpnieku, jums saka, ka tas sagaida dažu tīklu naidīgumu.
Ja neizdevusies funkcija ir parasts tunelis, kartējuma uzvedība nav jūsu problēma un nekas no iepriekš minētā neattiecas. Pārbaudiet, vai klients patiešām sūta, vai serveris redz paketi un vai atbilde atgriežas. Šī secība ir trīs novērojumi, un tai nav vajadzīgas zināšanas par maršrutētāja NAT kategoriju.
Tas, kas nedarbojas, ir lokālo portu izmaiņu izkaisīšana, līdz kaut kas pieslēdzas. Klienta avota porta maiņa nemaina to, kā tīkls piešķir kartējumus. Nejauša veiksme piektajā mēģinājumā ir nepatiess pozitīvs rezultāts, un mēnešiem tas tiks citēts kā risinājums.
Pierakstiet arhitektūru, nevis spriedumu
Noderīga piezīme pasaka, kurš protokols, kurā virzienā sākas sesija, vai ceļā ir starpnieks un kas tika novērots uz vada. „simetriskais NAT, nedarbojas“ nav izmantojams, jo tas vienlaikus ir nepareizs par tuneli un neinformē par vienaudža ceļu.
Iekļaujiet izmērīto porta stabilitāti un filtrēšanas uzvedību, ja tos testējāt. Šie divi fakti ļauj kādam citam paredzēt, vai jauna funkcija darbosies šajā tīklā, neatkārtojot visu izmeklēšanu. Tie arī noveco labāk nekā piegādātāja kategorija, kas katrā palīdzības lapā nozīmē ko nedaudz citu.
Visbeidzot, rakstot turiet pa rokai RFC 4787 terminoloģiju. Precīzu terminu lietošana maksā vienu teikumu un neļauj nākamajam lasītājam atkārtot to pašu nepareizo diagnozi, un tas ir viss piezīmes rakstīšanas mērķis.