すべてのトラフィック(openvpn-server自体へのトラフィックも含む)をVPN経由でルーティングする方法

すべてのトラフィック(openvpn-server自体へのトラフィックも含む)をVPN経由でルーティングする方法

たとえば、パブリック IP アドレスが 101.102.103.104 のサーバーがあります。このサーバーは OpenVPN サーバーを実行しており、さらにパブリック IP ネットワーク デバイス ポートでリッスンしている他のさまざまなものも実行しています。

私がやりたいのは、101.102.103.104 に接続したら、今後のすべてのトラフィックを VPN 経由でこの IP にルーティングすることです。

たとえば、curl101.102.103.104:8080 の場合は、VPN 接続を経由します。

push route次のように server.conf に追加してみました:

push "route 101.102.103.104 255.255.255.255"

除外ルートの追加も試してみました:

push "route 101.102.103.104 255.255.255.255 net_gateway"

しかし、うまくいかなかったようです。実行すると、sudo route -n自宅のルーターを経由するルートが表示されました。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
10.8.0.1        10.8.0.5        255.255.255.255 UGH   0      0        0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
101.102.103.104  192.168.1.1     255.255.255.255 UGH   0      0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0

これを実現する方法について何か考えはありますか? 問題は、VPN サーバー経由でトラフィックを VPN サーバー自体にルーティングしようとしているため、何らかの無限ループが発生しているのではないかと思いましたが、これは単なる推測です。

答え1

表示されたルーティング テーブルでは、最初の行に示されているように、すべてのトラフィックが VPN 経由でルーティングされるわけではありません。現在の構成では、クライアントが LAN にアクセスできるようにするだけです。

すべてのクライアントトラフィックをOpenVPN経由でルーティングするコマンド(サードパーティへのすべてのトラフィックを含む)つまり(VPNサーバーのLANではない)は

  push "redirect-gateway def1"

これをサーバー構成ファイルに追加します (変更を有効にするには、OpenVPN プログラムを再起動する必要があります)。

また、ブリッジ型ではなくルーティング型の OpenVPN を設定しているため、サーバー上で NAT を有効にする必要があります。

  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

これは、インターネット上のOpenVPNサーバーのインターフェース(つまりIPアドレス101.102.103.104を持つものはeth0適宜調整してください。

設定を確認するには、OpenVPN サーバーへの接続が確立されたら、次のコマンドを発行します。

 wget 216.146.39.70:80 -O - -o /dev/null

これにより、見かけの IP アドレスが出力されます。出力に 101.102.103.104 が含まれていれば完了です。

関連情報