Мрежни именски простори на 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 одвнатре во именскиот простор и вториот од домаќинот, и очекувајте само еден од нив да го наведе партнерот. Ако двата го прават тоа, уредот никогаш не се преместил; ако ниту еден, тој заминал на друго место. Кога стартувачот е менаџер на услуги, unit датотеката е она што треба да се уреди, не кратенката на работната површина. Unit без поставката за именски простор го стартува демонот во контекстот на домаќинот и тивко го поништува дизајнот.
Тестирајте од контекстот на апликацијата
Извршете ја проверката со истиот бинарен файл и истиот корисник што ги користи апликацијата, внатре во именскиот простор. Вклучете DNS и двете адресни семејства, бидејќи рута IPv6 за која никогаш не сте размислувале е чест излез. Тестот од вашата сопствена шела докажува само дека вашата шела е изолирана.
Потоа извршете ја истата проверка на домаќинот и потврдете дека одговорите се разликуваат: адреса на тунелот и предвидениот излез внатре, рутата на домаќинот и канцеларискиот излез надвор, и резолверот по име. Именувајте ги именските простори според распоредувањето, а не според протоколот, за да не ги помеша скриптата за чистење две од нив.
Препраќање, политика при дефект и чистење
За порта, вклучете го препраќањето намерно и одлучете што треба да се случи кога тунелот ќе падне. Именскиот простор не блокира рути што ги инсталирате внатре, па резервна рута до домаќинот ќе се користи ако создадете таква. Тоа е политичка одлука и треба да биде запишана пред дефект да ја тестира.
Запишете ги имињата на именските простори, интерфејсите и чија е конфигурацијата, за чистењето да отстрани само она што го создаде распоредувањето. Ресетирањето на мрежата на домаќинот при враќање го претвора чистењето во дефект. Страницата network_namespaces(7) е кратка и вреди да се прочита пред да го дизајнирате тој пат.