
Tengo varias interfaces de red que proporcionan una conexión a Internet. Puedo cambiar la interfaz utilizada para el acceso a Internet route add default gw ...
en cualquier momento.
Sin embargo, ¿es posible seleccionar la puerta de enlace solo para un comando determinado? Por ejemplo, haga que un proceso utilice un enlace de módem GSM, mientras que el sistema utiliza el enlace Ethernet para todas las demás solicitudes de Internet.
Respuesta1
Puedes hacerlo con iptables
un usuario diferente. Suponiendo que la dirección IP de la interfaz que desea que use el comando es 1.2.3.4
el nombre eth1
y la puerta de enlace 1.2.3.1
.
1) Crear un nuevo usuario:
adduser user2
2) Marcar paquetes provenientes de ese usuario:
iptables -t mangle -A OUTPUT -m owner --uid-owner user2 -j MARK --set-mark 42
3) Aplicar la dirección IP en esos paquetes:
iptables -t nat -A POSTROUTING -o eth1 -m mark --mark 42 -j SNAT --to-source 1.2.3.4
4) Enrutar los paquetes marcados a través de eth1
la puerta de enlace de:
ip rule add fwmark 42 table 42
ip route add default via 1.2.3.1 dev eth1 table 42
5) Ejecute el comando como nuevo usuario:
sudo -u user2 ping example.com
ping example.com
ahora se enrutará a través de la puerta de enlace, 1.2.3.1
no de la puerta de enlace predeterminada del sistema.