Una vez más estamos ante un claro ejemplo de la flexiblidad que nos ofrece GNU/Linux. <ejemplo_hipotético> Seguro que alguna vez, habeis querido poner el emule (por ejemplo) por la DSL del vecino (via wireless) mientras el resto de aplicaciones salen por vuestra línea. De esta manera teneis P2P sin saturar vuestra conexión, y luego no viene el hermano a deciros: "¡Internet no va! </ejemplo_hipotético>. Dejando de lado los casos hipoteticos, el siguiente artículo nos explica como asociar un identificador de usuario (UID) a una conexión de internet. De esta manera todas las aplicaciones ejecutadas por el usuario con ese UID saldran por dicha conexión. Algo que puede ser realmente útil.
Tenemos dos conexiones a internet, una por eth0 y otra por eth1. Queremos que todo el mundo use la eth0 excepto el usuario con UID 1000 que usará la eth1 para salir a internet
-
Se necesita iptables y iproute:
ubuntu/debian: apt-get install iptables iproute
gentoo: emerge iproute2 iptables
-
Añadimos una tabla por conexión a iproute:
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
151 conexion1
152 conexion2
#
# local
#
#1 inr.ruhep
-
Asociamos una marca a cada conexión:
ip rule add fwmark 1 table conexion1
ip rule add fwmark 2 table conexion2
-
Añadimos las rutas pertinentes:
ip route add default via 10.0.0.1 dev eth0 table conexion1
ip route add default via 192.168.1.1 dev eth1 table conexion2
-
Regla para cambiar la IP de origen:
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source=192.168.1.254
-
Regla para marcar los paquetes del usuario con UID 1000:
iptables -t mangle -A OUTPUT -m owner --uid-owner 1000 -j MARK --set-mark 2
-
Si queremos poder acceder desde la red conectada a la interfaz eth0, p.e. a los puertos 8080 y 5902:
iptables -t mangle -A OUTPUT -p tcp -m multiport --ports ! 8080,5902 -m owner --uid-owner 1000 -j MARK --set-mark 2
-
Comprobar que funcione (al usuario con UID 1000 debería darle una IP diferente que al resto):
links2 whatismyip.org
Gracias a Carlos por la aportación;-)
- Inicie sesión o regístrese para enviar comentarios
