Testirajte VPN rutiranje u imenskim prostorima bez diranja ruta hosta
Tri simulirane uloge, tri izolirana konteksta i jedan veth po vezi. Uporedite laboratoriju s imenskim prostorima i laboratoriju s rutama hosta prije nego što dirnete host.
Dvije laboratorije mogu modelirati istu VPN topologiju i pasti na potpuno različite načine: jedna živi u mrežnim imenskim prostorima, druga na vlastitim rutama hosta. Verzija s imenskim prostorima drži svaki interfejs, rutu i socket u kontekstu koji možete izbrisati, dok verzija s hostom brže starta i ostavlja stanje za sobom. To zaostalo stanje razlog je zašto je drugu laboratoriju teško ponoviti mjesec dana kasnije. Prvo uporedite čišćenje, jer ono odlučuje možete li eksperiment izvesti dvaput.
Dva načina da se izgradi ista laboratorija i kada koji pobjeđuje
U laboratoriji s rutama hosta dodajete tunelski interfejs i rute na mašinu na kojoj radite, pa eksperiment dijeli sudbinu s vašim shellom, vašim upraviteljem paketa i svakom drugom vezom. U laboratoriji s imenskim prostorima svaka uloga dobija vlastiti stog interfejsa, adresa, ruta i socketa, a brisanje imenskog prostora uklanja sve to. Nijedan model nije ispravniji, jer odgovaraju na različita pitanja. Odaberite imenske prostore kada je tema rutiranje i prosljeđivanje, a laboratoriju s hostom kada je tema kako se integrira jedan desktop klijent.
| Aspect | Namespace lab | Host-route lab |
|---|---|---|
| Isolation | Full stack per role | Shares the host stack |
| Cleanup | Delete named namespaces | Manual route and rule removal |
| Realism | Strong for routing | Needed for GUI clients |
Miješanje dvaju je uobičajena greška: laboratorija s imenskim prostorima testirana protiv klijenta samo na hostu ne dokazuje ništa ni o jednom od dva rasporeda. Odlučite koje pitanje postavljate prije nego što stvorite prvu vezu.
Jedan kontekst po ulozi, namjerno povezan
Stvorite jedan imenski prostor po ulozi i premjestite svaki kraj svakog veth para u kontekst koji ga posjeduje. Prve četiri komande dovoljne su da vidite oblik:
ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns clientDajte laboratoriji raspone koji se ni s čim na hostu ne preklapaju i zapišite prije početka koji imenski prostor posjeduje koju adresu. Laboratorija koja radi treba dva odvojena puta: vanjski da VPN endpoint stigne do svog para, i povratni put za resurs koji se štiti. Modelirajte ih kao dvije odluke, jer laboratorija koja gradi samo odlaznu polovinu prolazi test rukovanja i pada na testu aplikacije.
Uloga prosljeđivanja je mjesto gdje laboratorije postaju zanimljive
Jedna uloga mora prosljeđivati, što znači omogućiti prosljeđivanje unutar tog imenskog prostora i dodati pravilo koje dizajn traži. Stanje prosljeđivanja je po imenskom prostoru, pa je postavka hosta nevažna za laboratoriju, a postavka laboratorije ne curi van, kako opisuje dokumentacija o mrežnim imenskim prostorima. WireGuard dokumentuje da interfejs i njegov vanjski socket mogu živjeti u različitim imenskim prostorima, što je koristan trik i odličan način da zbunite sebe. Ne pretpostavljajte da premještanje interfejsa premješta svaki dio veze na isti način.
Provjerite brojač prosljeđivanja nakon testnog paketa, jer pravilo koje nikada nije odgovaralo i pravilo koje je odbacilo izgledaju identično u tablici ruta. Samo ih brojači razdvajaju.
Zabilježite osnovnu liniju, pa slomite jednu rutu
Počnite bilježenjem onoga što postoji, s kontekstom napisanim pored svakog reda. Pročitajte imenske prostore, zatim rutu koju bi testno odredište prešlo unutar jednog od njih, zatim brojače na vezi koja ga nosi:
ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-gTreća komanda je ona koju ljudi preskaču i tu žive dokazi: brojači odbačenih i grešaka govore vam je li paket uopće stigao do uloge prosljeđivanja. Zabilježite ista tri prikaza nakon promjene i neka razlika bude dokaz, a ne vaše sjećanje na nju. Zatim slomite tačno jednu stvar, bilo brisanjem rute ili dodavanjem pravila odbijanja na putu prosljeđivanja, i potvrdite simptom koji ste predvidjeli: završeno rukovanje bez odgovora ili neuspješno razrješavanje imena umjesto isteka vremena. Laboratorija koja pokazuje samo uspjeh nauči vrlo malo.
Čišćenje je ono što čini sljedeće pokretanje ponovljivim
Držite čišćenje ograničeno na resurse koje ste imenovali, jer općenito resetiranje vatrozida ili uklanjanje rute hosta nije ponovljivost, to je drugi incident. Sačuvajte topologiju, tačne komande i zapažanja koja ste očekivali, da bi sljedeće pokretanje reproduciralo isti kvar umjesto da nagađa koji je kontekst držao prethodno stanje. Bez tog zapisa laboratorija je priča, a ne procedura.
Koristite lokalno generirane vjerodajnice za laboratoriju i držite produkcijske račune podalje od zajedničkih primjera. Zatim izbrišite svaki imenski prostor i potvrdite da je prikaz hosta nepromijenjen, što je cijeli razlog za odabir ovog modela. Laboratorija koju ne možete čisto ukloniti je promjena hosta s dodatnim koracima.