はじめに
Azure 上に構築した検証環境に、物理 PC からアクセスさせる必要が生じたため、この構成を検証することにしました。
なお、Azure の場合は、VPN Gateway を構築しても良いのですが、サービスを止める事ができず、ずっと課金されてしまいます。必要な時だけ 起動して利用ができた方がコストメリットが高い為、仮想マシン上に リモートアクセスの役割サービス (RAS) を導入し VPN でアクセスできる仕組みを考えました。
この方法なら、使わない時に VM を停止して 課金を抑制できます。
なお、証明書 や Azure 側のルーティングなど、結構ハマりどころがありますが、必要な手順は全て盛り込んであります。
この記事の情報が、構築成功の一助になれれば幸いです。
私の検証実績として、SSTP で利用できることを確認済みです。
SSTP は、TCP : 443 だけで動作するプロトコルであり柔軟性が高いです。
RAS は 他にも IKEv2 , L2TP , PPTP などの VPN プロトコルを利用できますが、
SSTP 以外のプロトコルは GRE や、IP:50 など TCP / UDP 以外のプロトコルを使用するため、Azure が対応していない可能性が高いです。NSG を全開放してもダメでした。
構成イメージ
下図の 緑色 の VPN ルーター の箇所に Windows Server の VM をデプロイし、RAS の 役割サービスをインストールします。
こうすることで、黄緑色の VPN クライアントから、オレンジ色の VM や、ピンク色の外部ネットワークと 相互 に通信ができるようになります。
相互 が可能なので、VM から VPN クライアントへの接続もできます。
VPN ルーター に設定する アドレスプール は、Azure 側、VPN クライアント側 の双方で利用されていないアドレス帯にする 必要 があります。
もし、Azure 側 や VPN クライアント側 のアドレス帯と競合していると、通信が行えません。
設定を行う際に、意識して どことも競合しない アドレス帯 を決めてください。
構築手順
以下の手順の実施が必要です。
手順が多いですが、全て 漏れなく実施する必要があります。
- VPN サーバー を Azure 仮想マシンとしてデプロイする
- VPN サーバー に DNS 名 を付与する
- SSTP 用のサーバー証明書を発行する
- リモートアクセスの役割サービス を導入する
- RAS で VPN (SSTP) を構成する
- Azure 仮想ネットワークの構成変更
- ドメインユーザーのプロパティ変更(VPN サーバーがドメイン参加している場合のみ)
- クライアント側の VPN 接続設定
- VPN 接続の実施
1. VPN サーバー を Azure 仮想マシンとしてデプロイする
Azure VM として Windows Server を展開してください。
→ この Azure VM を、VPN サーバー として仕立てていきます。
→ 以後、本記事内では このサーバーを "VPN サーバー" と表記します。
→ スタンドアロン (WORKGROUP) のサーバーで OK です(ドメイン参加でも可)
VPN サーバーは、通信をさせたい相手の VM(オレンジ色)と同じ仮想ネットワーク内に作成しましょう(サブネットは 異なっていても大丈夫です)
2. VPN サーバー に DNS 名 を付与する
Azure Portal で作業を行います。
SSTP で接続する場合、証明書で認証を行います。そのため、証明書に記載されている ホスト名での接続が必須になります(IP アドレスを指定すると NG)
これに対応するために、Azure VM の機能を用いて、DNS 名 を付与しておきます。
- 先ほど作成した VM の 概要 ページを開き、DNS 名 欄の 未構成 と書かれた箇所をクリックします。
- まず ① DNS 名ラベル 欄に、任意の名前を入力します。正常に受け付けられると、② の場所に v マークが表示されるため、③ 保存 を押します。
3.無事に受け付けられると、下図の赤枠のように DNS 名 が表示されます。
4.DNS 名が構成されると、以下のように インターネット上の任意の PC などから 名前解決 が出来るようになります。
公開情報:Azure portal で VM の完全修飾ドメイン名を作成する
3. SSTP 用のサーバー証明書を発行する
VPN サーバー上で作業を行います。
サーバー証明書は、以下の2通りの方法で作成できます。
いずれかの方法で作成できますが、① の方が簡単で お勧めです。
私の方では、どちらの方法も検証済みなので、ご安心ください。
① コマンドで テスト用の 自己署名の サーバー証明書 を作成する
テスト用に 自己署名証明書 を作成するための手順です。
そもそも この SSTP 接続は 運用で使うような代物でも無いと思うので、この方法で証明書を作ってしまって良いと思います。
以下の記事の手順で作成した証明書を使って、VPN (SSTP) の接続まで検証してあります。
② AD CS 証明機関 を使って、サーバー証明書 を作成する
証明書を作成するための 正式な手順です。
以下の URL で説明している AD CS を構築して、証明書要求から実施していく必要があります。
以下の記事のうち「1-1. NPS の導入」は、SKIP してしまって大丈夫です。
"npsradius.nps.local" の箇所を 前章 で設定した DNS 名(~.cloudapp.azure.com)に置き換えて作業してください。
4. リモートアクセスの役割サービス を導入する
VPN サーバー上で作業を行います。
リモートアクセスの役割サービス (RAS) をインストールします。
以後、記事内では、"RAS" と表記します。
5. RAS で VPN (SSTP) を構成する
"RAS" 上で作業を行います。
- サーバー マネージャーで、通知 フラグを選択します。 再起動直後は、通知フラグが表示されるまで、1、2 分待たなければならない場合があります。
-
VPN のみを展開します を選択して、ルーティングとリモート アクセス Microsoft 管理コンソール (MMC) を開きます。
※ このウィンドウが見当たらない場合は、サーバーマネージャーなどのその他の開いているウィンドウを すべて閉じてみてください(後ろに隠れています)
- VPN サーバー名 を右クリックし、ルーティングとリモート アクセスの構成と有効化 を選択して、ルーティングとリモート アクセス サーバーのセットアップ ウィザードを開きます。
-
ルーティングとリモート アクセス サーバーのセットアップ ウィザードの開始 で、次へ を選択します。
-
構成 で カスタム構成 を選択し、次へ を選択します。
-
カスタム構成 で VPN アクセス を選択し、次へ を選択します。
-
完了 を選択してウィザードを閉じます。
-
サービスの開始 を選択して ルーティングとリモート アクセス ダイアログ ボックスを閉じます。
- VPN サーバーが実行されたら、VPN サーバーを右クリックし、プロパティ を選択します。
-
セキュリティ タブを選択し、前章でインポートした サーバー証明書 を選択します。
選択肢に サーバー証明書 が表示されない場合は、ローカルコンピューター の 個人ストア に サーバー証明書 が配置されているか、再確認してください。
-
IPv4 タブを選択し、次の手順を実行します。
-
静的アドレス プールを使う を選択します。
追加 を選択して、IP アドレスプールを構成します。
※ Azure なので DHCP は使えません。
-
アドレスプール として使用するネットワークの範囲を入力します。
冒頭でも説明しましたが 他のネットワークと競合しないアドレス帯を設定してください。
開始 IP アドレス に、VPN クライアントに割り当てる範囲の開始IP アドレスを入力します。
終了 IP アドレス に、VPN クライアントに割り当てる範囲の終了 IP アドレスを入力するか、アドレスの数 に、使用可能にするアドレスの数を入力します。
-
OK を選択して、プロパティ ダイアログを閉じます。
6. Azure 仮想ネットワークの構成変更
Azure Portal で作業を行います。
6-1. ネットワークセキュリティグループ (NSG) の変更
VPN クライアントが、インターネットを経由して、VPN (SSTP) サーバーへアクセスするため、受信の規則で HTTPS(SSTP では HTTPS が採用されている)を許可する必要があります。
- VPN サーバー の画面を開き、左ペインから ネットワーク設定 を選択し、+ポートルールの作成 を開いたあと 受信ポートルール を選択します。
- 下図のとおり、HTTPS の 受信を許可する規則を設定して 追加 を押します。
- 以下の通知が表示されれば OK です。
- 登録後は、以下のように 設定が追加されていれば OK です。
6-2. 戻りのルーティング設定
Azure Portal で作業を行います。
以下の記事で説明されている 手順すべてを行います。
なお、前章まで実施した手順では、元々 NAT が無効なので、以下の記事の最終章で説明されている NAT を無効化する 手順は SKIP して大丈夫です。
RAS の役割サービスで NAT を有効にするためには、サーバーに NIC を2枚構成する必要があります。Azure 上で NIC を 2 枚構成すると、構成が複雑になるので、今回 採用は見送りました。
7. ユーザーのプロパティ変更
VPN サーバーが ドメインに参加している場合は、ドメインコントローラー上で 作業を行います。WORKGROUP の場合は、VPN サーバー上で作業を行います。
- Active Directory ユーザーとコンピューター を開きます。
WORKGROUP の場合は、コンピューターの管理 を開きます。
- VPN (SSTP) 接続時の認証に使用するユーザーを開いて ダイヤルイン タブを選択します。リモートアクセス許可 の設定を "アクセスを許可" に変更して OK します。
ユーザーの既定値は、"NPS ネットワークポリシーでアクセスを制御" になっているので、NPS 無しでは "RAS" のユーザー認証には使えません。
実は、ココが一番のハマりどころかもしれません。
8. クライアント側の VPN 接続設定
8-1. SSTP 接続 のための事前設定
VPN 接続を行いたい クライアント PC 上で作業を行います。
8-1-1. ルート証明書のインポート(コンピューターの信頼されたルート証明機関)
① 自己署名証明書 を作った場合
自己署名証明書 を作った場合は、以下の手順で、クライアントへ ルート証明書 をインポートしているハズですが、再確認してください。
Qiita記事:クライアントへ ルート証明書 をインポートする
https://qiita.com/carol0226/items/8663842e2c7422de7e55#8-クライアントへ-ルート証明書-をインポートする
② AD CS で サーバー証明書 を作った場合
以下の記事を参考にして、AD CS のルート証明書を クライアント PC の ローカルコンピューター の 信頼されたルート証明機関 にインポートします。
必ず、 ローカルコンピューター の 信頼されたルート証明機関 にインポートしてください。SSTP の場合は、現在のユーザー にインポートした場合は、VPN 接続できません。
8-1-2. 証明書失効確認の無効化
AD CS で証明書を作った場合のみ 必要 な作業です。
自己署名証明書 をコマンドで作成した場合は、本章は SKIP してください。
証明書の仕組みとして、その証明書が 有効かどうかを 証明機関にリアルタイムで確認する仕組み(失効確認)が存在します。
もし証明機関側で 証明書が無効化されていた場合は、クライアントは その証明書は無効であると判断して、VPN 接続は成立しません。
加えて、クライアントが 証明機関に失効確認ができなかった場合(証明機関と疎通確認が行えない)でも、VPN は繋がりません。この構成をおこなうのは 結構大変なため、失効確認を無効化する方法をお知らせします。
SSTP 接続時の 証明書失効確認を無効化する レジストリ
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Sstpsvc\Parameters
- NoCertRevocationCheck の値が 1 だと 無効
- NoCertRevocationCheck の値が 0 または キーが存在しない場合は 有効
なお、証明書失効の確認を無効化せずに、真面目に チェックさせようとする場合は、以下の記事を参考に構成して、VPN クライアントが、インターネット経由で失効リストにアクセスできるようにします。結構大変てすよ。
8-2. 接続のための設定
VPN で接続させたい、クライアント PC 上で操作を行います。
-
スタート > 設定 を選択します。
-
ネットワーク と インターネット > VPN を選択します。
-
VPN を追加 で、次の操作を行い、最後に 保存 を選択します。
① VPN プロバイダー で Windows (ビルトイン) を選択します。
② 接続名 ボックスに、認識しやすい名前 (「自分の VPN」など) を入力します。 これが、接続時に探す VPN 接続の名前になります。
③ サーバー名またはアドレス ボックスに、VPN サーバーの URL を入力します。
④ VPN の種類 で、Secure Socket トンネリング プロトコル (SSTP) を選びます。
⑤ サインイン情報の種類 で、ユーザー名とパスワード を選択します。 (必要に応じて) ユーザー名とパスワードをそれぞれのボックスに入力します。
- 保存されると、以下のような画面になるため、その他の VPN プロパティ 欄の 編集 を押します。
- 下図の通り Microsoft CHAP Version 2 (MS-CHAP v2) にチェックを入れて OK を押します。
公開情報:Windows で VPN に接続する
9. VPN 接続の実施
- 以下の通り、作成された 接続情報から 接続 ボタンをクリックすると、VPN 接続が開始されます。
- 接続に成功すると、以下のように表示されます。
- 接続されたあとに、**ipconfig /all を実行すると、PPP アダプター が追加されていることが判ります。
- 仮想ネットワーク上の VM に対して Ping と Tracert を実行した結果は 以下の通りです。
なお、あらかじめ Windows Firewall で Ping 応答を許可しておいてください。
VPN サーバー自身の プライベート IP に対しては、Ping は通りません。
参考
RAS の機能については、以下の記事も参考になると思います。
私も、Azure の知識はあるつもりでしたが、RAS の知識が乏しかったので、以下の記事を参考にしました。