たとえば、パブリック IP アドレスが 101.102.103.104 のサーバーがあります。このサーバーは OpenVPN サーバーを実行しており、さらにパブリック IP ネットワーク デバイス ポートでリッスンしている他のさまざまなものも実行しています。
私がやりたいのは、101.102.103.104 に接続したら、今後のすべてのトラフィックを VPN 経由でこの IP にルーティングすることです。
たとえば、curl
101.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 が含まれていれば完了です。