【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

こんにちは!しらかば堂(@shirakabado)です。

【自宅VPN構築】#11 自宅LANにOpenVPNを導入して外出先の Android スマホから自宅のNAS、Windows 10 搭載PCにアクセスしよう
【自宅VPN構築】#12 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 の環境設定と動作確認方法

 

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

ここではOpenVPNを設置する PC のOSをWindows Server 2019 Essentials としていますが、常時起動さえされていればWindows 10でも共通なので自宅にWindows Server をお持ちでない方もご参考にして頂けると幸いです。

 

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
自宅内無線LAN環境でのVPN接続図
【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

Galaxy Note 20 Ultra 5G / Android 13からNASへのデータ取り出しや、Windows 10 搭載 PCへのRDP接続には、あらかじめGoogle Playから以下のアプリをインストールされ、運用されている必要があります。

 

OpenVPN Server のコンフィグファイル作成方法

OpenVPNのコンフィグファイル保存フォルダ

以下の関連記事の手順を完了すると、OpenVPN Serverのコンフィグファイル保存フォルダの中身は以下のようになっています。

【自宅VPN構築】#12 Windows 2019 Server Essentials 搭載 PC にOpenVPN Serverを設置しよう
【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
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接続
【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

OpenVPNには、tunモードとtapモードの2つのデバイスモードがありますが、ここではtunモードを使用します。tun/tapは、Unix/Linuxの世界から来た考え方で、オペレーティングシステムの一部としてトラフィックを扱う方法です。

  • tun: IPレベルのトラフィックをポイントツーポイントアダプターとしてあつかうデバイスモード
  • tap: 全てのトラフィックを仮想イーサネットアダプターとしてあつかうデバイスモード

ここでご参考情報として OpenVPN の中身について少しだけご紹介しておきます。

この図はホスト側の端末(例えば Windows 10の搭載されたPC)上のユーザーアプリケーションからOpenVPNを介してリモート側の端末にトラフィックを送信する様子を示しています。ここでアプリケーションから送信されたパケットは、次のように処理されます。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
  1. アプリケーションはパケットをオペレーティングシステムに渡します。
  2. オペレーティングシステムは通常のルーティングルールに基づき、パケットをVPN経由でルーティングする必要があることを決定し、このパケットをカーネルの tunドライバに転送します
  3. カーネルtunドライバは、OpenVPNプロセスにパケットを転送します。
  4. OpenVPNプロセスはパケットを暗号化、署名し、フラグメンテーションし、そして再びカーネルにパケットを渡してethドライバ経由でリモートVPNエンドポイントのアドレスに送信します。
  5. そしてリモート側では、同じプロセスが逆に実行されます。

 

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

それでは 以下にこの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

サーバーに使用されるデバイスモードを指定します。
ここでは IPトラフィックのみをポイントツーポイントアダプターとしてあつかいたいので
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

各クライアントに対し
10秒ごとにpingメッセージを送信し
クライアントが120秒以内(2 * 60 = 120)に応答しない場合、接続を再起動するよう
またこのステートメントを各クライアントにプッシュするよう
指定します。

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”

サーバ側からクライアント側ヘプッシュするコマンドを指定します。
(クライアント側ではプルが必要です)
ここではクライアント側に自宅LAN側サブネットへアクセスするためのルーティングを指定します。

28 push “redirect-gateway def1”

同様にサーバ側からクライアント側ヘプッシュするコマンドを指定します。ここではクライアント側にデフォルトゲートウェイを def1 指定つまり全てのトラフィック安全なVPN経由とするよう指定しています。

30 route 168.bbb.ccc.0 255.255.255.0 10.200.0.1

サーバのルーティングテーブルにclient_1 のサブネット向けのルートを追加します。
ここでは混乱を避けるためデフォルトゲートウエイに 10.200.0.1 を明示的に指定します。

route オプションの完全な構文は次のようになっています。

route <ネットワーク> <ネットマスク> [ゲートウェイ] [メトリック]

ここでゲートウェイ

  • 省略=>vpn_gateway がデフォルト値として選択される
  • IPv4 アドレスを明示的に設定する
  • vpn_gateway を指定する=> VPN経由(つまりVPNサーバ経由)でルーティングする
  • net_gateway を指定する => VPN 接続が確立される前のデフォルトゲートウエイを使用する

またメトリックは、特定のネットワークへのルートが異なるルートで到達できる場合に、どのルートを優先するかを決定するために使用される数値で、メトリックが低いほど、そのルートが優先されます。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

OpenVPN の設定ファイルで、Windows のパスを指定するときは、バックスラッシュ文字がOpenVPNの中でエスケープ文字として解釈されるため、バックスラッシュ文字 “\” ではなく、2つのバックスラッシュ文字 “\\” を使う必要があります

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

このコンフィグレーションファイルの中で暗号アルゴリズム、メッセージダイジェストアルゴリズムに

  • cipher AES-256-GCM
  • auth SHA256

を選んだ理由は、以下の記事で Galaxy Note 20 Ultra 5G / Android13 が利用可能な暗号アルゴリズムメッセージダイジェストアルゴリズムの中でこれらが一番セキュリティレベルが高いことが確認できたためです。

【自宅VPN構築】#10 Galaxy Note 20 Ultra 5G の IKEv2/IPSec パケットをWireSharkで分析する
【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

サーバーからクライアントへルーティング情報を伝えるやりかたには

  • サーバ側でプッシュオプションを使用する方法
  • クライアントの構成ファイルに手動でルートを追加する方法

という方法がありますが、新しいネットワークルートがサーバー側に追加されるたびに、すべてのクライアント構成ファイルを手動で更新するのは手間なので、サーバー側でプッシュオプションを使うほうが運用上楽ですね。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

一般的に ネットカフェ等の危険な環境では VPNを使用してすべてのトラフィックを安全なトンネル経由でルーティングしたほうが安全ですね。

このデフォルトゲートウェイのリダイレクトは、サーバー設定ファイルに
push “redirect-gateway def1”
を追加することで実現出来ます。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

またモバイル端末側の OpenVPN Clientの実IPアドレスは接続のタイミングごとに変わること、Server側がモバイル端末側の実アドレスにアクセスする必要性がないため、サーバのルーティングテーブルにはモバイル端末向けの client_2 のサブネット向けのルートを追加する必要はありません。

OpenVPN Server の起動方法

openvpn は通常以下のようにエキスプローラ上で先ほど作成した

任意の名前.ovpn

をマウスでクリックし、右ボタンでコンテキストメニューを表示したうえで

Start OpenVPN on this config file

を選択することで起動します。

先ほど statickey_server.ovpn という名前で OpenVPN Server 用コンフィグファイルを作成していますので

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


で Windows Server 内に OpenVPN サーバが起動します。

OpenVPNのコンテキストメニュー


なお OpenVPNを起動すると、 Windows Server のデスクトップ画面下部のタスクバー右側のアクションセンターアイコン中にある△アイコンをクリックしたさい、以下のOpenVPNのアイコンが表示されます。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
Windows Server アクションセンター


これをマウスでクリックし、右ボタンを押して表示される以下のようなコンテキストメニューから、このコンフィグレーションファイルの編集を行うための設定の編集を含めた各種の操作を行うことが出来ます。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

 

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう
しらかば堂

この記事は主に以下の参考図書を参考にして記載しています。
洋書ですが今は ChatGPT などで気軽に翻訳、関連情報が検索できるので、以外に簡単に読めますよ。OpenVPNを極めたい方にはお勧めの一冊です。

OpenVPN Server の環境設定と動作確認方法

Windows Defender ファイアウォール設定

続いて Windows Defender ファイアウォールを起動しOpenVPNの利用ポート(TCP/UDPの1194番)をドメイン、プライベート、パブリックの全てを受信可能にします

具体的にはまず
Windowsの設定 画面から 更新とセキュリティ をクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

② 左のメニューから Windows セキュリティ を選択し

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


③ 出て来た画面から ファイアウォールとネットワーク保護 をクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


④ さらに 詳細設定 をクリックします。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


⑤ すると セキュリティが強化された Windows Defender ファイアウォール 画面が現れるので、左側から 受信の規則 をクリックします。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


⑥ そして右側の操作メニューから 新しい規則… をクリックすると

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


⑦ 新規の受信の規則ウィザード画面が現れるので ポート(O) をクリックして

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


次へ(N) > ボタンをクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

TCP(T) をクリック後に 特定のローカルポート(S):入力フィールドに 1194 と入力し
次へ(N) > ボタンをクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


接続を許可する(A) をクリック後、次へ(N) > ボタンをクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


⑪ドメイン(D) / プライベート(P) / パブリック(U) の全てのチェックボックスにチェックを入れ、次へ(N) > ボタンをクリックし

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


⑫ この受信ルールに対する名前を 名前(N): 入力フィールドに入力後、完了(F) ボタンをクリックして OpenVPN のTCPポート用の受信ルールの完成です。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう


そして⑥~⑫の手順をもう一度()
⑨の部分のみ
UDP(U) をクリック後に 特定のローカルポート(S):入力フィールドに 1194 と入力して
実行すると OpenVPN のUDPポート用の受信ルールの完成です。

作成された2つのルールを一覧表で見ると以下のようになっていると思います。

【自宅VPN構築】#13 Windows 2019 Server Essentials 搭載 PC で OpenVPN Serverを立ち上げよう

 

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にアクセスすることが可能になります。

この記事が読者の方に少しでもお役にたてると幸いです。

【自宅VPN構築】#14 Windows 10 搭載 PC にOpenVPN Client を設置し、OpenVPN Serverと接続しよう