Cómo enrutar la conexión de red del software a la interfaz especificada (Linux)

Cómo enrutar la conexión de red del software a la interfaz especificada (Linux)
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 ownermatch (iptables) o skuid/ skgid(nftables) y ejecutar esos programas con diferentes usuarios.

  1. 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
  1. 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
  1. 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.

información relacionada