設定:
我有多個靜態金鑰OpenVPN 用戶端/伺服器配置,標記為“client1”、“client2”和“client3”,伺服器/客戶端IP 為10.10.1.1/10.10.1.2、10.10.2.1/10.10.2.2 和10.10。我的 Linux 用戶端電腦上有三個用戶,用戶「client1」、「client2」和「client3」。我的伺服器設定為執行NAT,以便來自10.10.1.2 上的client1 的傳入流量從一個IP 傳出到Internet(透過iptables 中的-j SNAT),10.10.2.2 上的client2 傳出另一個IP,等等等。
問題:
我沒有辦法讓客戶端 Linux 機器透過 OpenVPN 隧道將每個使用者的流量正確路由到正確的 OpenVPN 伺服器 IP。本質上,我希望來自client1 的所有發送到互聯網的流量都從OpenVPN 伺服器上的一個面向互聯網的IP 發出,來自client2 的流量從另一個IP 發出,依此類推,對於我想要添加的用戶數量,以此類推。但這一切都必須在託管所有不同客戶端使用者的一台電腦上完成。我知道 iptables 功能涉及透過使用者 ID 標記資料包,然後根據這些標記設定 IP 路由,但我不知道如何實際實現它。
有沒有 iptables/netfilter/etc 的專家可以在這件事上幫助我?
答案1
您可以iptables
根據建立進程的 UID 來標記封包。您可以將此 Netfilter 標記用於(進階)路由(ip rule
:man ip
或man ip-rule
; 關鍵字“fwmark”)和 DNAT。我不確定哪一個更容易/更好。
編輯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