Kaks VPN-klienti ühel töölaual: mis põrkub ja mis töötab
Kaks klienti võitlevad vaikeimarsruudi, nimeresolveri ja filtreerivate draiverite pärast. Kirjuta üles, kellele kuulub väljund, ja eralda seejärel teine tunnel VM-i või netns-iga.
Sinu teine klient ühendub, esimese ressursid lakkavad lahenemast ja pilet ütleb, et töö-VPN rikkus isikliku. Miski ei ole rikkis rikke mõttes: mõlemad kliendid tegid seda, milleks nad loodi, ja masinal on ainult üks marsruutimistabel. Kokkupõrge käib nelja ressursi pärast, mida kumbki klient arvab endale kuuluvat. Käi need järjekorras läbi ja parandus muutub tavaliselt disainiotsuseks, mitte remondiks.
Samm 1: leia, milline klient omab väljundit
Loe praegust väljundiotsust enne, kui midagi muudad. Avaliku aadressi marsruudipäring ütleb, millist liidest ja järgmist hüpet pakett praegu kasutaks, ja see on vastus sellele, kes võitis. Võrdle seda klientide loodud liidesenimedega, mis kannavad tavaliselt toote või protokolli nime. Kui päring osutab tunnelile, mida sa ei oodanud, oled kokkupõrke juba leidnud.
ip route get 1.1.1.1
ip route show default
route print
Mõned kliendid ei asenda vaikeimarsruuti üldse; nad lisavad kaks poolt, ühe aadressiruumi alumise poole ja ühe ülemise poole jaoks, mis koos katavad kõik. See jätab algse vaikeimarsruudi nähtavaks ja paneb käsitsi paranduse õige välja nägema, samal ajal kui liiklus väljub endiselt tunnelist. Loe metrikat ja prefiksi pikkust, mitte ainult vaikekirje olemasolu.
Peatu, kui mõlemad kliendid nõuavad sama prefiksit sama metrikaga. Kernel valib ühe ja teine näib ühendatud, kandes mitte midagi.
Samm 2: kontrolli resolverit ja kattuvaid prefikseid
DNS on teine kokkupõrge ja tekitab iseloomuliku sümptomi: nimed ei toimi, samal ajal kui aadressid toimivad. Iga klient surub peale oma resolveri ja viimane kirjutaja võidab järgnevate päringute puhul. Küsi resolveriteenuselt, mida see lingi kohta kasutab, selle asemel et lugeda kliendi seadete lehte.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
Seejärel võrdle privaatseid prefikseid, mida kaks võrku kasutavad. Kui mõlemad pooled jagavad samast vahemikust, ei paranda seda ükski kliendipoolne lahendus, sest masin ei saa öelda, milline 10.0.0.0/8 sihtkoht kuulub millisesse tunnelisse. Üks pool tuleb ümber nummerdada või tõlkida ja see on vestlus võrguomanikega, mitte konfiguratsiooni muudatus. Kattuvus on ainus kokkupõrge, kus aus vastus on, et disaini tuleb muuta.
Peatu siin, kui prefiksid kattuvad. Kõik hilisem selles kontrollnimekirjas eeldab, et need ei kattu.
Samm 3: vali eraldamismuster, mis püsib
Usaldusväärsed mustrid väldivad kahe kliendi käitamist sama marsruutimistabeli vastu. Üks klient split-tunneli poliitikaga, mis ulatub mõlemasse privaatvõrku on kõige lihtsam, eeldusel et sihtkohad ei kattu ja poliitika omanik nõustub. Virtuaalmasin või võrgu nimeruum on järgmine samm, sest kumbki saab oma tabeli ja oma resolveri.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
Nimeruum annab sama eraldatuse nagu virtuaalmasin ilma teise operatsioonisüsteemita, kuid sellel on karedad servad: tunneliseade tuleb sellesse liigutada ja rakendus tuleb käivitada selle sees. Eraldi füüsiline seade on sageli kõige vähem üllatav valik isikliku VPN-i jaoks haldatava töökliendi kõrval. Ühe tunneli virnastamine teise sisse ei ole eraldamismuster; sisemine lõpp-punkt peab jääma välise tunneli kaudu kättesaadavaks ja see lahendus lisab peale MTU- ja latentsusprobleemid.
Vali üks muster ja kirjuta üles, miks. Ühe rakenduse nimeruumi segamine ülejäänute split-tunneliga taasloob algse kokkupõrke raskemini silutavas vormis.
Samm 4: kontrolli mõlemat võrku samast seansist
Testi ühte ressurssi igas privaatvõrgus keskkonnast, kus rakendus tegelikult töötab, mitte oma kestast, kui rakendus töötab nimeruumi sees. Kontrolli väljundliidest, lahendatud aadressi ja vastusekoodi koos, sest edu ühes kolmest võib varjata ebaõnnestumist teistes. Korda pärast taaskäivitust, sest järjekord, milles kliendid käivituvad, otsustab, kes võidab. Just selle järjekorra unustavad inimesed üles kirjutada.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
Kirjuta üles kliendiversioonid, liidesed, resolveri olek ja iga võrgu prefiksid. Kui klient uueneb ja muudab oma marsruudikäitumist, on see kirje vahe viie minuti paranduse ja ülesehitamise vahel. Järgmine inimene ei jaga sinu mälu selle kohta, milline tunnel esimesena püsti tuli.
Kontrollnimekiri on täielik, kui suudad nimetada liidese, mis omab vaikeimarsruuti, resolveri, mida iga nimi kasutab, mustri, mis eraldab teise tunneli, ja ühe päringu tulemuse võrgu kohta pärast taaskäivitust. Kõik vähem on konfiguratsioon, mis täna juhuslikult töötab.