Kolm WireGuardi hüpet jõuavad võrku, millel pole avalikku aadressi, ja siis lakkab keskmine masin vastamast pordil, millel see pidi kuulama. Tunnel edasi töötab endiselt, kaugem host vastab endiselt ja ainult keskmine server ise on väljast vaikseks jäänud. See kombinatsioon on segane just seetõttu, et see on ise tekitatud: keskmine hüpe kuuletub oma marsruutimistabelile ja tabel saadab selle vastused vale suunda.

Kett, mis töötab seni, kuni keskmise kastiga rääkima hakkad

Võtke näitlik kett: klient A jõuab serverini B UDP 500 kaudu ja B läheb edasi serverini C UDP 500 kaudu. C võtab liiklust vastu ainult oma ainsa partneri aadressilt, mis teeb sellest lehe ja hoiab selle käitumise lihtsana. B ei ole leht ja kõik huvitav selles rikkes toimub just seal.

Erinevus on oluline, sest lehe ja keskme rollid tõmbavad vastassuundades. Leht võib kõik ühte tunnelisse saata tagajärgedeta, kuna mitte miski muu ei sõltu sellest. Keskmine hüpe on korraga nii klientide lõpp-punkt kui ka klient kaugema poole suunas ning need kaks tööd tahavad erinevat marsruutimist.

Miks vastus tunnelist väljub

B-l kannab C poole suunatud liides AllowedIPs = 0.0.0.0/0 koos vastava vaikimisi marsruudiga. Seetõttu läheb iga B loodud pakett sellesse tunnelisse, kui just midagi täpsemat ei ole ülimuslik.

A-lt B-le adresseeritud pakett saabub ja võetakse vastu, sest B on sihtkoht ja kohalik kohaletoimetamine toimub esimesena. Vastus on täiesti uus kohapeal loodud pakett, mis on suunatud A avalikule aadressile, ja see sihtkoht vastab vaikimisi marsruudile tunnelisse. C saab selle kätte, ei oma seda aadressi ja viskab selle ära.

Sümptom loeb nagu tulemüüri probleem või võtme mittevastavus, ja kumbki pole siin tõsi. Tunnelil C poole tehtud püük näitab, et vastused lähevad vales suunas. See üks tähelepanek säästab rohkem aega kui ükskõik kui palju konfiguratsiooni lugemist, nii et kirjutage see üles enne, kui hakkate võtmeid vahetama. Igaüks, kes püüki näinud pole, eeldab, et tunnel ise on katki.

Kitsas parandus: poliitikareeglid, mis vastavad lähtepordile

B kuulava soketi vastused väljuvad lähtepordiga 500. Poliitikareegel saab sellega sobida ja need paketid tagasi tavalise tabeli juurde suunata:

ip rule add sport 500 table main priority 100
ip rule add sport 8080 table main priority 101

Poliitikareegleid vaadatakse prioriteedi järjekorras ja põhitabel asub 32766 juures, nii et reeglit 100 juures küsitakse enne, kui tunneli vaikimisi marsruut midagi ütleb. Lisage üks kirje iga pordi kohta, mis peab väljast ligipääsetavaks jääma, ja mitte rohkem, et edasisaadetav liiklus kasutaks edasi tunnelit, mille jaoks see ehitati.

Tundke selle triki piiri. Valija sport sobib kohapeal loodud pakettidega, mis katab täpselt vastuse juhtumi ja teadlikult ei kata liiklust, mida B lihtsalt kellegi teise eest edasi saadab. B taga majutatud teenus vajab endiselt oma vastust, ja vastupidise teesklemine annab paranduse, mis töötab esimese teenuse puhul ja ebaõnnestub teise puhul.

Andke reeglile omanik

Käsureal trükitud reegel kaob järgmisel korral, kui liides uuesti üles ehitatakse. WireGuardi seadistuses pange see sinna, kus liides luuakse ja eemaldatakse:

PostUp = ip rule add sport 500 table main priority 100
PostDown = ip rule del sport 500 table main priority 100

Kui liidest omab NetworkManager, distributsiooni konks või konteineri sisenemispunkt, kuulub paar sellele omanikule, mitte käsitsi muudetud failile. Kontrollige kehtivaid reegleid pärast uuesti ühendamist, mitte ainult pärast esimest käivitust, sest esimene käivitus on juhtum, mis töötab alati.

Võrrelge alternatiive ausalt

Lähtepordi reegel on üks neljast väljapääsust ja neist kõige kitsam. Selle eelis on, et see ei puuduta tunnelipoliitikat üldse, mistõttu see kipub hilisemaid muudatusi üle elama. Kitsad parandused ebaõnnestuvad ka valjult, kui need enam ei kehti, samas kui lai erand jätkab vaikselt toimimist kaua pärast seda, kui põhjus on kadunud. See erinevus loeb rohkem kui elegantsus, kui kahe aasta pärast omab kasti keegi teine.

ApproachWhat it costsWhere it breaks
Source-port policy ruleOne rule per exposed portAnything B forwards rather than originates
Destination exception routeA route pinned to specific client addressesClients whose address changes
Stop full-tunnelling on BLoses the catch-all path toward CDesigns that depend on it
Split into two tunnelsMore interfaces and more policyNothing, at the cost of complexity

Kontrollige mõlemast otsast, kui olete valinud. A-st alustage ühendust B pordiga ja hoidke seda mõnda aega hõivatud. B-l pange tuum vastusteekonda põhjendama millegagi nagu ip route get <address-of-A> sport 500, ja kinnitage, et see nimetab WAN-liidest, mitte tunnelit. Pärast seda kontrollige, et midagi C taga vastab endiselt läbi keti, mis tõestab, et erand jäi kitsaks, mitte ei muutunud möödaviiguks. Lõpuks kirjutage pordid disainimärkmetesse, muidu avastab järgmine operaator selle mõne teise teenuse juures.

Seotud artiklid