%EB%A1%9C%20%EB%9D%BC%EC%9A%B0%ED%8C%85%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
aprogram -> eth1 -> internet A
bprogram -> eth2 -> internet B
aprogram -> eth2 -> internet B
etc.
프로그램(예: Python 스크립트, 컬) 네트워크 통신은 사용자 지정 메커니즘을 통해 지정된 인터페이스로 경로를 지정합니다.
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
192.0.2.1
이제 UID 1001에서 실행되는 프로그램은 등을 통해 라우팅됩니다 .