Tengo 2 enrutadores conectados mediante cable ethernet. El enrutador secundario tiene su servidor DHCP deshabilitado y tiene una dirección IP de 192.168.1.2. Ambos enrutadores tienen Internet diferente. Si creo otra puerta de enlace predeterminada con una métrica más baja, puedo usar la segunda red como red principal.
ip route add default via 192.168.1.2 dev eno1 metric 10
Funciona como se esperaba.
Ahora estoy intentando usar ambas redes simultáneamente. ¿Es posible crear un usuario de Linux y enviar todo el tráfico del usuario a través de la puerta de enlace secundaria? Probé los siguientes comandos:
useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2
Luego corrí sudo -u kreator ping google.com
y no registró nada. ¿Qué me estoy perdiendo?
Estoy en Arch Linux y el administrador de red es el demonio NetworkManager.
Respuesta1
Según los comentarios, el enfoque fue sólido:
- Indique al sistema operativo que consulte la tabla 42 para conocer las decisiones de enrutamiento en cualquier paquete con un
fwmark
valor de 42:ip rule add fwmark 42 table 42
- Agregue la ruta predeterminada alternativa a esa tabla:
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- Marque (en la
mangle
tabla) todos los paquetes salientes (en laOUTPUT
cadena) que se originan en un proceso propiedad del usuariokreator
con42
:iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
En este punto, los paquetes que se originan en el usuario kreator
se marcan y enrutan mediante la ruta predeterminada alternativa en la tabla 42, según se desee. El iptables
comando adicional que ajustaba la POSTROUTING
cadena era erróneo, ya que cambiaba la IP de origen a la del enrutador secundario y probablemente provocaba que el enrutador descartara el paquete.