.png)
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.
программа (например, скрипт Python, curl) маршрутизирует сетевое взаимодействие с указанным интерфейсом с помощью специального механизма.
Как решить эту проблему в Linux (Debian или Ubuntu)?
решение1
Вы можете использовать маршрутизацию политик вместе с owner
match (iptables) или skuid
/ skgid
(nftables) и запускать эти программы под разными пользователями.
- Добавьте разные следующие переходы в разные таблицы:
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
- Добавьте правила их использования на основе метки брандмауэра:
ip rule add fwmark 1 lookup 101
ip rule add fwmark 2 lookup 102
ip rule add fwmark 3 lookup 103
- Добавьте правила брандмауэра, чтобы назначать эти метки пакетам на основе владельца сокета:
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
или
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
Теперь программы, запущенные под UID 1001, будут маршрутизироваться через 192.0.2.1
и т. д.