Inicieu la VPN dins del seu propi espai de noms, executeu-hi una aplicació i el trànsit encara surt per la ruta de l’amfitrió. No hi ha res trencat: l’espai de noms només governa els processos que hi entren, i la fuita va venir d’un que no hi va entrar mai. Interfícies, adreces, rutes, regles de tallafocs i sockets són el que posseeix l’espai de noms. Els fitxers, els comptes i els serveis ja en marxa no ho són, i d’aquí vénen la majoria de les sorpreses.

Què posseeix l’espai de noms i on neix el socket

Moveu una interfície a un espai de noms i l’amfitrió la perd; construïu-hi un túnel i l’amfitrió no el pot veure. Aquest és el mecanisme d’una VPN limitada a un espai de noms: el dispositiu i les rutes que hi apunten viuen en un context només abastable pels processos triats. L’amfitrió conserva la ruta per defecte, així que tot el de fora queda intacte.

Per a WireGuard, el context de creació importa tant com la ubicació actual: el socket UDP es lliga a l’espai de noms on es va crear la interfície, fins i tot després que el dispositiu es mogui a un altre lloc. Quina taula d’encaminament segueixen els paquets xifrats depèn d’aquell lloc de naixement. Quan el socket roman en un context sense ruta cap al parell, la interfície consulta i l’encaixada de mans no surt mai. Comproveu el lloc de naixement i després la ubicació actual.

Què no aïlla un espai de noms

Res d’aquí no separa sistemes de fitxers, comptes ni secrets, i cap d’aquestes fronteres no apareix pel fet d’haver creat un espai de noms. La configuració del resolutor és un fitxer, així que un procés de dins encara pot llegir un paràmetre que apunta al resolutor de l’amfitrió i enviar la seva consulta per la ruta que això impliqui. Una aplicació que passa la petició a un intermediari o servei del sistema ja en marxa implica un procés en un context completament diferent. Totes dues són peticions que la frontera mai no havia de respondre.

La solució és un fitxer per espai de noms a /etc/netns/<name>/resolv.conf, o una bind mount d’un fitxer preparat, apuntat a un resolutor abastable des de dins. Editar /etc/resolv.conf a l’amfitrió no canvia res del que veu l’espai de noms.

La col·locació dels processos és el control

L’aïllament que obteniu és exactament l’aïllament dels processos que inicieu a dins. Un shell iniciat pel helper exec de l’espai de noms, i tot el que genera, es queda a dins; una aplicació d’escriptori llançada des de la sessió de l’amfitrió, no. Creeu el context, moveu el dispositiu i després demostreu les dues bandes:

ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show

Llegiu el primer wg show des de dins de l’espai de noms i el segon des de l’amfitrió, i espereu que només un d’ells llisti el parell. Si tots dos ho fan, el dispositiu no s’ha mogut mai; si cap dels dos, ha anat a un altre lloc. Quan el llançador és un gestor de serveis, el fitxer d’unitat és el que cal editar, no la drecera de l’escriptori. Una unitat sense el paràmetre d’espai de noms inicia el dimoni en el context de l’amfitrió i desfà el disseny en silenci.

Proveu des del context de l’aplicació

Executeu la comprovació amb el mateix binari i el mateix usuari que fa servir l’aplicació, dins de l’espai de noms. Incloeu DNS i les dues famílies d’adreces, perquè una ruta IPv6 que no heu considerat és una via de sortida habitual. Una prova des del vostre propi shell només demostra que el vostre shell està aïllat.

Després executeu la comprovació idèntica a l’amfitrió i confirmeu que les respostes difereixen: adreça del túnel i sortida prevista a dins, ruta de l’amfitrió i sortida de l’oficina a fora, i el resolutor pel nom. Anomeneu els espais de noms pel desplegament i no pel protocol, perquè un script de neteja no en confongui dos.

Reenviament, política de fallada i neteja

Per a una passarel·la, activeu el reenviament deliberadament i decidiu què ha de passar quan caigui el túnel. Un espai de noms no bloqueja les rutes que hi instal·leu, així que s’utilitzarà una ruta de reserva cap a l’amfitrió si en createu una. És una decisió de política i s’hauria d’escriure abans que una caiguda la posi a prova.

Anoteu els noms dels espais de noms, les interfícies i qui posseeix la configuració, perquè la neteja elimini només el que va crear el desplegament. Restablir la xarxa de l’amfitrió durant una reversió converteix una neteja en una caiguda. La network_namespaces(7) és una pàgina curta i val la pena llegir-la abans de dissenyar aquest camí.

Articles relacionats