WindowsをOpenVPNサーバーにして、MacとiPhoneから接続するまでのメモ。

環境

  • 回線はNTTフレッツ光
  • グローバルIPは1個
  • ローカルネットは192.168.9.0/24
  • ルーターが192.168.9.1
  • OpenVPNサーバーにするマシンが192.168.9.200
  • グローバルIPを持つルーター内にWindows 10のマシン(これをOpenVPNサーバーにする)
  • ルーター内にSynologyのNAS(こいつの機能でSynology提供のDDNSを使う)

この記事に書いてあること

  • Windows 10をOpenVPNサーバーにするためOpenVPNを設定完了するまで
  • サーバーモードはTun(ルーティング方式)とTap(ブリッジ方式)の両方を同時使用可能にする
  • 認証は証明書認証
  • OpenVPNはWindowsのサービスとして動かします
  • フレッツ光のPR-400KIの設定方法
  • Macから接続するための設定(Tunnelblickを使用)
  • iPhoneでオンデマンド接続(自宅Wi-Fi以外のときだけ自動でVPN接続)するための構成プロファイルの作成

Windows 10にOpenVPNをインストールする

OpenVPNのサイトからインストーラーがダウンロードできるので、画面の指示に従う。
インストールするコンポーネントを選ぶところで、EasyRSA〜にチェックを入れて一緒にインストールする事。

証明書認証のための準備〜証明書作成

コマンドプロンプトを起動、念のため管理者として起動で作業しました。
OpenVPNインストール先の下 “easy-rsa” フォルダへcdコマンドで移動。

下記の順でコマンドを実行

  1. init-config
  2. vars
  3. clean-all
  4. build-ca

build-caでは名前などの入力を求められるので、分かりやすい名前を入力しておけば良いと思う。
次にサーバー証明書と鍵の作成。

build-key-server server

いくつか質問されるので Yes で。

次にクライアント用の証明書と鍵。

build-key username

usernameを任意の分かりやすい名前で入力。
必要な数だけ作る。
もちろんあとから追加することも可能です。
(その場合は init-config、vars まで実行したあとで build-key)

次にDHパラメータを作成。

build-dh

以上で、必要なファイルがkeysフォルダ下に作成されます。

次にOpenVPNインストール先の下 “bin” フォルダへcdコマンドで移動。
下記のコマンドを実行する。

openvpn –genkey –secret ta.key

ta.keyファイルが作成されます。追加のセキュリティとして必要になります。

PR-400KIの設定

外部からIPv4のUDPでOpenVPNサーバーに通信出来るようにする必要があります。
しかし、フレッツ光でIPv6ありの状態だと、通常の設定画面に入ってもIPv4のNAPT設定は出てきません。

その場合は下記のURLでアクセスしてみましょう。
(この例ではPR-400KIのアドレスが 192.168.9.1)

http://192.168.9.1:8888/t

IPv4設定に入れます。
まずトップページに利用可能なポートが表示されていますので、この中から使用するポートを二つ選びましょう。

今回の例では Tap用に 12341、Tun用に 12342 を選択することにします。
静的NAPT設定で、対象プロトコル UDP、公開対象ポート 12341、宛先アドレス 192.168.9.200、宛先ポート12341 と設定。
同じように 12342 も設定します。

サーバー設定ファイルの作成例(Tap)およびWindowsの設定

OpenVPNインストール先にサンプルファイルがあります。
拡張子はovpnです。
それをベースに設定しました。
(コメント等は省略)

# 使用するポート(この例では 12341)
port 12341

# TCP or UDP server?(この例ではUDP)
;proto tcp
proto udp

# この例ではTap
dev tap
;dev tun

# Windowsのイーサネット名。分かりやすい名前にしておけば良いと思う(この例では TAP)
dev-node TAP

# caなどのファイル名
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret

# DHパラメータのファイル名
dh dh2048.pem

# Tunのときに使います。この例ではTapなのでコメントアウト
;server 192.168.100.0 255.255.255.0

# クライアントのIPアドレス固定関係みたい。
ifconfig-pool-persist ipp_tap.txt

# この例ではOpenVPNサーバーが 192.168.9.200、マスクが 255.255.255.0 で
# クライアントには 192.168.9.201 から 192.168.9.254 までのIPアドレスが割り振られます。
server-bridge 192.168.9.200 255.255.255.0 192.168.9.201 192.168.9.254

# ルーティング情報をクライアントにプッシュするみたい
# ローカルネットの設定に合わせましょう。
push "route 192.168.9.0 255.255.255.0"

# キープアライブ
keepalive 10 120

# 追加のセキュリティ
tls-auth ta.key 0 # This file is secret

# 暗号化の設定
cipher AES-256-CBC

# よく分からない
persist-key
persist-tun

# ログがほしい
status openvpn_server_tap-status.log

# ログがほしい
log-append  openvpn_server_tap.log

# ログレベル
verb 3

# サーバーのリスタート時にクライアントに通知するみたい?
explicit-exit-notify 1

# ユーザの証明書を失効させた場合に使うが、今回は割愛。
;crl-verify crl.pem

この設定ファイルや各証明書などをOepnVPNインストール先の下の “config” フォルダに配置します。

次にWindows 10の設定です。

コントロールパネルのネットワークと共有センターから、アダプターの設定の変更へ進み、”TAP-Windows Adapter V9″ を選択し、名前を変更で上記で設定した “TAP” という名前にします。
これとローカルネットに繋がっているアダプタの二つを選択した状態で右クリックし、ブリッジ接続を作成します。

作成されたブリッジ接続の設定で、今回の例ではIPアドレスを 192.168.9.200 に固定します。
デフォルトゲートウェイやDNSなども環境に合わせて設定します。

以上でTap用のサーバー側設定は完了です。

コンピュータの管理から “OpenVPNService” を実行すると動きます。

クライアント設定ファイルの作成例(Tap)

OpenVPNインストール先にサンプルファイルがあります。
拡張子はovpnです。
それをベースにしました。

# クライアントなので
client

# Tap
dev tap
;dev tun

# UDPを使う
;proto tcp
proto udp

# ここにDDNSなどのアドレスとポート
remote yourddns.hogehoge.jp 12341

# とりあえずサンプルのまま
resolv-retry infinite

# とりあえずサンプルのまま
nobind

# とりあえずサンプルのまま
persist-key
persist-tun

# ca.crt とクライアント証明書と鍵のファイル名
ca ca.crt
cert username.crt
key username.key

# とりあえずサンプルのまま
remote-cert-tls server

# とりあえずサンプルのまま
tls-auth ta.key 1

# 暗号化
cipher AES-256-CBC

# ログレベル
verb 3

以上です。

クライアント側ではこの設定ファイルと、ca.crt、クライアント用の証明書と鍵(username.crt、username.key)、ta.keyが必要です。

Macで接続してみる

Tunnelblickをインストールします。

Tunnelblickを起動して、接続先の欄にovpnファイルをドラッグ&ドロップで追加します。
設定の詳細設定で “手動でセットされたネットワーク設定への変更を許可する” にチェックを入れます。

これで接続出来るようになりました。

iPhoneを接続するために

iOSではTapモードでOpenVPNサーバーへ接続することが仕様上出来ないようです。

Tunも追加するためのWindowsの設定

OpenVPNをインストールした時に “TAP-Windows Adapter V9” がひとつ追加されますが、もう一つ追加します。

C:¥Program Files¥TAP-Windows¥bin

にある “addtap.bat” を管理者として実行すると追加されます。
追加されたアダプタの名前を分かりやすいものに変更します。
今回の例では “TAP2” に変更しました。

また、Tunの場合、Windowsのレジストリ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter
を 1 にする必要があるようです。

あと “Routing and Remote Access” サービスの実行も必要かも?

サーバー設定ファイルの作成例(Tun)

# ポート。もちろんTapで使うものとかぶってはダメ
port 12342

# UDP
;proto tcp
proto udp

# Tunにする
;dev tap
dev tun

# 上記でTAP2という名前にしたので
dev-node TAP2

# Tapの例と同じ
# 使い回せば良いと思う
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret

dh dh2048.pem

# 仮想アドレスの設定
server 192.168.10.0 255.255.255.0

# Tapの例とは違うファイル名に
ifconfig-pool-persist ipp_tun.txt

# Tunではこれはコメントアウトなり削除なり
;server-bridge 192.168.9.200 255.255.255.0 192.168.9.201 192.168.9.254

# Tapの例と同じ
push "route 192.168.9.0 255.255.255.0"

# 全部VPN経由させたい
push "redirect-gateway def1 bypass-dhcp"

# キープアライブ
keepalive 10 120

# 追加セキュリティ
tls-auth ta.key 0 # This file is secret

# 暗号
cipher AES-256-CBC

# よく分からない
persist-key
persist-tun

# ログ
status openvpn_server_tun-status.log

# ログ
log-append  openvpn_server_tun.log

# ログレベル
verb 3

# サーバーリスタート通知?
explicit-exit-notify 1

# 今回は割愛
;crl-verify crl.pem

以上。

Tapの例と同じく、OpenVPNインストール先の “config” フォルダに配置。
“OpenVPNService” を再起動で実行される。

PR-400KIのルーティング設定

LAN側静的ルーティングで、宛先 192.168.10.0/24、ゲートウェイ 192.168.9.200 と設定する。

iPhoneの接続設定について

まず “OpenVPN Connect” アプリをインストールします。
単純に接続するだけならovpnファイルを作って “OpenVPN Connect” アプリで読み込むだけなのですが、これだとVPN接続と切断の管理がめんどくさいです。

なので自宅のWi-Fiに接続されたらVPN切断、自宅以外になったらVPN接続、と言うことを自動化します。

そのためにはプロファイルを作成する必要があります。
なお、この場合でも “OpenVPN Connect” アプリはインストールしておく必要があります。

iPhoneのプロファイル作成前に

プロファイルを作成する前に、まずクライアントの証明書と鍵をPKCS12にする必要があります。
OpenVPNインストール先の “bin” フォルダで、下記のような感じ。

oepnssl pkcs12 -export -in username.crt -inkey username.key -out username.p12

パスワードを聞かれるので設定しておきましょう。

このファイルをあとで使います。

iPhoneのプロファイル作成とインストール

本記事ではMacで作成する方法を紹介します。
Windowsでも作成できるらしいですが、よく分かりません。

まずMacのApp Storeで “Apple Configurator 2” を入手しましょう。

iPhoneをMacにUSBで接続して Apple Configurator 2 を起動します。
ファイルメニューから新規プロファイルを作成します。

一般タブの設定を入力します。
分かりやすい名前と、一意の識別子くらいです。

次に証明書タブを開き、PKCS12ファイルを読み込みます。

次にVPNタブを開き、VPN設定です。

接続名に分かりやすい名前を入力。
接続タイプは “カスタムSSL” を選択し、識別子には net.openvpn.connect.app と入力します。
サーバーには DEFAULT と入力します。

カスタムデータには、ovpnファイルに設定する内容を入力していきます。
キーに “port”、値に “12342” といった感じで、値に入れるべきものがない場合は “NOARGS” とします。

今回の例では、まず下記のように入力していきます。

  • cipher に AES-256-CBC
  • client に NOARGS
  • dev に tun
  • nobind に NOARGS
  • persist-key に NOARGS
  • persist-tun に NOARGS
  • port に 12342
  • proto に udp
  • remote に DDNSのアドレスなど
  • remote-cert-tls に server
  • resolv-retry に infinite
  • key-direction に 1

あとは ca と tls-auth ですが、これはまずテキストエディタで ca.crt を開き、全体をコピーなどしておいた上で、
—–BEGIN CERTIFICATE—–
のあとに \n
—–END CERTIFICATE—–
の前後に \n を追加し、改行を取り除きます。

結果、

—–BEGIN CERTIFICATE—–\nDATADATADATADATADATA……DATADATADATA\n—–END CERTIFICATE—–\n

のようにしたものをコピペします。

tls-auth も ta.key を同じように処理したものをコピペします。

あとは、ユーザー認証を証明書にし、資格情報を選択します。
オンデマンドVPNを有効にする、にチェックを入れておきます。

以上で Apple Configurator 2 で設定できる項目の設定は完了です。
ファイルに保存しましょう。
1件エラーがあると言われますが無視して問題ないようです。

まだ接続・切断を自動化する設定が出来ていませんが、これはどうも Apple Configurator 2 で出来ない?みたいなので、保存したプロファイルをテキストエディタで開いて設定を書いていきます。

<key>OnDemandEnabled</key>
<integer>1</integer>

となっている部分があると思います。
ここを下記のように書き換えます。

<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
	<dict>
		<key>Action</key>
		<string>Disconnect</string>
		<key>SSIDMatch</key>
		<array>
			<string>自宅Wi-FiのSSID</string>
		</array>
	</dict>
	<dict>
		<key>Action</key>
		<string>EvaluateConnection</string>
		<key>Action</key>
		<array>
			<dict>
				<key>InterfaceTypeMatch</key>
				<string>WiFi</string>
			</dict>
		</array>
	</dict>
	<dict>
		<key>Action</key>
		<string>EvaluateConnection</string>
		<key>Action</key>
		<array>
			<dict>
				<key>InterfaceTypeMatch</key>
				<string>Cellular</string>
			</dict>
		</array>
	</dict>
	<dict>
		<key>Action</key>
		<string>Connect</string>
		<key>InterfaceTypeMatch</key>
		<string>WiFi</string>
	</dict>
	<dict>
		<key>Action</key>
		<string>Connect</string>
		<key>InterfaceTypeMatch</key>
		<string>Cellular</string>
	</dict>
</array>

これで保存して、あとは Apple Configurator 2 で iPhone にインストール。

おわりに

今後は機会があればユーザーを失効させる方法なども…予定は未定です。

あとやっぱり電気代がアレなので、近いうちに小型PCを用意してCentOSを入れOpenVPNサーバーにしようと思います。