Тестирајте VPN рутирање во именски простори без допирање на рутите на домаќинот
Три симулирани улоги, три изолирани контексти и еден veth по врска. Споредете лабораторија со именски простори со лабораторија со рути на домаќинот пред да го допрете домаќинот.
Две лаборатории можат да ја моделираат истата VPN топологија и да не успеат на сосема различни начини: едната живее во мрежни именски простори, другата на сопствените рути на домаќинот. Верзијата со именски простори ја чува секоја интерфејса, рута и сокет во контекст што можете да го избришете, додека верзијата со домаќин стартува побрзо и остава состојба зад себе. Токму таа преостаната состојба е причината зошто втората лабораторија е тешка за повторување еден месец подоцна. Прво споредете го чистењето, бидејќи тоа одлучува дали можете да го извршите експериментот двапати.
Два начина да се изгради истата лабораторија и кога кој победува
Во лабораторија со рути на домаќинот додавате тунелска интерфејса и рути на машината на која работите, така што експериментот ја дели судбината со вашата shell, вашиот менаџер на пакети и секоја друга врска. Во лабораторија со именски простори секоја улога добива свој сопствен стек од интерфејси, адреси, рути и сокети, а бришењето на именскиот простор го отстранува сето тоа. Ниту еден модел не е поправен, бидејќи тие одговараат на различни прашања. Изберете именски простори кога темата е рутирање и проследување, и лабораторија со домаќин кога темата е како се интегрира еден десктоп клиент.
| 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 |
Мешањето на двете е вообичаената грешка: лабораторија со именски простори тестирана само против клиент на домаќинот не докажува ништо за ниту еден од двата распореди. Одлучете кое прашање го поставувате пред да ја создадете првата врска.
Еден контекст по улога, намерно поврзани
Создадете еден именски простор по улога и преместете го секој крај од секој 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Третата команда е онаа што луѓето ја прескокнуваат, и токму таму живеат доказите: бројачите за отфрлени и грешки ви кажуваат дали пакетот воопшто стигнал до улогата за проследување. Запишете ги истите три погледи по промена, и дозволете diff да биде доказот наместо вашето сеќавање. Потоа скршете точно едно нешто, или со бришење на рута или со додавање на правило за одбивање на патеката за проследување, и потврдете го симптомот што го предвидовте: завршено ракување без одговор или неуспех при резолуција на име наместо истекување на времето. Лабораторија што прикажува само успех учи многу малку.
Чистењето е она што го прави следното извршување повторливо
Држете го чистењето ограничено на ресурсите што ги именувавте, бидејќи целосно ресетирање на огнениот ѕид или отстранување на рута на домаќинот не е повторливост, тоа е втор инцидент. Зачувајте ја топологијата, точните команди и набљудувањата што ги очекувавте, за следното извршување да го репродуцира истиот дефект наместо да погодува во кој контекст била претходната состојба. Без тој запис лабораторијата е приказна, а не процедура.
Користете локално генерирани пристапни податоци за лабораторијата и држете ги продукциските сметки подалеку од споделени примери. Потоа избришете го секој именски простор и потврдете дека погледот на домаќинот е непроменет, што е целата причина да се избере овој модел. Лабораторија што не можете чисто да ја отстраните е промена на домаќинот со дополнителни чекори.