Мрежни именски простори Linux-а за VPN: шта не изолују
Именски простор помера интерфејсе, руте и сокете, а не датотеке или налоге. Ево шта VPN у сопственом netns покрива и одакле саобраћај још увек излази.
Покрените VPN унутар његовог сопственог именског простора, покрените тамо једну апликацију, и саобраћај ипак излази преко руте домаћина. Ништа није покварено: именски простор управља само процесима који у њега уђу, а цурење је дошло од процеса који никада није ушао. Интерфејси, адресе, руте, правила заштитног зида и сокети су оно што именски простор поседује. Датотеке, налози и услуге које већ раде нису, и одатле долази већина изненађења.
Шта именски простор поседује и где се сокет рађа
Померите интерфејс у именски простор и домаћин га губи; изградите тунел унутра и домаћин га не може видети. То је механизам VPN-а ограниченог на именски простор: уређај и руте ка њему живе у контексту до којег стижу само изабрани процеси. Домаћин задржава своју подразумевану руту, па све напољу остаје нетакнуто.
За WireGuard је контекст стварања једнако важан као тренутна локација: UDP сокет се везује у именском простору у којем је интерфејс створен, чак и након што се уређај премести негде другде. Од које табеле рутирања зависе шифровани пакети зависи од тог места рођења. Када сокет остане у контексту без руте до партнера, интерфејс тражи и руковање никада не излази. Проверите место његовог рођења, затим тренутну локацију.
Шта именски простор не изолује
Ништа овде не раздваја датотечне системе, налоге или тајне, и ниједна од тих граница не настаје зато што сте направили именски простор. Конфигурација резолвера је датотека, па процес унутра ипак може прочитати поставку која показује на резолвер домаћина и послати свој упит споља рутом коју то подразумева. Апликација која захтев предаје већ покренутом посреднику или системској услузи укључује процес у потпуно другом контексту. Оба су захтеви на које граница никада није била намењена да одговори.
Решење је датотека по именском простору у /etc/netns/<name>/resolv.conf, или bind mount припремљене датотеке, усмерена на резолвер доступан изнутра. Уређивање /etc/resolv.conf на домаћину не мења ништа од онога што именски простор види.
Смештање процеса је контрола
Изолација коју добијате је тачно изолација процеса које покренете унутра. Љуска покренута преко exec помоћника именског простора, и све што она створи, остаје унутра; десктоп апликација покренута из сесије домаћина не. Направите контекст, померите уређај, па докажите обе стране:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Прочитајте први wg show изнутра именског простора и други са домаћина, и очекујте да само један од њих наведе партнера. Ако оба то раде, уређај се никада није померио; ако ниједан, отишао је негде другде. Када је покретач менаџер услуга, датотека јединице је оно што треба уредити, а не пречица на радној површини. Јединица без поставке именског простора покреће демон у контексту домаћина и тихо поништава дизајн.
Тестирајте из контекста апликације
Извршите проверу са истим бинарним файлом и истим корисником које апликација користи, унутар именског простора. Укључите DNS и обе фамилије адреса, јер рута IPv6 на коју никада нисте помислили је чест излаз. Тест из ваше сопствене љуске доказује само да је ваша љуска изолована.
Затим извршите идентичну проверу на домаћину и потврдите да се одговори разликују: адреса тунела и предвиђени излаз унутра, рута домаћина и канцеларијски излаз напољу, и резолвер по имену. Именујте именске просторе по распоређивању, а не по протоколу, да скрипта за чишћење не помеша два од њих.
Прослеђивање, политика квара и чишћење
За мрежни пролаз свесно укључите прослеђивање и одлучите шта треба да се догоди када тунел падне. Именски простор не блокира руте које инсталирате унутра, па ће резервна рута ка домаћину бити коришћена ако је направите. То је политичка одлука и треба је записати пре него што је квар тестира.
Запишите називе именских простора, интерфејсе и чија је конфигурација, да чишћење уклони само оно што је распоређивање створило. Ресетовање мреже домаћина током враћања претвара чишћење у квар. Страница network_namespaces(7) је кратка и вреди је прочитати пре него што дизајнирате тај пут.