Хост маршруттарына тимей-ақ атау кеңістіктерінде 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 болсын. Содан кейін дәл бір нәрсені бұзыңыз, не маршрутты жою арқылы, не қайта бағыттау жолына бас тарту ережесін қосу арқылы, және болжаған симптомды растаңыз: жауапсыз аяқталған қол алысу немесе тайм-аут орнына атауды шешу сәтсіздігі. Тек сәттілікті көрсететін зертхана өте аз үйретеді.
Тазалау — келесі жүгірісті қайталанатын ететін нәрсе
Тазалауды өзіңіз атаған ресурстармен шектеп ұстаңыз, өйткені жалпы өрт қабырғасын қайта орнату немесе хост маршрутын жою қайталанымдылық емес, бұл екінші оқиға. Топологияны, нақты пәрмендерді және күткен бақылауларды сақтаңыз, келесі жүгіріс алдыңғы күй қай контексте болғанын болжаудың орнына сол ақауды қайта шығарсын. Бұл жазбасыз зертхана — процедура емес, әңгіме.
Зертхана үшін жергілікті жасалған тіркелгі деректерін пайдаланыңыз және өндірістік тіркелгілерді ортақ мысалдардан алыс ұстаңыз. Содан кейін әр атау кеңістігін жойып, хост көрінісінің өзгермегенін растаңыз, бұл осы модельді таңдаудың бүкіл себебі. Таза жоя алмайтын зертхана — қосымша қадамдары бар хост өзгерісі.