.png)
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.
Programm (z. B. Python-Skript, Curl) Netzwerkkommunikationsroute zur angegebenen Schnittstelle durch benutzerdefinierten Mechanismus.
Wie kann ich das unter Linux (Debian oder Ubuntu) lösen?
Antwort1
Sie können Policy-Routing zusammen mit owner
Match (iptables) oder skuid
/ skgid
(nftables) verwenden und diese Programme unter verschiedenen Benutzern ausführen.
- Fügen Sie verschiedenen Tabellen verschiedene Nexthops hinzu:
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
- Fügen Sie Regeln hinzu, um sie basierend auf der Firewall-Markierung zu verwenden:
ip rule add fwmark 1 lookup 101
ip rule add fwmark 2 lookup 102
ip rule add fwmark 3 lookup 103
- Fügen Sie Firewall-Regeln hinzu, um diese Markierungen den Paketen basierend auf dem Socket-Eigentümer zuzuweisen:
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
oder
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
Jetzt werden Programme, die unter UID 1001 ausgeführt werden, über weitergeleitet 192.0.2.1
, und so weiter.