Linux で異なるユーザーを異なる OpenVPN トンネル経由でルーティングするにはどうすればよいですか?

Linux で異なるユーザーを異なる OpenVPN トンネル経由でルーティングするにはどうすればよいですか?

セットアップ:

私には複数の静的キー OpenVPN クライアント/サーバー構成があり、それぞれサーバー/クライアント IP が 10.10.1.1/10.10.1.2、10.10.2.1/10.10.2.2、10.10.3.1/10.10.3.2 で、「client1」、「client2」、「client3」というラベルが付けられており、1 台の Linux サーバーと 1 台の Linux クライアント (それぞれに異なる tunX インターフェイスを持つ 3 つの openvpn プロセスがある) でホストされています。私の Linux クライアント マシンには、ユーザー「client1」、「client2」、「client3」の 3 人のユーザーがいます。NAT を実行するようにサーバーを設定しているため、10.10.1.2 の client1 からの着信トラフィックは (iptables の -j SNAT 経由で) ある IP からインターネットに送信され、10.10.2.2 の client2 は別の IP から送信されるなどです。

問題:

私が持っていないのは、クライアント Linux マシンが各ユーザーからのトラフィックを OpenVPN トンネル経由で適切な OpenVPN サーバー IP に適切にルーティングする方法です。基本的に、クライアント 1 からのインターネット宛てのすべてのトラフィックを OpenVPN サーバー上の 1 つのインターネット向け IP に送信し、クライアント 2 からのトラフィックを別の IP に送信するなど、追加したいユーザー数に応じてこれを実行したいと考えています。ただし、これはすべて、さまざまなクライアント ユーザーをすべてホストしている 1 台のマシンから実行する必要があります。パケットをユーザー ID でマークし、これらのマークに基づいて IP ルーティングを設定する iptables 機能は知っていますが、実際にそれを実現する方法がわかりません。

この件に関して私を助けてくれる iptables/netfilter などの専門家はいますか?

答え1

作成プロセスの UID に基づいてパケットをマークできます。この Netfilter マークは、(高度な) ルーティング ( :または; キーワード "fwmark") と DNAT のiptables両方に使用できます。どちらが簡単/優れているかはわかりません。ip ruleman ipman ip-rule

編集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

関連情報