설정:
서버/클라이언트 IP가 10.10.1.1/10.10.1.2, 10.10.2.1/10.10.2.2 및 10.10인 "client1", "client2" 및 "client3"이라는 레이블이 붙은 여러 개의 정적 키 OpenVPN 클라이언트/서버 구성이 있습니다. 3.1/10.10.3.2는 각각 하나의 Linux 서버와 하나의 Linux 클라이언트에서 호스팅됩니다(각각 다른 tunX 인터페이스를 사용하는 3개의 openvpn 프로세스 포함). 내 Linux 클라이언트 시스템에는 "client1", "client2" 및 "client3"이라는 세 명의 사용자가 있습니다. 10.10.1.2의 client1에서 들어오는 트래픽이 한 IP에서 인터넷으로(iptables의 -j SNAT를 통해), 10.10.2.2의 client2가 다른 IP로 나가도록 NAT를 수행하도록 서버를 설정했습니다.
문제:
내가 가지고 있지 않은 것은 클라이언트 Linux 시스템이 OpenVPN 터널을 통해 각 사용자의 트래픽을 적절한 OpenVPN 서버 IP로 올바르게 라우팅하는 방법입니다. 본질적으로, 저는 client1의 모든 인터넷 대상 트래픽이 OpenVPN 서버의 하나의 인터넷 연결 IP로 나가고, client2의 트래픽이 다른 IP로 나가기를 원하며, 추가하려는 사용자 수만큼 계속해서 이러한 작업을 수행합니다. . 하지만 이 모든 작업은 서로 다른 모든 클라이언트 사용자를 호스팅하는 하나의 컴퓨터에서 수행되어야 합니다. 사용자 ID별로 패킷을 표시한 다음 이러한 표시를 기반으로 IP 라우팅을 설정하는 것과 관련된 iptables 기능을 알고 있지만 실제로 이를 달성하는 방법은 모르겠습니다.
이 문제에 대해 도움을 줄 수 있는 iptables/netfilter/etc 전문가가 있습니까?
답변1
iptables
생성 프로세스의 UID를 기반으로 패킷을 표시할 수 있습니다 . (고급) 라우팅( ip rule
: man ip
또는 man ip-rule
; 키워드 "fwmark")과 DNAT 모두에 대해 이 Netfilter 표시를 사용할 수 있습니다 . 어느 것이 더 쉽고 좋은지 잘 모르겠습니다.
편집 1 각 사용자에 대해:
iptables -t mangle -A PREROUTING -m owner --uid-owner $user -j MARK --set-mark $usermark
# one line in /etc/iproute2/rt_tables (numbers don't matter)
ip route add default via $user_gw_ip dev $user_if src $user_if_local_ip table $user_table
ip rule add type unicast fwmark $usermark priority 100 table $user_table