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) бети кыска жана ошол жолду долбоорлоодон мурун окууга татыктуу.