Dvi žalios ryšio piktogramos atrodo kaip palyginimas ir dažniausiai tėra atsitiktinumas. Jei bandymo užklausa galėjo naudoti bet kurį iš dviejų tunelių, rezultatas geriausiu atveju apibūdina vieną jų, o blogiausiu – nė vieno. Kiekvienam stebėjimui suteikite tinklo kontekstą, numatytą paskirties vietą ir lūkestį, užrašytą prieš paleidžiant bandymą. Savarankiškai valdomame Linux kompiuteryje įvardytos tinklo vardų erdvės yra pigiausias būdas nusipirkti tą atskyrimą.

Dvi žalios lemputės nėra palyginimas

Vardų erdvė atskiria maršrutizavimo lenteles, sąsajas ir tinklo krūvos būseną, todėl vienoje pradėta užklausa negali tyliai pasiskolinti kito tunelio. Ko ji neatskiria, tai procesorius, fizinė kylanti linija ar pagrindiniame kompiuteryje veikiantis vardų sprendimo tarnyba. Būtent šiame paskutiniame tarpelyje dauguma šių bandymų nepastebimai žlunga. Paieška, kuri išeina iš vardų erdvės ir klausia pagrindinio kompiuterio sprendiko, grąžina atsakymą, neturintį jokio ryšio su bandomuoju tuneliu.

Ši procedūra daro prielaidą, kad yra dvi jau parengtos ir patvirtintos bandymų vardų erdvės, veikiantis išorinis ryšys ir palaikomi klientai. Ji nieko nesukuria, nieko neužregistruoja ir nepakeičia jokios konfigūracijos. Atskiros virtualios mašinos išlieka sąžiningas pasirinkimas, kai klientui reikia visos darbalaukio sesijos arba jis atsisako dirbti už jos ribų.

Užfiksuokite lūkestį prieš pirmą paleidimą

Kiekvienam kontekstui nuspręskite, kaip atrodo sėkmė: sprendiklis, paslaugos pavadinimas, laukiamas adresas ir elgsena, kurios reikia tuneliui nutrūkus. Laikykite šias suplanuotas reikšmes savo stulpelyje, nes įrašas, maišantis planą ir stebėjimą, yra fikcija su laiko žyma. Žemiau esantis kontrolinis sąrašas yra forma, kurios reikia įrašui, ir kiekviena eilutė turi būti užpildoma prieš pirmąjį prisijungimą.

TunnelOwnerClient interface inside the namespaceProof commandRequired on disconnect
vpn-athe identity that owns profile A, recorded by nameits own tun device, never the host'sip -n vpn-a -4 route get 10.55.10.20traffic stops; no host-side fallback
vpn-ba separate owner, even when both run on one boxits own tun device in its own namespaceip -n vpn-b -4 route get 10.55.20.20verified separately, never inferred from A

Sprendiklio laidai tame įraše nusipelno atskiros eilutės, nes tai laukas, kuris greičiausiai meluoja. Su vardų erdve susieti failai, tokie kaip /etc/netns/vpn-a/resolv.conf pasirodo įprastuose keliuose, kai komanda vykdoma vardų erdvėje, kaip aprašo iproute2 vardų erdvių žinynas, tačiau vardų tarnybos perjungimo konfigūracija ir bet kuris jos paleidžiamas vietinis sprendiklis vis dar gali nutempti paiešką atgal į pagrindinį kompiuterį.

Vienas tunelis vienu metu, kitas atjungtas

Prijunkite A per jo esamą savininką, kol B lieka išjungtas, tada iš administravimo konteksto patikrinkite politiką, maršrutus ir pasirinktą kelią. Trys iš žemiau esančių komandų skaito būseną; tik paskutinė susisiekia su vardų tarnyba, ir nė viena jų nesiunčia programos užklausos.

sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internal

Maršruto paieška atsako į hipotetinį klausimą apie paskirties vietą, todėl negali parodyti, kad paslauga priima srautą. Laikykite šiuos du įrodymų tipus atskiruose stulpeliuose, nes sveikas maršrutas šalia atmesto ryšio yra tikras ir dažnas rezultatas. Tada nusiųskite vieną nekenksmingą leistą užklausą tikrąja programa, paleista A kontekste kaip įprastas neturintis privilegijų naudotojas, su nepažeistu sertifikatų tikrinimu ir programos autentifikavimu, ir užrašykite rezultatą kartu su šaltinio adresu, kurį matė paslauga. Atjunkite A per jo savininką ir pakartokite visą bazinę liniją B atveju, pažymėdami kiekvieną konfigūracijos pakeitimą, kitaip dvi bazinės linijos nustos būti palyginamos.

Abu įjungti, paskui po vieną išjungti

Pastovi būsena yra lengvoji dalis. Kai abu tuneliai prijungti, pakartokite kiekvieno konteksto paiešką ir programos užklausą, tada nutraukite vieną tunelį ir patikrinkite kitą. Prijunkite iš naujo atvirkštine tvarka, kai pati prisijungimo tvarka yra klausimas.

sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20

Užfiksavimas išsprendžia ginčus, kurių programos rezultatas negali išspręsti: jis parodo, ar užklausa išėjo per sąsają, kurios tikėjotės, ar per ką nors visiškai kito. Kiekvienam perėjimui užrašykite savininko veiksmą, laiko žymą, maršruto rezultatą, vardo rezultatą ir programos rezultatą. Tada patikrinkite saugaus uždarymo reikalavimą paveiktoje vardų erdvėje, nes izoliacija nėra išjungiklis. Vardų erdvė laiko du tunelius atskirai; ji netrukdo nė vienam jų perduoti srauto, kai jo profilis sako, kad srautas turi sustoti.

Ką šis įrašas gali ir ko negali teigti

Sėkmė įrodo tuos stebėjimus šiai sąrangai, šiame pagrindiniame kompiuteryje, tuo metu. Ji nieko nesako apie du klientus, bendrai naudojančius vieną darbalaukio maršrutizavimo lentelę, ir nieko apie pralaidumą, kol abu tuneliai neša apkrovą. Tai atskiri klausimai su atskirais bandymais, o palyginimas yra tik tiek geras, kiek geras kontekstas, pridėtas prie kiekvienos eilutės.

Laikykite nesėkmes įraše šalia sėkmių, pažymėdami, kuris tunelis tuo metu buvo įjungtas. Švarus puslapis, slepiantis būseną matavimo metu, yra blogesnis už negražų, kuris ją rodo. Įrašą vėliau pakartotinai naudojamą daro kontekstas, o ne balas.

Du tunelius viename kompiuteryje galima sąžiningai palyginti, bet tik tiek kontekstų, kiek jų tikrai kontroliavote. Viskas, kas daugiau, yra noras su žalia piktograma šalia.

Susiję straipsniai