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.

Artigos relacionados