OpenVPNでリモートアクセスVPNのトラフィックを全てVPN経由にする方法

openvpn-logo

こんにちわ。EWはサンドロック派なガノタ市田です。
今回は、OpenVPNでインターネットアクセスもVPN経由にする小ネタです。

前提構成

OpenVPNの作成については、VPCのルートテーブルの設定以外は下記の通りに作成しておきます。

Amazon EC2とOpenVPNでサーバ-多拠点クライアント間通信をセキュアに行う | Developers.IO

初期設定で確認してみる

上記の内容で作成した状態では、IPマスカレードなし になっています。

この状態でVPN接続してからインターネットにアクセスしてみます。 試しにhttp://ifconfig.ioにアクセスしてみます。ifconfig.ioはアクセスしているIPを表示してくれるので、自分のIPアドレスを調べるのに便利です。

この状態だとインターネットアクセスは、VPNを経由せずに出ています。

no-ipmasq

次にopenvpn.confに以下を追記して、デフォルトルートをVPN経由になるようにします。

push "redirect-gateway def1"

VPN経由でアクセスする時に使用するDNSサーバの指定も追記しておきます。
今回はVPCで提供されているリゾルバを指定しました。利用されているVPCネットワークの範囲に2をプラスした値になります。

push "dhcp-option DNS 172.31.0.2"

追加できたらopenvpnを再起動します。

service openvpn restart

この状態でVPN接続しても、Internet Gateway がVPCのIP以外トラフィックを通さないという事もあり、インターネットにつながりません。

notinternet

IPマスカレード設定

対策としては、IPマスカレードを有効にして、Internet GatewayへのアクセスをOpenVPNインスタンスからのアクセスに見せるようにします。

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

この状態で再度インターネットにアクセスしてみます。

vpninternet

OpenVPNのインスタンスからのアクセスに変わりました。

VPCルートテーブルを使う場合

以前のエントリでご紹介したように、IPマスカレードではなくVPCのルートテーブルで経路制御している場合は、アクセス元IPがOpenVPNで割り当てられたIP(10.8.0.0/24)になる為、インターネットに出ていくことができません。

利用用途に応じてどちらの方法にするか検討して構築するようにしましょう。

最後に

インターネットアクセスもVPN経由にする時は、OpenVPNのドキュメントにもあるようにIPマスカレードが必要です。利用用途としては「リモートアクセスVPNの場合でもアクセス許可するIPを制限したい」 といった場合に有効かと思います。

OpenVPN.JP - クライアントのすべてのトラフィック(Webトラフィックを含む)をVPN経由にルーティングする_

以上になります。