Puede asignar diferentes configuraciones de red a un proceso utilizando espacios de nombres de red de Linux . En teoría, debería ser posible configurar PAM * para configurar a cada usuario en su propio espacio de nombre de red separado, pero es más fácil iniciar la aplicación en cuestión en su propio espacio de nombre.
Una configuración común podría describir la creación de una interfaz de puente de Linux para conectar los espacios de nombres a la red. Se puede archivar una configuración un poco más simple usando ipvlan (incluido en las versiones de kernel 3.19 y superiores) o un dispositivo macvlan (para conexión inalámbrica no puede usar macvlan ). La documentación del kernel de Linux tiene un ejemplo detallado para configurar ipvlan en el espacio de nombres de red.
Siguiendo el ejemplo en la documentación:
Crear un espacio de nombres de red ns0
ip netns add ns0
Crear esclavo ipvlan en eth0 (dispositivo maestro)
ip link add link eth0 ipvl0 type ipvlan mode l2
Asignar esclavos al espacio de nombres de red ns0
ip link set dev ipvl0 netns ns0
Configure el dispositivo esclavo en el espacio de nombres de red ns0
ip netns exec ns0 ip link set dev ipvl0 up
ip netns exec ns0 ip link set dev lo up
ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
Proporcione las direcciones de host y enrutador en $IPADDR
y $ROUTER
.
Ejecute su aplicación en el espacio de nombres de red usando ip exec
ip netns exec ns0 <command>
Para ejecutar el comando como un usuario diferente, use el habitual su <user> -c -- <command>
.
* EDITAR: de la teoría a la práctica: he escrito un módulo PAM simple para demostrar cómo cambiar el espacio de nombres de la red por usuario. Debe configurar un espacio de nombres de red con el ip netns
mismo nombre anterior y asignar usuarios específicos a espacios de nombres específicos. Luego, todos los procesos de los usuarios estarán en su espacio de nombres configurado en lugar del predeterminado. El código está alojado en github . Úselo bajo su propio riesgo.
ubuntu 14.04
sólo consigo:Garbage instead of arguments "mode ...". Try "ip link help"
.