VPN үшін Linux желілік атау кеңістіктері: олар нені оқшауламайды
Атау кеңістігі интерфейстерді, маршруттарды және сокеттерді жылжытады, файлдарды немесе тіркелгілерді емес. Міне, VPN өз netns-інде нені қамтиды және трафик қайдан әлі де шығып кетеді.
VPN-ді өзінің атау кеңістігінің ішінде іске қосыңыз, сол жерде бір қосымшаны іске қосыңыз, ал трафик бәрібір хост маршрутымен шығады. Ешнәрсе бұзылмаған: атау кеңістігі тек оған кіретін процестерді басқарады, ал ағып кету ешқашан кірмеген процестен келді. Интерфейстер, мекенжайлар, маршруттар, брандмауэр ережелері және сокеттер — атау кеңістігі иеленетін нәрселер. Файлдар, тіркелгілер және әлдеқашан жұмыс істеп тұрған қызметтер олай емес, және тосынсыйлардың көбі осы жерден шығады.
Атау кеңістігі нені иеленеді және сокет қайда туады
Интерфейсті атау кеңістігіне жылжытыңыз — хост оны жоғалтады; ішінде туннель салыңыз — хост оны көре алмайды. Бұл атау кеңістігімен шектелген VPN тетігі: құрылғы және оған бағытталған маршруттар тек таңдалған процестер жете алатын контексте өмір сүреді. Хост өзінің әдепкі маршрутын сақтайды, сондықтан сырттағының бәрі қозғалмай қалады.
WireGuard үшін жасау контексті ағымдағы орын сияқты маңызды: UDP сокеті интерфейс жасалған атау кеңістігінде байланысады, құрылғы басқа жерге көшкеннен кейін де. Шифрланған пакеттер қай маршруттау кестесін ұстанатыны сол туған жерге байланысты. Сокет серіктеске маршруты жоқ контексте қалса, интерфейс іздейді және қол алысу ешқашан сыртқа шықпайды. Алдымен оның туған жерін, содан кейін ағымдағы орнын тексеріңіз.
Атау кеңістігі нені оқшауламайды
Мұнда ешнәрсе файлдық жүйелерді, тіркелгілерді немесе құпияларды бөлмейді, және бұл шекаралардың ешқайсысы атау кеңістігін жасағаныңыз үшін пайда болмайды. Резолвер конфигурациясы — файл, сондықтан ішіндегі процесс хост резолверіне нұсқайтын параметрді әлі де оқып, сұрауын сол білдіретін маршрутпен сыртқа жібере алады. Сұрауды әлдеқашан жұмыс істеп тұрған делдалға немесе жүйелік қызметке тапсыратын қосымша мүлдем басқа контекстегі процесті тартады. Екеуі де шекара жауап беруге ешқашан арналмаған сұраулар.
Шешім — /etc/netns/<name>/resolv.conf ішіндегі әр атау кеңістігіне арналған файл немесе дайындалған файлдың bind mount-ы, ол ішінен қолжетімді резолверге бағытталған. Хостта /etc/resolv.conf өңдеу атау кеңістігі көретін ешнәрсені өзгертпейді.
Процестерді орналастыру — бақылаудың өзі
Сіз алатын оқшаулау — дәл ішінде іске қосқан процестердің оқшаулауы. Атау кеңістігінің exec көмекшісі арқылы іске қосылған shell және оның туындатқанының бәрі ішінде қалады; хост сессиясынан іске қосылған жұмыс үстелі қосымшасы қалмайды. Контексті жасаңыз, құрылғыны жылжытыңыз, содан кейін екі жағын да дәлелдеңіз:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Бірінші wg show атау кеңістігінің ішінен, екіншісін хосттан оқыңыз және олардың тек біреуі ғана серіктесті тізімдейтінін күтіңіз. Екеуі де тізімдесе, құрылғы ешқашан жылжымаған; ешқайсысы тізімдемесе, ол басқа жерге кеткен. Іске қосқыш қызмет менеджері болса, өңделетін нәрсе — unit файлы, жұмыс үстелінің таңбашасы емес. Атау кеңістігі параметрі жоқ unit демонды хост контекстінде іске қосып, дизайнды үнсіз жояды.
Қосымша контекстінен сынаңыз
Тексеруді қосымша қолданатын сол бинармен және сол пайдаланушымен атау кеңістігінің ішінде орындаңыз. DNS пен екі мекенжай тобын да қосыңыз, өйткені сіз ойламаған IPv6 маршруты — шығудың кәдімгі жолы. Өз shell-іңізден жасалған сынақ тек shell-іңіз оқшауланғанын дәлелдейді.
Содан кейін сол тексеруді хостта орындап, жауаптардың өзгеше екеніне көз жеткізіңіз: ішінде туннель мекенжайы мен көзделген шығу, сыртта хост маршруты мен кеңсе шығуы, және резолвер атауы бойынша. Атау кеңістіктерін протоколға емес, орналастыруға қарай атаңыз, тазалау скрипті екеуін шатастырмас үшін.
Қайта бағыттау, ақау саясаты және тазалау
Шлюз үшін қайта бағыттауды әдейі қосыңыз және туннель құлағанда не болуы керектігін шешіңіз. Атау кеңістігі ішінде орнатқан маршруттарды бөгемейді, сондықтан хостқа қосалқы маршрут жасасаңыз, ол қолданылады. Бұл саяси шешім және оны үзіліс сынамас бұрын жазып қою керек.
Атау кеңістіктерінің атауларын, интерфейстерді және конфигурация кімге тиесілі екенін жазыңыз, тазалау тек орналастыру жасағанды жойсын. Кері қайтару кезінде хост желісін қалпына келтіру тазалауды үзіліске айналдырады. network_namespaces(7) беті қысқа және сол жолды жобаламас бұрын оқуға тұрарлық.