如何將軟體網路連線路由到指定介面(linux)

如何將軟體網路連線路由到指定介面(linux)
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.

程式(例如python腳本、curl)透過自訂機製到指定介面的網路通訊路由。

我怎麼能在linux(debian或ubuntu)下解決這個問題。

答案1

您可以將策略路由與ownermatch (iptables) 或skuid/ skgid(nftables) 一起使用,並在不同使用者下執行這些程式。

  1. 將不同的下一跳加入不同的表中:
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. 新增規則以根據防火牆標記使用它們:
ip rule add fwmark 1 lookup 101
ip rule add fwmark 2 lookup 102
ip rule add fwmark 3 lookup 103
  1. 新增防火牆規則以根據套接字擁有者將這些標記指派給封包:
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、等等進行路由。

相關內容