Dvě laboratoře mohou modelovat stejnou topologii VPN a selhat zcela odlišnými způsoby: jedna žije v síťových jmenných prostorech, druhá na vlastních trasách hostitele. Verze s jmennými prostory drží každé rozhraní, trasu i socket v kontextu, který můžete smazat, zatímco verze s hostitelem startuje rychleji a zanechává za sebou stav. Právě tento zbytkový stav dělá druhou laboratoř o měsíc později těžko opakovatelnou. Porovnejte nejdřív úklid, protože rozhoduje o tom, zda experiment zvládnete dvakrát.

Dva způsoby, jak postavit stejnou laboratoř, a kdy který vyhrává

V laboratoři s trasami hostitele přidáte tunelové rozhraní a trasy do stroje, na kterém pracujete, takže experiment sdílí osud s vaším shellem, vaším správcem balíčků a každým dalším připojením. V laboratoři s jmennými prostory dostane každá role vlastní zásobník rozhraní, adres, tras a socketů a smazání jmenného prostoru odstraní všechno. Ani jeden model není správnější, protože odpovídají na různé otázky. Zvolte jmenné prostory, když je tématem routing a forwarding, a laboratoř s hostitelem, když je tématem to, jak se integruje jeden desktopový klient.

AspectNamespace labHost-route lab
IsolationFull stack per roleShares the host stack
CleanupDelete named namespacesManual route and rule removal
RealismStrong for routingNeeded for GUI clients

Míchat obojí je obvyklá chyba: laboratoř s jmennými prostory testovaná proti klientovi pouze na hostiteli neprokazuje nic o žádném ze dvou uspořádání. Rozhodněte, na kterou otázku se ptáte, než vytvoříte první spojení.

Jeden kontext na roli, spojený záměrně

Vytvořte jeden jmenný prostor na roli a přesuňte každý konec každého veth páru do kontextu, který ho vlastní. První čtyři příkazy stačí k tomu, abyste viděli tvar:

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 client

Dejte laboratoři rozsahy, které se s ničím na hostiteli nepřekrývají, a před začátkem si zapište, který jmenný prostor vlastní kterou adresu. Fungující laboratoř potřebuje dvě oddělené cesty: vnější, aby se VPN endpoint dostal ke svému protějšku, a zpáteční cestu pro chráněný zdroj. Modelujte je jako dvě rozhodnutí, protože laboratoř, která staví jen odchozí polovinu, projde testem navázání spojení a selže v testu aplikace.

Role forwardingu je místo, kde laboratoře začnou být zajímavé

Jedna role musí forwardovat, což znamená povolit forwarding uvnitř tohoto jmenného prostoru a přidat pravidlo, které návrh potřebuje. Stav forwardingu je pro každý jmenný prostor, takže nastavení hostitele je pro laboratoř irelevantní a nastavení laboratoře neprosakuje ven, jak popisuje dokumentace k síťovým jmenným prostorům. WireGuard dokumentuje, že rozhraní a jeho vnější socket mohou žít v různých jmenných prostorech, což je užitečný trik a vynikající způsob, jak se zmást. Nepředpokládejte, že přesunutí rozhraní přesune každou část spojení stejně.

Zkontrolujte počítadlo forwardingu po testovacím paketu, protože pravidlo, které nikdy neodpovídalo, a pravidlo, které zahodilo, vypadají v routovací tabulce stejně. Rozdělují je jen počítadla.

Zaznamenejte výchozí stav a pak rozbijte jednu trasu

Začněte záznamem toho, co existuje, s kontextem napsaným u každého řádku. Přečtěte jmenné prostory, pak trasu, kterou by testovací cíl uvnitř jednoho z nich prošel, pak počítadla na spoji, který ji nese:

ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-g

Třetí příkaz je ten, který lidé přeskakují, a právě tam žijí důkazy: počítadla zahozených a chyb vám řeknou, zda paket vůbec dorazil k roli forwardingu. Zachyťte stejné tři pohledy po změně a nechte difem být důkaz, ne vaše paměť. Pak rozbijte přesně jednu věc, buď smazáním trasy, nebo přidáním pravidla odmítnutí na cestě forwardingu, a potvrďte symptom, který jste předpověděli: dokončené navázání spojení bez odpovědi, nebo selhání překladu jmen místo vypršení času. Laboratoř, která ukazuje jen úspěch, naučí velmi málo.

Úklid je to, co dělá další běh opakovatelným

Držte úklid omezený na zdroje, které jste pojmenovali, protože plošný reset firewallu nebo odstranění trasy hostitele není reprodukovatelnost, ale druhý incident. Uložte topologii, přesné příkazy a pozorování, která jste očekávali, aby další běh reprodukoval stejnou poruchu místo hádání, který kontext držel předchozí stav. Bez tohoto záznamu je laboratoř příběh, ne postup.

Používejte pro laboratoř lokálně vygenerované přihlašovací údaje a držte produkční účty mimo sdílené příklady. Pak smažte každý jmenný prostor a potvrďte, že pohled na hostitele je nezměněný, což je celý důvod pro volbu tohoto modelu. Laboratoř, kterou nelze čistě odstranit, je změna hostitele s kroky navíc.

Související články