目次
Windows 10 搭載 PC に OpenVPN Client を設置し、OpenVPN Serverと接続しよう
この記事は外出先から自宅内にある NAS や Windows PC にリモートデスクトップ接続したい人向けに
既に自宅で OpenVPN Server を設置している読者の方が、接続確認の意味で、同じく自宅内のWindows 10 搭載 PC に OpenVPN Client を設置し、OpenVPN Server と接続する手順を順を追ってやさしく紹介します。
この記事を読むことで、自宅内で OpenVPN Server と OpenVPN Client が通信するための具体的な手順を理解することができます。
- Windows 10 搭載 PCへのOpenVPN Client設置手順
- OpenVPN Clientのコンフィグファイル作成方法
- OpenVPN Client 起動方法
- OpenVPN Client 動作確認方法
OpenVPN Server の設置、起動方法については関連記事を参照ください。
Windows 10 搭載 PCへのOpenVPN Client 設置手順
OpenSSLインストール
Windows 10 搭載 PC にOpenSSL を構築する手順は OpenVPN Server の手順と同じなので
- OpenSSLインストール
- 環境変数 Path への OpenSSL 実行Path 追加
については以下の関連記事を参照下さい。
これらの作業が終ると、管理者権限で開いたコマンドプロンプト画面で、以下のように”openssl version“コマンドが使用できるようになります。
C:\Windows\system32>openssl version
OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)
C:\Windows\system32>
OpenVPNインストール
また Windows 10 搭載 PC にOpenVPN を構築する手順も の手順と同じなので
- OpenVPN インストール
- 環境変数 Path への OpenVPN 実行Path 追加
については先ほどの関連記事を参照下さい。
これらの作業が終ると管理者権限でのコマンドラインで “openvpn –version” コマンドが使えるようになります。
C:\Windows\system32>openvpn --version
OpenVPN 2.6.0 [git:v2.6.0/b999466418dddb89] Windows-MSVC [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] [DCO] built on Jan 25 2023
library versions: OpenSSL 3.0.7 1 Nov 2022, LZO 2.10
Windows version 10.0 (Windows 10 or greater), amd64 executable
Originally developed by James Yonan
Copyright (C) 2002-2023 OpenVPN Inc <sales@openvpn.net>
Compile time defines: N/A
C:\Windows\system32>
この記事は主に以下の参考図書を参考にして記載しています。
洋書ですが今は ChatGPT などで気軽に翻訳、関連情報が検索できるので、以外に簡単に読めますよ。OpenVPNを極めたい方にはお勧めの一冊です。
OpenVPN Clientのコンフィグファイル作成方法
OpenVPN のコンフィグファイル保存フォルダ
これらの手順を完了するとOpenVPN コンフィグファイル保存フォルダ
C:\Program Files\OpenVPN\config
配下は以下のようになっています。
認証局証明書、クライアント用秘密鍵/証明書、TLS認証鍵 のコピー
それではまず、Windows Server 2019 Essentials 搭載の Server_1 上で側で作成した次のファイルをOpenVPN コンフィグファイル保存フォルダヘコピーしましょう。
- CA.crt (認証局証明書)
- client_1.crt (client_1用証明書)
- client_1.key (client_1用秘密鍵)
- ta.key (TLS認証鍵)
OpenVPN Server のコンフィグファイル設定詳細
それでは、以下のVPN接続図に基づくVPN1設定を行うためのコンフィグレーションファイルを作成する方法について説明します。
まず先ほどのOpenVPN コンフィグファイル保存フォルダ
C:\Program Files\OpenVPN\config
配下に statickey_client1.ovpn という名前で以下のコンフィグファイルをコピーし、IPアドレス等を実際の環境にあわせて修正しましょう。
proto udp
port 1194
nobind
dev tun
client
remote 192.168.aaa.11
remote-cert-tls server
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\rvhsv02_CA.crt"
key "C:\\Program Files\\OpenVPN\\config\\rvhsv02_CA.key"
cipher AES-256-GCM
auth SHA256
これらのオプションは次のような意味を持っています。
行番号 | オプション | 設定値 | 意味 |
---|---|---|---|
1 | proto | udp | OpenVPNが使用するプロトコルを指定します。 udp はデフォルトのプロトコルですが、混乱を避けるため明示的に指定します。 |
2 | port | 1194 | OpenVPNサーバがリッスンするローカルポート番号を指定します。 これもデフォルト値は1194ですが、混乱を避けるため明示的に指定します。 有効なポート番号であればどの番号でも使用可能です。 |
3 | nobind | OpenVPNクライアントが port オプションで指定されたポート番号ではなく匿名ポートレンジ(1024~65335)からランダムなポート番号を選択します。 |
|
4 | dev | tun |
クライアントに使用されるデバイスモードをサーバ同様 tun を指定します。 |
6 | client | OpenVPNのクライアントがTLS認証を使用するかどうかを設定するものです。 | |
7 | remote | 192.168.aaa.11 | OpenVPNのサーバー名をIPアドレス、またはドメイン名で指定します。 |
9 | remote-cert-tls | server | TLS認証鍵 を持つVPNサーバからの接続のみを許可するよう指定します。 |
10 | tls-auth | “C:\\Program Files\\OpenVPN\\config\\ta.key” 1 | TLS認証鍵 へのパスを指定します。 パラメータ 1 はキーの方向性を表しており、クライアント側では1を指定します。 |
12 | ca | “C:\\Program Files\\OpenVPN\\config\\ca.crt” |
認証局証明書へのパスを指定します。 |
13 | cert | “C:\\Program Files\\OpenVPN\\config\\server_1.crt” | サーバー用証明書 へのパスを指定します。 |
14 | key | “C:\\Program Files\\OpenVPN\\config\\server_1.key” | サーバー用秘密鍵 へのパスを指定します。 |
16 | cipher | AES-256-GCM | VPN接続に使用する暗号アルゴリズムを指定します。 |
17 | auth | SHA256 | VPN接続に使用するメッセージダイジェストアルゴリズムを指定します。 |
これにより 先ほどのOpenVPN コンフィグファイル保存フォルダ
C:\Program Files\OpenVPN\config
配下は以下のようになっています。
余談ですが、OpenVPN Server との接続に HTTPプロキシサーバー を使用する場合、OpenVPNのプロトコルには TCPを使用します。
具体的には、サーバーおよびクライアントの構成のプロトコル引数を proto tcp-client に変更します。
そして例えば、HTTPプロキシサーバーのアドレスが「192.168.1.1」でポート番号が「8080」の場合、以下のような設定をクライアントのコンフィグファイルに追加します。
http-proxy 192.168.1.1 8080
http-proxy-user-pass “C:\\Program Files\\OpenVPN\\config\\credentials.txt”
この「http-proxy-user-pass」は、プロキシサーバーにログインするためのユーザー名とパスワードをファイルで指定する場合に追加するオプションです。
例えば、ユーザー名が「username」、パスワードが「password」の場合、credentials.txt 中に以下のように記述します。
username
password
OpenVPN Client 起動方法
openvpn Client も Server 同様エキスプローラ上で先ほど作成した
statickey_server.ovpn
をマウスでクリックし、右ボタンでコンテキストメニューを表示したうえで
Start OpenVPN on this config file
を選択することで起動します。
で Windows 10 搭載 PC内に OpenVPN クライアントが起動します。
OpenVPNのコンテキストメニュー
なお OpenVPNを起動すると、 Windows 10 搭載 PCのデスクトップ画面下部のタスクバー右側のアクションセンターアイコン中にある△アイコンをクリックしたさい、以下のOpenVPNのアイコンが表示され、さらにこれをクリックすると既にOpenVPNが接続済で 10.200.0.2 が VPN 側のIPアドレスとして割り当てられていることがわかります。
これをマウスでクリックし、右ボタンを押して表示される以下のようなコンテキストメニューから、このコンフィグレーションファイルの編集を行うための設定の編集を含めた各種の操作を行うことが出来ます。
OpenVPN Client 動作確認方法
IPアドレス確認
それでは OpenVPN Client を起動することによりClient1のIPアドレスに確認してみましょう。
具体的にはまず管理者権限でコマンドプロンプトを起動し、
ipconfig
コマンドを入力し、アダプタの名前を確認します。
Microsoft Windows [Version 10.0.19044.2604]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
不明なアダプター OpenVPN Wintun:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
不明なアダプター OpenVPN TAP-Windows6:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
不明なアダプター ローカル エリア接続 2:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
不明なアダプター ローカル エリア接続:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80:::::6ecf%2
IPv4 アドレス . . . . . . . . . . . .: 10.200.0.2
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:
Wireless LAN adapter ローカル エリア接続* 1:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
Wireless LAN adapter ローカル エリア接続* 10:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
Wireless LAN adapter Wi-Fi:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::844f:5a42:fb29:3d32%14
IPv4 アドレス . . . . . . . . . . . .: 192.168.bbb.199
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.bbb.1
イーサネット アダプター Bluetooth ネットワーク接続 2:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
C:\Windows\system32>
これにより
不明なアダプター ローカル エリア接続
というアダプタ配下に
10.200.0.2
というOpenVPN側のIPアドレスが有効になっているのがわかります。
ルーティングテーブル確認
次にこの Windows 10 搭載 PC のルーティングテーブルを
route print
コマンドで確認してみましょう。
わかりやすいように OpenVPN のサブネット 10.200.0.0 に関連した部分のみを抜き出すと次のようになっています。
C:\Windows\system32>route print
:
IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック
0.0.0.0 128.0.0.0 10.200.0.1 10.200.0.2 281
10.200.0.0 255.255.255.0 リンク上 10.200.0.2 281
10.200.0.2 255.255.255.255 リンク上 10.200.0.2 281
10.200.0.255 255.255.255.255 リンク上 10.200.0.2 281
128.0.0.0 128.0.0.0 10.200.0.1 10.200.0.2 281
192.168.bbb.0 255.255.255.0 10.200.0.1 10.200.0.2 225
192.168.aaa.0 255.255.255.0 10.200.0.1 10.200.0.2 225
224.0.0.0 240.0.0.0 リンク上 10.200.0.2 281
255.255.255.255 255.255.255.255 リンク上 10.200.0.2 281
===========================================================================
固定ルート:
なし
:
このルーティングテーブルから
- 10.200.0.2(つまりclient_1のOpenVPN上のIPアドレス) が他のサブネットへのインターフェースニなっていること
- 10.200.0.1 (つまりServer_1のOpenVPN上のIPアドレス)がこの自宅LAN環境における他のサブネット 192.168.aaa.0、192.168.bbb.0 へのデフォルトゲートウエイなっていること
がわかります。
OpenVPN Client への接続確認
まずはOpenVPN Client から OpenVPN サーバに正しく接続できているかを
ping 10.200.0.2 => client_1 のOpenVPN上のIPアドレスヘ接続できるかの確認
C:\Windows\system32>ping 10.200.0.2
10.200.0.2 に ping を送信しています 32 バイトのデータ:
10.200.0.2 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.2 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.2 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.2 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.2 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
C:\Windows\system32>
きちんと応答が返ってきますね。
OpenVPN Server への接続確認
続いて
ping 10.200.0.1 => server_1 のOpenVPN上のIPアドレスヘ接続できるかの確認
C:\Windows\system32>ping 10.200.0.1
10.200.0.1 に ping を送信しています 32 バイトのデータ:
10.200.0.1 からの応答: バイト数 =32 時間 =4ms TTL=128
10.200.0.1 からの応答: バイト数 =32 時間 =5ms TTL=128
10.200.0.1 からの応答: バイト数 =32 時間 =11ms TTL=128
10.200.0.1 からの応答: バイト数 =32 時間 =10ms TTL=128
10.200.0.1 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 4ms、最大 = 11ms、平均 = 7ms
C:\Windows\system32>
応答時間が少し長くなっていますが、こちらもきちんと応答がありますので server_1 へのOpenVPN接続はきちんとできています。
OpenVPN Server への経路確認
続いて自宅LAN内の他の Windows 10 搭載 PC、NAS への接続を確認しましょう。
ping 192. 168.aaa.11 => server_1 のLAN上のIPアドレスヘ接続できるかの確認
tracert 192. 168.aaa.11 => その際の経路の確認
C:\Windows\system32>ping 192.168.aaa.11
192.168.aaa.11 に ping を送信しています 32 バイトのデータ:
192.168.aaa.11 からの応答: バイト数 =32 時間 =6ms TTL=126
192.168.aaa.11 からの応答: バイト数 =32 時間 =12ms TTL=126
192.168.aaa.11 からの応答: バイト数 =32 時間 =8ms TTL=126
192.168.aaa.11 からの応答: バイト数 =32 時間 =12ms TTL=126
192.168.aaa.11 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 6ms、最大 = 12ms、平均 = 9ms
C:\Windows\system32>tracert 10.200.0.1
SERVER_1 [10.200.0.1] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 2 ms 5 ms 5 ms SERVER_1 [10.200.0.1]
トレースを完了しました。
C:\Windows\system32>tracert 192.168.aaa.11
SERVER_1 [192.168.aaa.11] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 <1 ms <1 ms 9 ms 192.168.bbb.1
2 3 ms 8 ms 1 ms 192.168.xxx.1
3 4 ms 11 ms 7 ms SERVER_1 [192.168.aaa.11]
トレースを完了しました。
C:\Windows\system32>
この結果から
- 192.168.aaa.11 (server_1 のLAN上のIPアドレス)へ接続出来ている
- その際の経路はLAN側のルーティングに沿ったものとなっている
ことがわかります。
自宅 LAN 内 Windows 10 搭載 PC への経路確認
続いて
ping 192. 168.aaa.10 => ターゲットとなっている Windows 10 搭載 PCのLAN上のIPアドレスヘ接続できるかの確認
tracert 192. 168.aaa.10 => その際の経路の確認
もしてみましょう。
C:\Windows\system32>ping 192.168.aaa.10
192.168.aaa.10 に ping を送信しています 32 バイトのデータ:
192.168.aaa.10 からの応答: バイト数 =32 時間 =6ms TTL=127
192.168.aaa.10 からの応答: バイト数 =32 時間 =6ms TTL=127
192.168.aaa.10 からの応答: バイト数 =32 時間 =9ms TTL=127
192.168.aaa.10 からの応答: バイト数 =32 時間 =3ms TTL=127
192.168.aaa.10 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 3ms、最大 = 9ms、平均 = 6ms
C:\Windows\system32>tracert 192.168.aaa.10
192.168.aaa.10 へのルートをトレースしています。経由するホップ数は最大 30 です
1 4 ms * 12 ms SERVER_1 [10.200.0.1]
2 4 ms 5 ms 5 ms 192.168.aaa.10
トレースを完了しました。
C:\Windows\system32>
この結果から
- 192.168.aaa.10 (ターゲットとなっている Windows 10 搭載 PCのLAN上のIPアドレス)へ接続出来ている
- その際の経路は SERVER_1 経由のVPNを経由したルーティングとなっている
ことがわかります。
自宅 LAN 内 NAS への経路確認
同様に
ping 192. 168.aaa.14 => ターゲットとなっている NASのIPアドレスヘ接続できるかの確認
tracert 192. 168.aaa.14 => その際の経路の確認
もしてみましょう。
C:\Windows\system32>ping 192.168.aaa.14
192.168.aaa.14 に ping を送信しています 32 バイトのデータ:
192.168.aaa.14 からの応答: バイト数 =32 時間 =6ms TTL=63
192.168.aaa.14 からの応答: バイト数 =32 時間 =4ms TTL=63
192.168.aaa.14 からの応答: バイト数 =32 時間 =12ms TTL=63
192.168.aaa.14 からの応答: バイト数 =32 時間 =4ms TTL=63
192.168.aaa.14 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 4ms、最大 = 12ms、平均 = 6ms
C:\Windows\system32>tracert 192.168.aaa.14
HVL-EC3091 [192.168.aaa.14] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 2 ms * 6 ms RVHAD01 [10.200.0.1]
2 23 ms 6 ms 6 ms HVL-EC3091 [192.168.aaa.14]
トレースを完了しました。
C:\Windows\system32>
この結果から
- 192.168.aaa.14 (ターゲットとなっているNASのLAN上のIPアドレス)へ接続出来ている
- その際の経路は SERVER_1 経由のVPNを経由したルーティングとなっている
ことがわかります。
自宅 LAN 内 Windows 10 搭載 PC へのRDP接続
それでは 自宅 LAN 内 Windows 10 搭載 PC へRDP接続してみましょう。
この Windows 10 搭載 PC は Pro エディションで、あらかじめ RDP接続を許容するよう設定されています。必要に応じて以下の記事も参照してください。
まず Windows 10 搭載 PC 内で
Windows メニュー > Windows アクセサリ > リモートデスクトップ接続
を順に選択し、表示された リモートデスクトップ接続 画面で
- コンピュータ名(C): ターゲット Windows 10 搭載 PC のIPアドレス
- ユーザー名: ターゲット Windows 10 搭載 PC に存在するアカウント名
等を入力し、 接続(N) ボタンをクリックし
続いて はい(Y) をクリックします。
これで VPN1 経由で ターゲット Windows 10 搭載 PC に RDP 接続が出来ました。
自宅 LAN 内 NAS 内フォルダの参照
こちらは単純に Windows 10 のエクスプローラ画面上部のアドレス入力欄に
\\192.168.aaa.14
という NAS のLAN上でのIPアドレスを入力すると
このように NAS 直下のフォルダが参照できました。
続いてこのフォルダ内の disk1 を選択すると
このNAS 配下のフォルダ、ファイルをVPN1経由で参照出来ました。
以下の記事であらかじめネットワークドライブ設定済であれば \\192.168.aa.14 と入力する代わりに z: と入力するだけで直接 \\192.168.aa.14\disk1 (=z:)配下を参照できますよ。
まとめ
この記事では自宅無線LAN環境内のWindows 10 搭載 PCにOpenVPN Client を構築し、OpenVPN Server と接続する方法について以下の項目に沿って紹介しました。
- Windows 10 搭載 PCへのOpenVPN Client設置手順
- OpenVPN Clientのコンフィグファイル作成方法
- OpenVPN Client 起動方法
- OpenVPN Client 動作確認方法
この記事が読者の方に少しでもお役にたてると幸いです。
こんにちは!しらかば堂(@shirakabado)です。