内部ネットワークのルーターとして使用するcentosボックスでopenvpnクライアントを実行しています。外部世界への2つのインターフェースがあります。
eth0 - normal internet
tun0 - openvpn tunnel
"route-noexec"オプションを入れてopenvpn自動パスインポートを無効にし、すべてのパスを手動で処理します。 openvpnトンネルを開くと、ルーティングテーブルは次のようになります。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.80.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.44.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 dummy0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.44.1 0.0.0.0 UG 0 0 0 eth0
これで、Centosシステムのインターフェイス192.168.80.0に内部ホストが接続されました。
192.168.80.50
このユーザーのすべてのトラフィックはインターフェイスtun0を介してルーティングし、他のすべてのトラフィックはeth0を介してルーティングする必要があります。
このようなPOSTROUTINGルールを追加してみました。
iptables -t nat -A POSTROUTING -s 192.168.80.50 -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ただし、すべてのクライアントは192.168.80.50を含むeth0のみを通過します。どうすればいいですか?
答え1
に基づいてスーパーユーザーへの答えです。:
一部のIP用のルーティングテーブルを作成します。
ip rule add from <sourceIP>/<mask> table <name>
次に、ルーティングテーブルに一致する新しいパスを宣言します<name>
。
ip route add default via <router> dev tun0 table <name>
VPNを使用する必要がある場合、この構成ではテーブル内のすべてのIPを指定する必要があるため、サブネットを持つ方が簡単です。<name>
答え2
選択したVPNクライアントからのすべてのトラフィックがVPNトンネルを通過するようにするには、このユーザー設定でこれを「クライアントから」に設定する必要があります。クライアント構成ファイルには「redirect-gateway autolocal」オプションがあります。 VPNサーバーでこのVPNクライアントIPにSNATまたはMASQUERADEを設定する必要があるかもしれません。
答え3
「iptablesソースルーティング」とこの記事を見てください。https://www.linuxquestions.org/questions/linux-software-2/iptables-source-ip-based-gateway-route-681522/
特定のゲートウェイ(VPN接続のエンドポイントになる)を使用してVPNクライアント用の特定のルーティングテーブルを作成し、このルーティングテーブルを指すiptablesルールを追加します。