Con ip netns exec puede ejecutar un comando en un espacio de nombres de red personalizado, pero ¿hay alguna forma de ejecutar un comando en el espacio de nombres predeterminado?
Por ejemplo, después de ejecutar estos dos comandos:
sudo ip netns add test_ns
sudo ip netns exec test_ns bash
¿Cómo puede el bash recién creado ejecutar programas en el espacio de nombres de red predeterminado? No hay ip netns exec default ni nada similar por lo que he encontrado.
Mi escenario es:
Quiero ejecutar un servidor SSH en un espacio de nombres de red separado (para que el resto del sistema no esté al tanto de la conexión de red, ya que el sistema se usa para las pruebas de red), pero quiero poder ejecutar programas en el espacio de nombres de red predeterminado a través de La conexión SSH.
Lo que he descubierto hasta ahora:
Los espacios de nombres de red creados se enumeran como archivos en / var / run / netns (pero no hay ningún archivo para el espacio de nombres predeterminado)
El código exec de ip netns se puede encontrar aquí: http://git.kernel.org/cgit/linux/kernel/git/shemminger/iproute2.git/tree/ip/ipnetns.c#n132 - No he entendido todo que está haciendo todavía, pero no parece muy prometedor.
ip netns identifica $$ según lo sugerido por Howto query y cambia el espacio de nombres de red en linux? no devuelve nada cuando está en el espacio de nombres de red predeterminado
nsenter -t 1 -n
pero creó un nuevo proceso igual queip netns exec
y no cambió el espacio de nombres del proceso actual.Descubrí que puede volver al espacio de nombres de red predeterminado con dos comandos simples:
Este método obviamente supone que puede ver procesos fuera de su propio espacio de nombres a través del
proc
sistema de archivos. Si también está en un espacio de nombres PID separado, volver al espacio de nombres predeterminado no es tan simple.Los comandos anteriores se probaron en Ubuntu 14.04. No sé si hay algo de distribución específica sobre el enfoque.
fuente
mount --bind
lugar de hacerloln -s
, ya que significa que elip
comando también puede administrarlo (ip básicamente se monta, se une a estos archivos de espacio de nombres para configurar espacios de nombres persistentes)."ln -s / proc / 1 / ns / net / var / run / netns / default" <----- No se recomienda en absoluto.
El contador del código que genera el "show de ip netns"
si tiene un shell bash exec, simplemente exista fuera del bash, salga.
Si tiene ssh a una red, entonces ssh a la interfaz de la ns predeterminada y haga lo que necesita hacer allí.
Como último recurso, el ln es como el anterior, pero sugeriría eliminarlo tan pronto como se haga, y antes de que ocurran cambios en cualquier ns. De lo contrario, el contador se dañará y causará problemas.
fuente
Puede obtener la forma pid haciendo 'ps aux' o incluso una parte superior si lo desea.
Personalmente, siempre hago ssh al espacio de nombres principal, luego siempre puedo volver al valor predeterminado escribiendo exit y luego volviendo a ingresar el espacio de nombres si es necesario.
fuente