소프트웨어 네트워크 연결을 지정된 인터페이스(Linux)로 라우팅하는 방법

소프트웨어 네트워크 연결을 지정된 인터페이스(Linux)로 라우팅하는 방법
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.

프로그램(예: Python 스크립트, 컬) 네트워크 통신은 사용자 지정 메커니즘을 통해 지정된 인터페이스로 경로를 지정합니다.

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

192.0.2.1이제 UID 1001에서 실행되는 프로그램은 등을 통해 라우팅됩니다 .

관련 정보