OpenVPNドキュメント
ルーティングされたVPNでサーバー側に複数のマシンを接続する(dev tun)
クライアントとサーバーの間でVPNが動作可能になったら、サーバーマシン自体だけではなくサーバーネットワーク上の複数のマシンにアクセスできるようにVPNを拡張したい場合があります。
ここではサーバー側LANが10.66.0.0/24サブネットを使用し、OpenVPNサーバー設定ファイルではserverディレクティブでVPNのIPアドレスの範囲が10.8.0.0/24に設定されている、と仮定します。
まずVPNクライアントに対し、10.66.0.0/24サブネットにVPN経由でアクセス可能であることを通知する必要があります。
これは、サーバー側の設定ファイルで以下のディレクティブを設定するだけで簡単に行えます。
次に、サーバー側LANのゲートウェイがVPNクライアントサブネット(10.8.0.0/24)からOpenVPNサーバーへルーティングされるよう設定をします。
これはOpenVPNサーバーとLANゲートウェイが異なるマシンである場合にのみ必要な設定になります。
OpenVPNサーバーでIPおよびTUN/TAP転送が有効になっていることを確認してください 。
ブリッジVPNでサーバー側に複数のマシンを接続する(dev tap)
イーサネットブリッジの場合は、追加の設定を行う必要はありません。
これはブリッジ使用のメリットのひとつです。
ルーティングされたVPNでクライアント側に複数のマシンを接続する(dev tun)
通常のリモートアクセスの場合、クライアントマシンは1台のマシンとしてVPNに接続しますが、ここではホームオフィスなどのローカルLANゲートウェイとしてクライアントのマシンを使用し、そのLAN上の各マシンをVPN経由でルーティングするケースを考えてみます。
今回のケースでは、クライアントLANが192.168.4.0/24サブネット、VPNクライアントはclient2という共通名が設定された証明書を各々使用している、と仮定します。
クライアントLAN上の全てのマシンがVPN経由でサーバーLAN上の任意のマシンアクセスできるようにVPNを設定します。
セットアップの前に以下の基本的な前提条件があります。
- クライアントLANのサブネット(今回の例では192.168.4.0/24)は、サーバーまたは同じサブネットを使用している他のクライアントサイトからVPNにエクスポートされてはなりません。
ルーティング経由でVPNに接続される全てのサブネットはユニークである必要があります。 - クライアントの証明書にはユニークな共通名 (今回の例ではclient2) が必要です。
また、サーバー設定ファイルでduplicate-cnフラグを使用する事はできません。
まず、クライアントマシンでIP及びTUN/TAP転送が有効になっていることを確認します。
次に、サーバー側の設定を変更します。
サーバー設定ファイルがクライアント設定ディレクトリを参照していない場合は、以下の行を追加します。
上記においてccdはOpenVPNサーバーデーモンが実行される際に事前に作成されたディレクトリ名である必要があります。
通常の場合、Linuxでは/etc/openvpn、Windowsでは\Program Files\OpenVPN\configが使用されています。
新しいクライアントがOpenVPNサーバーに接続すると、デーモンはこのディレクトリ内で接続クライアントの共通名に一致する設定ファイルがあるかどうかチェックします。
一致するファイルが見つかった場合はそれが読み込まれ、指定されたクライアントに適用する追加の設定ディレクティブの処理が行われます。
次に、ccdディレクトリにclient2というファイルを作成します。
このファイルには以下の行が含まれます。
これはOpenVPNサーバーに対し、192.168.4.0/24サブネットをclient2にルーティングさせる必要があることを通知するものです。
次に、メインのサーバー設定ファイル(ccd/client2ファイルではありません)に以下の行を追加します。
routeとirouteの記述が重複している事を疑問に思うかもしれません。
routeはkernelからサーバー(TUNインターフェース経由)へのルーティングを制御し、irouteはサーバーからリモートクライアントへのルーティングを制御します。
そのため、両方とも必要なものなのです。
client2のサブネット(192.168.4.0/24)とOpenVPNサーバーの他のクライアント間のネットワークトラフィックを許可する場合は、サーバー設定ファイルに以下の行を追加します。
push "route 192.168.4.0 255.255.255.0"
この設定により、OpenVPNサーバーはclient2サブネットを接続中の他のクライアントに通知するようになります。
最後に、忘れがちですが、サーバーのLANゲートウェイに192.168.4.0/24をOpenVPNサーバーへルーティングする設定を追加します。
(OpenVPNサーバーがサーバーLANのゲートウェイでもある場合はこのステップは不要です)
もしもこの設定を行わずに192.168.4.8からOpenVPNサーバー以外のサーバーLAN上のマシンにpingを実行した場合、
発信したping当該のマシンに届きますが、192.168.4.0/24へのルートが設定されていないため、pingへの応答に対するルーティングは不明のままです。
経験則として、LAN全体をVPN経由でルーティングする場合(VPNサーバーがLANゲートウェイと同じマシンではない場合)、LANゲートウェイが全てのVPNサブネットをVPNサーバーへルーティングするようにします。
同様に、OpenVPNを実行しているクライアントマシンがクライアントLANのゲートウェイでない場合は、OpenVPNクライアントマシンにVPN経由で到達できるよう、全てのサブネットへのルーティングをクライアントLANのゲートウェイに対しておこなう必要があります。
ブリッジVPNでクライアント側に複数のマシンを接続する(dev tap)
少しだけ複雑な設定が必要になります。
- クライアントTAPインターフェイスと、LAN接続されたNICをブリッジする必要があります。
- クライアント上のTAPインターフェイスのIPアドレスとネットマスクを手動で設定する必要があります。
- ブリッジされたサブネット内にあるIPアドレスとネットマスクを使用するようにクライアント側のマシンを設定する必要があります。
そのためにOpenVPNサーバー側にあるDHCPサーバーにクエリを実行する必要があります。