4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure 上に RAS の 役割サービス で VPN サーバー (SSTP) を構築する

Last updated at Posted at 2024-03-31

はじめに

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 クライアントへの接続もできます。

image.png

VPN ルーター に設定する アドレスプール は、Azure 側、VPN クライアント側 の双方で利用されていないアドレス帯にする 必要 があります。
もし、Azure 側 や VPN クライアント側 のアドレス帯と競合していると、通信が行えません。
設定を行う際に、意識して どことも競合しない アドレス帯 を決めてください。

構築手順

以下の手順の実施が必要です。
手順が多いですが、全て 漏れなく実施する必要があります。

  1. VPN サーバー を Azure 仮想マシンとしてデプロイする
  2. VPN サーバー に DNS 名 を付与する
  3. SSTP 用のサーバー証明書を発行する
  4. リモートアクセスの役割サービス を導入する
  5. RAS で VPN (SSTP) を構成する
  6. Azure 仮想ネットワークの構成変更
  7. ドメインユーザーのプロパティ変更(VPN サーバーがドメイン参加している場合のみ)
  8. クライアント側の VPN 接続設定
  9. 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 名 を付与しておきます。

  1. 先ほど作成した VM の 概要 ページを開き、DNS 名 欄の 未構成 と書かれた箇所をクリックします。
    image.png
     
  2. まず ① DNS 名ラベル 欄に、任意の名前を入力します。正常に受け付けられると、② の場所に v マークが表示されるため、③ 保存 を押します。
    image.png

なお 名前は 全世界でユニークとなる名前である必要があり、そうではない場合は「DNS 名ラベルは使用できません。別のラベルを使用してください。」というエラーが表示されます。この場合は、別の名前に変更してください。
image.png

3.無事に受け付けられると、下図の赤枠のように DNS 名 が表示されます。
image.png

4.DNS 名が構成されると、以下のように インターネット上の任意の PC などから 名前解決 が出来るようになります。
image.png

公開情報: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. サーバー マネージャーで、通知 フラグを選択します。 再起動直後は、通知フラグが表示されるまで、1、2 分待たなければならない場合があります。
    image.png
     
  2. VPN のみを展開します を選択して、ルーティングとリモート アクセス Microsoft 管理コンソール (MMC) を開きます。
    ※ このウィンドウが見当たらない場合は、サーバーマネージャーなどのその他の開いているウィンドウを すべて閉じてみてください(後ろに隠れています)
    image.png
     
  3. VPN サーバー名 を右クリックし、ルーティングとリモート アクセスの構成と有効化 を選択して、ルーティングとリモート アクセス サーバーのセットアップ ウィザードを開きます。
    image.png
     
  4. ルーティングとリモート アクセス サーバーのセットアップ ウィザードの開始 で、次へ を選択します。
    image.png
     
  5. 構成カスタム構成 を選択し、次へ を選択します。
    image.png
     
  6. カスタム構成VPN アクセス を選択し、次へ を選択します。
    image.png
     
  7. 完了 を選択してウィザードを閉じます。
    image.png
     
  8. サービスの開始 を選択して ルーティングとリモート アクセス ダイアログ ボックスを閉じます。
    image.png
     
  9. VPN サーバーが実行されたら、VPN サーバーを右クリックし、プロパティ を選択します。
    image.png
     
  10. セキュリティ タブを選択し、前章でインポートした サーバー証明書 を選択します。
    選択肢に サーバー証明書 が表示されない場合は、ローカルコンピューター の 個人ストア に サーバー証明書 が配置されているか、再確認してください。
    image.png
     
  11. IPv4 タブを選択し、次の手順を実行します。
    image.png
     
  12. 静的アドレス プールを使う を選択します。
    追加 を選択して、IP アドレスプールを構成します。
    ※ Azure なので DHCP は使えません。
    image.png
     
  13. アドレスプール として使用するネットワークの範囲を入力します。
    冒頭でも説明しましたが 他のネットワークと競合しないアドレス帯を設定してください。
    開始 IP アドレス に、VPN クライアントに割り当てる範囲の開始IP アドレスを入力します。
    終了 IP アドレス に、VPN クライアントに割り当てる範囲の終了 IP アドレスを入力するか、アドレスの数 に、使用可能にするアドレスの数を入力します。
    image.png
     
  14. OK を選択して、プロパティ ダイアログを閉じます。
    image.png

6. Azure 仮想ネットワークの構成変更

Azure Portal で作業を行います。

6-1. ネットワークセキュリティグループ (NSG) の変更

VPN クライアントが、インターネットを経由して、VPN (SSTP) サーバーへアクセスするため、受信の規則で HTTPS(SSTP では HTTPS が採用されている)を許可する必要があります。

  1. VPN サーバー の画面を開き、左ペインから ネットワーク設定 を選択し、+ポートルールの作成 を開いたあと 受信ポートルール を選択します。
    image.png
     
  2. 下図のとおり、HTTPS の 受信を許可する規則を設定して 追加 を押します。
    image.png
     
  3. 以下の通知が表示されれば OK です。
    image.png
     
  4. 登録後は、以下のように 設定が追加されていれば OK です。
    image.png

この作業を忘れると、以下のエラーが出ます。
image.png
このエラーは、VPN クライアントが VPN サーバーに疎通できなかった場合に出力されるため、NSG の設定以外にも、以下の観点をチェックしてください。

  • VPN クライアント側 に接続先として入力した URL が誤っていないか?
  • VPN クライアントが インターネットに接続しているか?
  • VPN サーバー側 で、RAS が正しくインストールされ RAS サービスが稼働しているか?
  • VPN サーバーの VM が起動しているか?

6-2. 戻りのルーティング設定

Azure Portal で作業を行います。

以下の記事で説明されている 手順すべてを行います。
なお、前章まで実施した手順では、元々 NAT が無効なので、以下の記事の最終章で説明されている NAT を無効化する 手順は SKIP して大丈夫です。

RAS の役割サービスで NAT を有効にするためには、サーバーに NIC を2枚構成する必要があります。Azure 上で NIC を 2 枚構成すると、構成が複雑になるので、今回 採用は見送りました。

この章の設定を忘れた場合ても、VPN 接続 は 以下のように成立します。
image.png
ですが、パケットのルーティングが適切に行われないため、TCP/IP の通信が行えません。
VPN 接続が成功するのに、疎通が取れない場合は、この章の設定を疑ってください。

7. ユーザーのプロパティ変更

VPN サーバーが ドメインに参加している場合は、ドメインコントローラー上で 作業を行います。WORKGROUP の場合は、VPN サーバー上で作業を行います。

  1. Active Directory ユーザーとコンピューター を開きます。
    WORKGROUP の場合は、コンピューターの管理 を開きます。
     
  2. VPN (SSTP) 接続時の認証に使用するユーザーを開いて ダイヤルイン タブを選択します。リモートアクセス許可 の設定を "アクセスを許可" に変更して OK します。
    image.png

ユーザーの既定値は、"NPS ネットワークポリシーでアクセスを制御" になっているので、NPS 無しでは "RAS" のユーザー認証には使えません。
実は、ココが一番のハマりどころかもしれません。

この設定をやり忘れると、VPN 接続時に 以下のエラーが出ます。
image.png

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 接続できません。

この作業を忘れると、以下のエラーが出ます。
image.png
加えて、RAS 側で 証明書のバインドを行った際の サーバー証明書 が適切に選択されているかどうかも、再確認してください(クライアント側の ルート証明書 と、VPN サーバー側の サーバー証明書 が適切にペアになっている必要があります。
image.png

8-1-2. 証明書失効確認の無効化

AD CS で証明書を作った場合のみ 必要 な作業です。
自己署名証明書 をコマンドで作成した場合は、本章は SKIP してください。

証明書の仕組みとして、その証明書が 有効かどうかを 証明機関にリアルタイムで確認する仕組み(失効確認)が存在します。
もし証明機関側で 証明書が無効化されていた場合は、クライアントは その証明書は無効であると判断して、VPN 接続は成立しません。

加えて、クライアントが 証明機関に失効確認ができなかった場合(証明機関と疎通確認が行えない)でも、VPN は繋がりません。この構成をおこなうのは 結構大変なため、失効確認を無効化する方法をお知らせします。

SSTP 接続時の 証明書失効確認を無効化する レジストリ
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Sstpsvc\Parameters

  • NoCertRevocationCheck の値が 1 だと 無効
  • NoCertRevocationCheck の値が 0 または キーが存在しない場合は 有効
  1. レジストリエディタを開き、以下のように キーを編集します。キーが存在しない場合は、追加作成してください。
    image.png
     
  2. キーの値は、1 を設定します。
    image.png

この作業を忘れると、以下のエラーが出ます。
image.png

なお、証明書失効の確認を無効化せずに、真面目に チェックさせようとする場合は、以下の記事を参考に構成して、VPN クライアントが、インターネット経由で失効リストにアクセスできるようにします。結構大変てすよ。

8-2. 接続のための設定

VPN で接続させたい、クライアント PC 上で操作を行います。

  1. スタート > 設定 を選択します。
    image.png
     
  2. ネットワーク と インターネット > VPN を選択します。
    image.png
     
  3. VPN を追加 で、次の操作を行い、最後に 保存 を選択します。
    VPN プロバイダーWindows (ビルトイン) を選択します。

    接続名 ボックスに、認識しやすい名前 (「自分の VPN」など) を入力します。 これが、接続時に探す VPN 接続の名前になります。

    サーバー名またはアドレス ボックスに、VPN サーバーの URL を入力します。

    VPN の種類 で、Secure Socket トンネリング プロトコル (SSTP) を選びます。

    サインイン情報の種類 で、ユーザー名とパスワード を選択します。 (必要に応じて) ユーザー名とパスワードをそれぞれのボックスに入力します。
    image.png
     
  4. 保存されると、以下のような画面になるため、その他の VPN プロパティ 欄の 編集 を押します。
    image.png
     
  5. 下図の通り Microsoft CHAP Version 2 (MS-CHAP v2) にチェックを入れて OK を押します。
    image.png

チェックし忘れると、以下のエラーになるので、必ず チェックを入れましょう。
image.png

公開情報:Windows で VPN に接続する

9. VPN 接続の実施

  1. 以下の通り、作成された 接続情報から 接続 ボタンをクリックすると、VPN 接続が開始されます。
    image.png
     
  2. 接続に成功すると、以下のように表示されます。
    image.png
     
  3. 接続されたあとに、**ipconfig /all を実行すると、PPP アダプター が追加されていることが判ります。
    image.png
     
  4. 仮想ネットワーク上の VM に対して Ping と Tracert を実行した結果は 以下の通りです。
    なお、あらかじめ Windows Firewall で Ping 応答を許可しておいてください。
    image.png

VPN サーバー自身の プライベート IP に対しては、Ping は通りません。

参考

RAS の機能については、以下の記事も参考になると思います。
私も、Azure の知識はあるつもりでしたが、RAS の知識が乏しかったので、以下の記事を参考にしました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?