目次
Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
この記事では外出先から自宅内にあるNASやWindows PCにリモートデスクトップ接続したいとお考えの方に、自宅内の Windows 2019 Server Essentials 搭載 PC 上の OpenVPNサーバのコンフィグファイルの作成方法、サーバの起動方法、動作確認手順を紹介しています。
この記事を読んで頂くことで、自宅にOpenVPNサーバを稼働させるための手順を順を追ってわかりやすく理解することが出来ます。
この記事では、自宅内の Windows 2019 Server Essentials 搭載 PC 上にOpenVPN Serverを導入する手順を順に紹介します。
このOpenVPN Serverを立ち上げることで、外出先から自宅LANに安全にアクセスすることが可能になります。
- OpenVPN Server のコンフィグファイル作成方法
- OpenVPN Server の起動方法
- OpenVPN Server の環境設定と動作確認方法
ここではOpenVPNを設置する PC のOSをWindows Server 2019 Essentials としていますが、常時起動さえされていればWindows 10でも共通なので自宅にWindows Server をお持ちでない方もご参考にして頂けると幸いです。
Galaxy Note 20 Ultra 5G / Android 13からNASへのデータ取り出しや、Windows 10 搭載 PCへのRDP接続には、あらかじめGoogle Playから以下のアプリをインストールされ、運用されている必要があります。
OpenVPN Server のコンフィグファイル作成方法
OpenVPNのコンフィグファイル保存フォルダ
以下の関連記事の手順を完了すると、OpenVPN Serverのコンフィグファイル保存フォルダの中身は以下のようになっています。
OpenVPN Serverを動作させるには、以下の名前のテキストファイルを作成し、これをコンフィグレーションファイルとして使用するのが一般的です。このファイルには、OpenVPNのオプションパラメータが含まれています。
- 任意の名前.ovpn
これらのコンフィグレーションファイルは最初は Tera Term 等の任意のエディタを使って作成します。
OpenVPN Server のコンフィグファイル設定概要
このコンフィグレーションファイルの中身は openvpn コマンドのオプションを
“—” 無しで順に並べたもので
例えば以下のような内容で、この中の6行目に
server 10.200.0.0 255.255.255.0
という記載でこの OpenVPN をサーバとして定義します。
proto udp
port 1194
dev tun
server 10.200.0.0 255.255.255.0
topology subnet
:
OpenVPN Server のコンフィグファイル設定詳細
ここで先ほどの自宅内の無線LAN環境でのVPN接続図を、それぞれのVPNごとに分離してみましょう。
- VPN1:OpenVPN Client (client_1)から OpenVPN Server(server_1) へのVPN接続
- VPN2:OpenVPN Client (client_2)から OpenVPN Server(server_1) へのVPN接続
OpenVPNには、tunモードとtapモードの2つのデバイスモードがありますが、ここではtunモードを使用します。tun/tapは、Unix/Linuxの世界から来た考え方で、オペレーティングシステムの一部としてトラフィックを扱う方法です。
- tun: IPレベルのトラフィックをポイントツーポイントアダプターとしてあつかうデバイスモード
- tap: 全てのトラフィックを仮想イーサネットアダプターとしてあつかうデバイスモード
ここでご参考情報として OpenVPN の中身について少しだけご紹介しておきます。
この図はホスト側の端末(例えば Windows 10の搭載されたPC)上のユーザーアプリケーションからOpenVPNを介してリモート側の端末にトラフィックを送信する様子を示しています。ここでアプリケーションから送信されたパケットは、次のように処理されます。
- アプリケーションはパケットをオペレーティングシステムに渡します。
- オペレーティングシステムは通常のルーティングルールに基づき、パケットをVPN経由でルーティングする必要があることを決定し、このパケットをカーネルの tunドライバに転送します
- カーネルtunドライバは、OpenVPNプロセスにパケットを転送します。
- OpenVPNプロセスはパケットを暗号化、署名し、フラグメンテーションし、そして再びカーネルにパケットを渡してethドライバ経由でリモートVPNエンドポイントのアドレスに送信します。
- そしてリモート側では、同じプロセスが逆に実行されます。
それでは 以下にこのOpenVPN Server 用のコンフィグファイル設定を詳細に見ていきましょう。
まず先ほどのコンフィグフォルダ配下に statickey_server.ovpn という名前で以下のようなコンフィグファイルを作成します。
proto udp
port 1194
dev tun
server 10.200.0.0 255.255.255.0
topology subnet
persist-key
persist-tun
keepalive 10 60
remote-cert-tls client
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0
dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem"
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\server_1.crt"
key "C:\\Program Files\\OpenVPN\\config\\server_1.key"
verb 3
cipher AES-256-GCM
auth SHA256
log-append "C:\\Program Files\\OpenVPN\\log\\OpenVpn.log"
push "route 192.168.aaa.0 255.255.255.0"
push "redirect-gateway def1"
route 192.168.bbb.0 255.255.255.0 10.200.0.1
これらのオプションは次のような意味を持っています。
行番号 | オプション | 設定値 | 意味 |
---|---|---|---|
1 | proto | udp | OpenVPNが使用するプロトコルを指定します。 udp はデフォルトのプロトコルですが、ここでは混乱を避けるため明示的に指定します。 |
2 | port | 1194 | OpenVPNがリッスンするローカルポートを指定します。 これもデフォルト値は1194ですが、混乱を避けるため明示的に指定します。 有効なポート番号であればどの番号でも使用可能です。 |
4 | dev | tun |
サーバーに使用されるデバイスモードを指定します。 |
6 | server | 10.200.0.0 255.255.255.0 | OpenVPNをサーバーモードに指定します。 続くIPサブネットとサブネットマスクは、VPNサーバーとクライアントに使用するサブネットとマスクを指定します。 この指定により VPNサーバーには最初のアドレスつまりこの場合、10.200.0.1 が割り当てられます。 そしてクライアントのアドレスは接続された順番に従って 10.200.0.2 以降が順に割り当てられます。 |
7 | topology | subnet | VPNをクライアント/サーバ型で構成することを指定します。 |
9 | persist-key | OpenVPNに、トンネルが再開された場合でも、新しい鍵を生成しないように指定します。 | |
10 | persist-tun | OpenVPNに、トンネルが再開された場合でも、TUNデバイスを再度オープンしないように指定します。 | |
11 | keepalive | 10 60 |
各クライアントに対し |
13 | remote-cert-tls | client | TLS認証鍵 を持つVPNクライアントからの接続のみを許可するよう指定します。 |
14 | tls-auth | “C:\\Program Files\\OpenVPN\\config\\ta.key” 0 | TLS認証鍵 へのパスを指定します。 パラメータ 0 はキーの方向性を表しており、サーバー側では0を指定します。 (クライアント側では1を指定します) |
16 | dh | “C:\\Program Files\\OpenVPN\\config\\dh2048.pem” | DHパラメータファイル へのパスを指定します。 |
17 | ca | “C:\\Program Files\\OpenVPN\\config\\ca.crt” |
認証局証明書へのパスを指定します。 |
18 | cert | “C:\\Program Files\\OpenVPN\\config\\server_1.crt” | サーバー用証明書 へのパスを指定します。 |
19 | key | “C:\\Program Files\\OpenVPN\\config\\server_1.key” | サーバー用秘密鍵 へのパスを指定します。 |
21 | verb | 3 | ログ出力の出力レベルを指定します。 3 を指定するとTLSのネゴシエーションとルート情報まで表示します。 |
22 | cipher | AES-256-GCM | VPN接続に使用する暗号アルゴリズムを指定します。 |
23 | auth | SHA256 | VPN接続に使用するメッセージダイジェストアルゴリズムを指定します。 |
25 | log-append | “C:\\Program Files\\OpenVPN\\log\\OpenVpn.log” | ログファイルへのパスを指定します。 |
27 | push | “route 192.168.aaa.0 255.255.255.0” |
サーバ側からクライアント側ヘプッシュするコマンドを指定します。 |
28 | push | “redirect-gateway def1” |
同様にサーバ側からクライアント側ヘプッシュするコマンドを指定します。ここではクライアント側にデフォルトゲートウェイを def1 指定つまり全てのトラフィック安全なVPN経由とするよう指定しています。 |
30 | route | 168.bbb.ccc.0 255.255.255.0 10.200.0.1 |
サーバのルーティングテーブルにclient_1 のサブネット向けのルートを追加します。 |
route オプションの完全な構文は次のようになっています。
route <ネットワーク> <ネットマスク> [ゲートウェイ] [メトリック]
ここでゲートウェイは
- 省略=>vpn_gateway がデフォルト値として選択される
- IPv4 アドレスを明示的に設定する
- vpn_gateway を指定する=> VPN経由(つまりVPNサーバ経由)でルーティングする
- net_gateway を指定する => VPN 接続が確立される前のデフォルトゲートウエイを使用する
またメトリックは、特定のネットワークへのルートが異なるルートで到達できる場合に、どのルートを優先するかを決定するために使用される数値で、メトリックが低いほど、そのルートが優先されます。
OpenVPN の設定ファイルで、Windows のパスを指定するときは、バックスラッシュ文字がOpenVPNの中でエスケープ文字として解釈されるため、バックスラッシュ文字 “\” ではなく、2つのバックスラッシュ文字 “\\” を使う必要があります。
このコンフィグレーションファイルの中で暗号アルゴリズム、メッセージダイジェストアルゴリズムに
- cipher AES-256-GCM
- auth SHA256
を選んだ理由は、以下の記事で Galaxy Note 20 Ultra 5G / Android13 が利用可能な暗号アルゴリズム、メッセージダイジェストアルゴリズムの中でこれらが一番セキュリティレベルが高いことが確認できたためです。
サーバーからクライアントへルーティング情報を伝えるやりかたには
- サーバ側でプッシュオプションを使用する方法
- クライアントの構成ファイルに手動でルートを追加する方法
という方法がありますが、新しいネットワークルートがサーバー側に追加されるたびに、すべてのクライアント構成ファイルを手動で更新するのは手間なので、サーバー側でプッシュオプションを使うほうが運用上楽ですね。
一般的に ネットカフェ等の危険な環境では VPNを使用してすべてのトラフィックを安全なトンネル経由でルーティングしたほうが安全ですね。
このデフォルトゲートウェイのリダイレクトは、サーバー設定ファイルに
push “redirect-gateway def1”
を追加することで実現出来ます。
またモバイル端末側の OpenVPN Clientの実IPアドレスは接続のタイミングごとに変わること、Server側がモバイル端末側の実アドレスにアクセスする必要性がないため、サーバのルーティングテーブルにはモバイル端末向けの client_2 のサブネット向けのルートを追加する必要はありません。
OpenVPN Server の起動方法
openvpn は通常以下のようにエキスプローラ上で先ほど作成した
任意の名前.ovpn
をマウスでクリックし、右ボタンでコンテキストメニューを表示したうえで
Start OpenVPN on this config file
を選択することで起動します。
先ほど statickey_server.ovpn という名前で OpenVPN Server 用コンフィグファイルを作成していますので
で Windows Server 内に OpenVPN サーバが起動します。
OpenVPNのコンテキストメニュー
なお OpenVPNを起動すると、 Windows Server のデスクトップ画面下部のタスクバー右側のアクションセンターアイコン中にある△アイコンをクリックしたさい、以下のOpenVPNのアイコンが表示されます。
これをマウスでクリックし、右ボタンを押して表示される以下のようなコンテキストメニューから、このコンフィグレーションファイルの編集を行うための設定の編集を含めた各種の操作を行うことが出来ます。
この記事は主に以下の参考図書を参考にして記載しています。
洋書ですが今は ChatGPT などで気軽に翻訳、関連情報が検索できるので、以外に簡単に読めますよ。OpenVPNを極めたい方にはお勧めの一冊です。
OpenVPN Server の環境設定と動作確認方法
Windows Defender ファイアウォール設定
続いて Windows Defender ファイアウォールを起動しOpenVPNの利用ポート(TCP/UDPの1194番)をドメイン、プライベート、パブリックの全てを受信可能にします。
具体的にはまず
① Windowsの設定 画面から 更新とセキュリティ をクリックし
② 左のメニューから Windows セキュリティ を選択し
③ 出て来た画面から ファイアウォールとネットワーク保護 をクリックし
④ さらに 詳細設定 をクリックします。
⑤ すると セキュリティが強化された Windows Defender ファイアウォール 画面が現れるので、左側から 受信の規則 をクリックします。
⑥ そして右側の操作メニューから 新しい規則… をクリックすると
⑦ 新規の受信の規則ウィザード画面が現れるので ポート(O) をクリックして
⑧ 次へ(N) > ボタンをクリックし
⑨ TCP(T) をクリック後に 特定のローカルポート(S):入力フィールドに 1194 と入力し
次へ(N) > ボタンをクリックし
⑩ 接続を許可する(A) をクリック後、次へ(N) > ボタンをクリックし
⑪ドメイン(D) / プライベート(P) / パブリック(U) の全てのチェックボックスにチェックを入れ、次へ(N) > ボタンをクリックし
⑫ この受信ルールに対する名前を 名前(N): 入力フィールドに入力後、完了(F) ボタンをクリックして OpenVPN のTCPポート用の受信ルールの完成です。
そして⑥~⑫の手順をもう一度()
⑨の部分のみ
UDP(U) をクリック後に 特定のローカルポート(S):入力フィールドに 1194 と入力して
実行すると OpenVPN のUDPポート用の受信ルールの完成です。
作成された2つのルールを一覧表で見ると以下のようになっていると思います。
IPトラフィックフォワーディング設定
次に OpenVPNサーバー向けのLAN上のIPトラフィックをOpenVPN にフォワーディングする必要があります。
具体的にはまず管理者権限でコマンドプロンプトを起動し、
ipconfig
コマンドを入力し、アダプタの名前を確認します。
Microsoft Windows [Version 10.0.17763.3887]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\Administrator.SERVER_1>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット 2:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
不明なアダプター OpenVPN Wintun:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80:::::13cb%10
IPv4 アドレス . . . . . . . . . . . .: 192.168.aaa.11
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.aaa.1
不明なアダプター OpenVPN TAP-Windows6:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80:::::4e8d%15
IPv4 アドレス . . . . . . . . . . . .: 10.200.0.1
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:
これにより
不明なアダプター OpenVPN TAP-Windows6
というアダプタが作成されているのが確認できますので続けて
interface ipv4 set interface “OpenVPN TAP-Windows6” forwarding=enabled
というコマンドを入力してLAN側からVPN向けのIP転送を有効化します。
C:\Users\Administrator.SERVER_1>netsh interface ipv4 set interface "OpenVPN TAP-Windows6" forwarding=enabled
OK
念のため
netsh interface ipv4 show interfaces
コマンドを入力すると
C:\Users\Administrator.SERVER_1>netsh interface ipv4 show interfaces
Idx Met MTU 状態 名前
--- ---------- ---------- ------------ ---------------------------
1 75 4294967295 connected Loopback Pseudo-Interface 1
5 5 65535 disconnected OpenVPN Wintun
10 25 1500 connected イーサネット
15 25 1500 connected OpenVPN TAP-Windows6
8 5 1500 disconnected イーサネット 2
C:\Users\Administrator.SERVER_1>
OpenVPN TAP-Windows6 が ipv4 で connected (接続状態)にあることが確認できます。
OpenVPN Server の動作確認方法
ここで管理者権限でコマンドラインから
ping 10.200.0.1
コマンドを入力すると
C:\Users\Administrator.SERVER_1>ping 10.200.0.1
10.200.0.1 に ping を送信しています 32 バイトのデータ:
10.200.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128
10.200.0.1 の ping 統計:
パケット数: 送信 = 3、受信 = 3、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
Ctrl+C
^C
C:\Users\Administrator.SERVER_1>
という応答があるのでこの OpenVPN サーバがきちんと動作していることが確認できます。
まとめ
この記事では、自宅LAN環境にOpenVPN Serverを導入する手順を順に紹介しました。
- OpenVPN Server の起動方法
- OpenVPN Server のコンフィグファイル作成方法
- OpenVPN Server の環境設定と動作確認方法
このOpenVPN Serverを立ち上げることで、自宅外から安全に自宅LANにアクセスすることが可能になります。
この記事が読者の方に少しでもお役にたてると幸いです。
こんにちは!しらかば堂(@shirakabado)です。