OpenVPNドキュメント

全てのクライアントトラフィック(Webトラフィックを含む)をVPN経由でルーティングする

概要

OpenVPNクライアントがアクティブな場合、デフォルトではOpenVPNサーバーサイトとの間のネットワークトラフィックのみがVPN経由で送信されます。
例えば一般的なWebブラウジングはVPNを経由せず直接接続されます。

場合によっては、Webブラウジングなどを含む全ての通信をVPN経由で行いたいケースがあります。
例えばVPNクライアントが一般的なWebブラウジングを含むすべてのネットワークトラフィックをVPN経由でトンネリングしたい場合などです。
このような設定をおこなうとクライアントのパフォーマンスの低下は避けられませんが、クライアントが通常のインターネットとVPNの両方に同時に接続している場合、VPN管理者はセキュリティポリシーをより細かく制御できます。


設定

サーバー設定ファイルに以下のディレクティブを追加します。

push "redirect-gateway def1"

VPN設定がワイヤレスネットワーク上で行われ、全てのクライアントとサーバーが同一のワイヤレスサブネット上にある場合は、localフラグを追加します。

push "redirect-gateway local def1"

redirect-gatewayオプションをクライアントにpushすると、 クライアントマシンから発信される全てのIPネットワークトラフィックがOpenVPNサーバーを経由するようになります。
サーバー側では、このトラフィックをインターネットにNATしたり、サーバーのネットワーク上にあるHTTPプロキシにルーティングしたりするなど、何らかの方法で処理できるよう設定する必要があります。

Linuxでは、以下のようなコマンドでVPNクライアントトラフィックをインターネットにNATで接続させることができます。

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

このコマンドでは、VPNサブネットが10.8.0.0/24(OpenVPNサーバー設定のserverディレクティブから取得)で、かつローカルEthernetインターフェイスがeth0であることを想定しています。

redirect-gatewayディレクティブを使用すると、OpenVPNクライアントはDNSクエリもVPN経由でルーティングするようになるため、VPNサーバーはそれも処理できるようにする必要があります。
これはDNSサーバーアドレスをVPN接続中のクライアントにpushすることでおこなえます。
これにより、VPNがアクティブな間はクライアントの通常のDNSサーバー設定が置き換えられます。

push "dhcp-option DNS 10.8.0.1"

これにより、WindowsクライアントのDNSサーバーアドレスを10.8.0.1に設定します。
(Windows以外のクライアントの場合はサーバー側で追加のスクリプトが必要です)
DNSサーバーのアドレスはクライアントからアクセス可能なアドレスを使用してください。


注意事項

全てのネットワークトラフィックをVPN経由でリダイレクトすることは、必ずしも問題がないわけではありません。
以下のような点に注意する必要があります。

  • インターネットに接続している多くのOpenVPNクライアントマシンは、定期的にDHCPサーバーと通信を行ってIPアドレスのリースを更新します。
    しかしredirect-gatewayオプションを使用すると、DHCPメッセージがVPN経由でルーティングされるため、クライアントがローカルDHCPサーバーにアクセスできなくなる可能性があります。
    その結果、IPアドレスのリースが失われる可能性があります。
  • WindowsクライアントDNSアドレスをpushする場合に問題が発生する恐れがあります。
  • クライアント上でのWebブラウジングのパフォーマンスが著しく低下します。

redirect-gatewayディレクティブの仕組みについてはマニュアルページを参照してください。