Две лаборатории могат да моделират същата VPN топология и да се провалят по напълно различни начини: едната живее в мрежови пространства от имена, другата — върху собствените маршрути на хоста. Версията с пространства от имена държи всеки интерфейс, маршрут и сокет в контекст, който можете да изтриете, докато версията с хоста стартира по-бързо и оставя състояние след себе си. Именно това остатъчно състояние прави втората лаборатория трудна за повторение месец по-късно. Сравнете първо почистването, защото то решава дали можете да проведете експеримента два пъти.

Два начина да построите същата лаборатория и кога всеки печели

В лаборатория с маршрути на хоста добавяте тунелен интерфейс и маршрути към машината, на която работите, така че експериментът дели съдба с вашия shell, вашия мениджър на пакети и всяка друга връзка. В лаборатория с пространства от имена всяка роля получава свой собствен стек от интерфейси, адреси, маршрути и сокети, а изтриването на пространството от имена премахва всичко това. Нито един модел не е по-правилен, защото те отговарят на различни въпроси. Изберете пространства от имена, когато темата е маршрутизация и препращане, и лаборатория с хоста, когато темата е как се интегрира един клиент за работен плот.

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

Смесването на двете е обичайната грешка: лаборатория с пространства от имена, тествана срещу клиент само на хоста не доказва нищо за нито една от двете подредби. Решете какъв въпрос задавате, преди да създадете първата връзка.

Един контекст на роля, свързани нарочно

Създайте едно пространство от имена на роля и преместете всеки край на всяка veth двойка в контекста, който го притежава. Първите четири команди са достатъчни, за да видите формата:

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

Дайте на лабораторията диапазони, които не се застъпват с нищо на хоста, и запишете преди началото кое пространство от имена притежава кой адрес. Работещата лаборатория се нуждае от два отделни пътя: външен, за да стигне VPN крайната точка до своя партньор, и обратен път за защитавания ресурс. Моделирайте ги като две решения, защото лаборатория, която изгражда само изходящата половина, минава тест за ръкостискане и се проваля на тест за приложение.

Ролята за препращане е мястото, където лабораториите стават интересни

Една роля трябва да препраща, което означава да включите препращането в това пространство от имена и да добавите правилото, което дизайнът изисква. Състоянието на препращането е за всяко пространство от имена, така че настройката на хоста е без значение за лабораторията, а настройката на лабораторията не изтича навън, както описва документацията за мрежови пространства от имена. WireGuard документира, че интерфейс и неговият външен сокет могат да живеят в различни пространства от имена, което е полезен трик и отличен начин да се объркате. Не приемайте, че преместването на интерфейс премества всяка част от връзката по идентичен начин.

Проверете брояча за препращане след тестов пакет, защото правило, което никога не е съвпадало, и правило, което е отхвърлило, изглеждат еднакво в таблицата с маршрути. Само броячите ги различават.

Запишете базова линия, после счупете един маршрут

Започнете със записване на това, което съществува, с контекста до всеки ред. Прочетете пространствата от имена, после маршрута, който тестова дестинация би поела в едно от тях, после броячите на връзката, която го носи:

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

Третата команда е тази, която хората пропускат, и там живеят доказателствата: броячите за отхвърлени и грешки ви казват дали пакетът е стигнал до ролята за препращане изобщо. Запишете същите три изгледа след промяна и оставете разликата да бъде доказателството, а не споменът ви за нея. После счупете точно едно нещо — или като изтриете маршрут, или като добавите правило за отказ по пътя за препращане — и потвърдете симптома, който предсказахте: завършено ръкостискане без отговор или неуспешно разрешаване на име вместо изтичане на времето. Лаборатория, която демонстрира само успех, учи много малко.

Почистването прави следващото пускане повторяемо

Дръжте почистването ограничено до ресурсите, които сте именували, защото цялостно нулиране на защитна стена или премахване на маршрут на хоста не е възпроизводимост, а втори инцидент. Запазете топологията, точните команди и наблюденията, които сте очаквали, за да възпроизведе следващото пускане същата повреда, вместо да гадае кой контекст е държал предишното състояние. Без този запис лабораторията е история, а не процедура.

Използвайте генерирани локално идентификационни данни за лабораторията и дръжте производствените акаунти далеч от споделени примери. После изтрийте всяко пространство от имена и потвърдете, че изгледът на хоста е непроменен, което е цялата причина да изберете този модел. Лаборатория, която не можете да премахнете чисто, е промяна на хоста с допълнителни стъпки.

Подобни статии