Kaks VPN-i ühes Linuxi masinas: katseta kumbagi eraldi tulemusi segamata
Kaks rohelist ikooni ei ole võrdlus. Pane kumbki tunnel oma nimeruumi, kirjuta ootus enne testi üles ja tõesta tee enne, kui tulemust usaldad.
Kaks rohelist ühenduseikooni näevad välja nagu võrdlus ja on tavaliselt juhus. Kui testpäring oleks võinud kasutada kumbagi tunnelit, kirjeldab tulemus parimal juhul ühte neist ja halvimal juhul mitte kumbagi. Anna igale vaatlusele võrgukontekst, kavatsetud sihtkoht ja ootus, mis on kirja pandud enne testi käivitamist. Ise hallatavas Linuxi masinas on nimetatud võrgu nimeruumid kõige odavam viis selle eralduse ostmiseks.
Kaks rohelist tuld ei ole võrdlus
Nimeruum eraldab marsruutimistabelid, liidesed ja võrgupinu oleku, nii et ühe sees alustatud päring ei saa vaikselt teise tunnelit laenata. Mida see ei eralda, on protsessor, füüsiline üleslink või hostis töötav nimeserveri deemon. Just selles viimases lüngas ebaõnnestub enamik neist testidest ilma, et keegi märkaks. Otsing, mis lahkub nimeruumist ja küsib hosti resolverilt, tagastab vastuse, millel pole testitava tunneliga mingit seost.
See protseduur eeldab kahte juba ettevalmistatud ja kinnitatud testnimeruumi, millel on toimiv väline ühenduvus ja toetatud kliendid. See ei loo midagi, ei registreeri midagi ega asenda ühtegi konfiguratsiooni. Eraldi virtuaalmasinad jäävad ausaks valikuks, kui klient vajab täielikku töölaua seanssi või keeldub väljaspool seda töötamast.
Kinnita ootus enne esimest käivitust
Otsusta iga konteksti puhul, milline näeb välja edu: resolver, teenuse nimi, oodatav aadress ja käitumine, mida tunnelilangemisel nõutakse. Hoia neid kavandatud väärtusi oma veerus, sest kirje, mis segab plaani ja vaatluse, on ajatempliga väljamõeldis. Allolev kontrollnimekiri on vorm, mida kirje vajab, ja iga rida peab olema täidetav enne esimest ühendust.
| Tunnel | Owner | Client interface inside the namespace | Proof command | Required on disconnect |
|---|---|---|---|---|
| vpn-a | the identity that owns profile A, recorded by name | its own tun device, never the host's | ip -n vpn-a -4 route get 10.55.10.20 | traffic stops; no host-side fallback |
| vpn-b | a separate owner, even when both run on one box | its own tun device in its own namespace | ip -n vpn-b -4 route get 10.55.20.20 | verified separately, never inferred from A |
Resolvri juhtmestik väärib selles kirjes omaette rida, sest see on väli, mis kõige tõenäolisemalt valetab. Nimeruumiga seotud failid, nagu /etc/netns/vpn-a/resolv.conf ilmuvad oma tavapärastel teedel, kui käsk töötab nimeruumi sees, nii nagu seda kirjeldab iproute2 nimeruumide viide, kuid nimeteenuse lüliti konfiguratsioon ja mis tahes kohalik resolver, mille see käivitab, võivad otsingu ikkagi hosti tagasi tõmmata.
Üks tunnel korraga, teine lahti ühendatud
Ühenda A selle olemasoleva omaniku kaudu, samal ajal kui B jääb alla, ja seejärel uurige halduskontekstist poliitikat, marsruute ja valitud teed. Kolm allolevat käsku loevad olekut; ainult viimane võtab ühendust nimeteenusega ja ükski neist ei saada rakenduse päringut.
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.internalMarsruudiotsing vastab hüpoteetilisele küsimusele sihtkoha kohta, seega ei saa see näidata, et teenus liiklust vastu võtab. Hoia neid kahte liiki tõendeid eraldi veergudes, sest terve marsruut kõrvuti tagasilükatud ühendusega on tõeline ja tavaline tulemus. Seejärel saada üks kahjutu lubatud päring päris rakendusega, mis käivitatakse A kontekstis selle tavalise mitteprivilegeeritud kasutajana, sertifikaadi valideerimine ja rakenduse autentimine puutumatuna, ja kirjuta tulemus üles koos lähteaadressiga, mida teenus nägi. Ühenda A selle omaniku kaudu lahti ja korda kogu baasjoon B jaoks, märkides iga tehtud konfiguratsioonimuudatuse, muidu ei ole kaks baasjoont enam võrreldavad.
Mõlemad üleval, siis üks korraga alla
Püsiv olek on lihtne osa. Kui mõlemad tunnelid on ühendatud, korda iga konteksti otsingut ja rakendusepäringut, seejärel katkesta üks tunnel ja kontrolli teist. Ühenda uuesti vastupidises järjekorras, kui ühendamise järjekord ise on küsimus.
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.20Püüdmine lahendab vaidlusi, mida rakenduse tulemus lahendada ei suuda: see näitab, kas päring väljus liidesest, mida ootasid, või millestki hoopis muust. Iga ülemineku kohta kirjuta üles omaniku tegevus, ajatempel, marsruudi tulemus, nime tulemus ja rakenduse tulemus. Seejärel kontrolli turvalise sulgemise nõuet mõjutatud nimeruumi sees, sest isolatsioon ei ole hädaseiskaja. Nimeruum hoiab kahte tunnelit lahus; see ei takista kumbagi neist liiklust kandmast, kui selle profiil ütleb, et liiklus peab seisma jääma.
Mida see kirje saab ja ei saa väita
Läbiminek tõestab neid vaatlusi selle paigutuse jaoks, selles hostis, sel ajal. See ei ütle midagi kahe kliendi kohta, kes jagavad üht töölaua marsruutimistabelit, ega läbilaskevõime kohta, kui mõlemad tunnelid koormust kannavad. Need on eraldi küsimused eraldi testidega ja võrdlus on ainult nii hea kui igale reale lisatud kontekst.
Hoia ebaõnnestumised kirjes edusammude kõrval, märgistatud sellega, milline tunnel tol hetkel üleval oli. Puhas leht, mis varjab mõõtmise aegset olekut, on hullem kui inetu, mis seda näitab. Kirje hiljem taaskasutatavaks teeb kontekst, mitte hinne.
Kahte tunnelit ühes masinas saab ausalt võrrelda, kuid ainult nii paljudes kontekstides, kui paljusid sa tegelikult kontrollisid. Kõik sellest enam on soov, mille kõrval on roheline ikoon.