.png)
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.
ruta de comunicación de red del programa (por ejemplo, script en Python, curl) a una interfaz especificada mediante un mecanismo personalizado.
¿Cómo puedo resolver esto en Linux (debian o ubuntu)?
Respuesta1
Puede utilizar el enrutamiento de políticas junto con owner
match (iptables) o skuid
/ skgid
(nftables) y ejecutar esos programas con diferentes usuarios.
- Agregue diferentes nexthops a diferentes tablas:
ip route add default via 192.0.2.1 table 101
ip route add default via 192.0.2.2 table 102
ip route add default via 192.0.2.3 table 103
- Agregue reglas para usarlas según la marca del firewall:
ip rule add fwmark 1 lookup 101
ip rule add fwmark 2 lookup 102
ip rule add fwmark 3 lookup 103
- Agregue reglas de firewall para asignar esas marcas a los paquetes según el propietario del socket:
nft add rule filter output meta skuid 1001 mark set 1
nft add rule filter output meta skuid 1002 mark set 2
nft add rule filter output meta skuid 1003 mark set 3
o
iptables -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 1
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 2
iptables -A OUTPUT -m owner --uid-owner 1003 -j MARK --set-mark 3
Ahora, los programas que se ejecutan bajo UID 1001 se enrutarán a través de 192.0.2.1
, y así sucesivamente.