Espazos de nomes de rede de Linux para unha VPN: que non illan
Un espazo de nomes move interfaces, rutas e sockets, non ficheiros nin contas. Aquí ves que cobre unha VPN no seu propio netns e por onde segue escapando o tráfico.
Inicie a VPN dentro do seu propio espazo de nomes, execute alí unha aplicación e o tráfico segue saíndo pola ruta do host. Nada está roto: o espazo de nomes só goberna os procesos que entran nel, e a fuga veu dun que nunca o fixo. Interfaces, enderezos, rutas, regras de devasas e sockets son o que posúe o espazo de nomes. Os ficheiros, as contas e os servizos xa en marcha non o son, e de aí veñen a maioría das sorpresas.
Que posúe o espazo de nomes e onde nace o socket
Mova unha interface a un espazo de nomes e o host pérdela; construa un túnel dentro e o host non pode velo. Ese é o mecanismo dunha VPN limitada a un espazo de nomes: o dispositivo e as rutas que apuntan a el viven nun contexto ao que só chegan os procesos escollidos. O host conserva a súa ruta predeterminada, así que todo o de fóra queda intacto.
En WireGuard, o contexto de creación importa tanto como a localización actual: o socket UDP lígase ao espazo de nomes onde se creou a interface, mesmo despois de que o dispositivo se mova a outro sitio. De que táboa de encamiñamento dependen os paquetes cifrados depende dese lugar de nacemento. Cando o socket queda nun contexto sen ruta cara ao par, a interface consulta e a aperta de mans nunca sae. Comprobe o seu lugar de nacemento e despois a súa localización actual.
Que non illa un espazo de nomes
Nada disto separa sistemas de ficheiros, contas nin segredos, e ningunha desas fronteiras aparece porque crease un espazo de nomes. A configuración do resolutor é un ficheiro, así que un proceso de dentro aínda pode ler un axuste que apunta ao resolutor do host e enviar a súa consulta pola ruta que iso implique. Unha aplicación que entrega a petición a un intermediario ou servizo do sistema xa en marcha involucra un proceso nun contexto completamente distinto. Ambas son peticións que a fronteira nunca debería responder.
A solución é un ficheiro por espazo de nomes en /etc/netns/<name>/resolv.conf, ou un bind mount dun ficheiro preparado, apuntado a un resolutor accesible desde dentro. Editar /etc/resolv.conf no host non cambia nada do que ve o espazo de nomes.
A colocación dos procesos é o control
O illamento que obtén é exactamente o illamento dos procesos que inicia dentro. Un shell iniciado mediante o axudante exec do espazo de nomes, e todo o que xera, queda dentro; unha aplicación de escritorio lanzada desde a sesión do host, non. Cree o contexto, mova o dispositivo e logo demostre ambos os lados:
ip netns add vpn1
ip link set wg0 netns vpn1
ip netns exec vpn1 wg show
wg show
Lea o primeiro wg show desde dentro do espazo de nomes e o segundo desde o host, e espere que só un deles liste o par. Se ambos o fan, o dispositivo nunca se moveu; se ningún, foise a outro sitio. Cando o lanzador é un xestor de servizos, o ficheiro de unidade é o que hai que editar, non o atallo do escritorio. Unha unidade sen o axuste de espazo de nomes inicia o demonio no contexto do host e desfai o deseño en silencio.
Probe desde o contexto da aplicación
Execute a comprobación co mesmo binario e o mesmo usuario que usa a aplicación, dentro do espazo de nomes. Inclúa DNS e ambas as familias de enderezos, porque unha ruta IPv6 que nunca considerou é unha saída habitual. Unha proba desde o seu propio shell só demostra que o seu shell está illado.
Despois execute a comprobación idéntica no host e confirme que as respostas difiren: enderezo do túnel e saída prevista dentro, ruta do host e saída da oficina fóra, e o resolutor por nome. Nomee os espazos de nomes polo despregamento e non polo protocolo, para que un script de limpeza non confunda dous deles.
Reenvío, política de fallo e limpeza
Para unha pasarela, active o reenvío a propósito e decida que debe ocorrer cando caia o túnel. Un espazo de nomes non bloquea as rutas que instale dentro, así que se usará unha ruta de reserva cara ao host se crea unha. É unha decisión de política e debería escribirse antes de que unha caída a poña a proba.
Anote os nomes dos espazos de nomes, as interfaces e quen posúe a configuración, para que a limpeza elimine só o que creou o despregamento. Restablecer a rede do host durante unha reversión converte unha limpeza nunha caída. A páxina network_namespaces(7) é curta e merece lerse antes de deseñar ese camiño.