VPN(Point To Site)接続する際の注意点

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

オンプレミスのサーバーからAzureにVPN(Point To Site)接続を行う際、設定や稼働後に課題があったのでご紹介します。
Point To Site(P2S)接続とは、クライアントコンピューターからAzureの仮想ネットワークへ、ポイント対サイトで安全に接続する方法です。

普通にVPN設定

まずは、Microsoft社から公開されている手順でVPN設定を行います。
下記手順はリソースマネージャのものです。クラシックデプロイはGUIから設定可能です。

  • 変数を設定
    • 使用するサブスクリプション
    Login-AzureRmAccount
    Get-AzureRmSubscription
    Select-AzureRmSubscription -SubscriptionName {SubscriptionName}
    
    • VNetの設定
    $VNetName  = "VNet1"    # VNet名
    $VNetPrefix1 = "192.254.0.0/16"    # 範囲
    $VNetPrefix2 = "10.7.0.0/16"    # 範囲
    
    • フロントエンド設定
    $FESubName = "FrontEnd"    # サブネット名
    $FESubPrefix = "192.254.1.0/24"    # 範囲
    
    • バックエンド設定
    $BESubName = "Backend"    # サブネット名
    $BESubPrefix = "10.7.1.0/24"    # 範囲
    
    • ゲートウェイ設定
    $GWSubName = "GatewaySubnet"    # サブネット名
    $GWSubPrefix = "192.254.200.0/26"    # 範囲
    $GWName = "GW"    # GW名
    $GWIPName = "GWIP"    # パブリックIP名
    $GWIPconfName = "gwipconf"    # GWIP設定名
    
    • VPNクライアントのアドレスプール
    $VPNClientAddressPool = "172.16.201.0/24"    # アドレス範囲
    
    • リソースグループ、ロケーション
    $RG = "sios_test"    # リソースグループ
    $Location = "Japan East"    # ロケーション
    
    • 名前解決に使用するDNSサーバーのIP
    $DNS = "8.8.8.8"    # DNSのIP
    
    • VPNクライアントの認証に使用されるルート証明書
    $P2SRootCertName = "ARMP2SRootCert.cer"    # 証明書ファイル名
    
  • VNetを構成
    • リソースグループ作成
    New-AzureRmResourceGroup -Name $RG -Location $Location
    
    • 仮想ネットワークのサブネットを構成
    $fesub = New-AzureRmVirtualNetworkSubnetConfig -Name $FESubName -AddressPrefix $FESubPrefix
    $besub = New-AzureRmVirtualNetworkSubnetConfig -Name $BESubName -AddressPrefix $BESubPrefix
    $gwsub = New-AzureRmVirtualNetworkSubnetConfig -Name $GWSubName -AddressPrefix $GWSubPrefix
    
    • 仮想ネットワークを作成
    New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $RG -Location $Location -AddressPrefix $VNetPrefix1,$VNetPrefix2 -Subnet $fesub, $besub, $gwsub -DnsServer $DNS
    
    • 作成した仮想ネットワークの変数を指定
    $vnet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $RG
    $subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet
    
    • パブリックIPアドレスを要求
    $pip = New-AzureRmPublicIpAddress -Name $GWIPName -ResourceGroupName $RG -Location $Location -AllocationMethod Dynamic
    $ipconf = New-AzureRmVirtualNetworkGatewayIpConfig -Name $GWIPconfName -Subnet $subnet -PublicIpAddress $pip
    
  • 証明書の追加
    • makecert等で、VPN接続用のルート証明書・クライアント証明書を作成
    • 作成したルート証明書をAzureに追加
    $filePathForCert = {pasteYourCerFilePathHere}
    $cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate2($filePathForCert)
    $CertBase64 = [system.convert]::ToBase64String($cert.RawData)
    $p2srootcert = New-AzureRmVpnClientRootCertificate -Name $P2SRootCertName -PublicCertData $CertBase64
    
  • VPNゲートウェイの作成
    • 仮想ネットワーク ゲートウェイを構成、作成
    New-AzureRmVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG `
    -Location $Location -IpConfigurations $ipconf -GatewayType Vpn `
    -VpnType RouteBased -EnableBgp $false -GatewaySku Standard `
    -VpnClientAddressPool $VPNClientAddressPool -VpnClientRootCertificates $p2srootcert
    
  • VPNクライアント構成パッケージのダウンロード・インストール
    • ダウンロードURL取得
    Get-AzureRmVpnClientPackage -ResourceGroupName $RG `
    -VirtualNetworkGatewayName $GWName -ProcessorArchitecture Amd64
    
    • URLにアクセスしクライアント構成パッケージをダウンロード
    • クライアントコンピューターにインストール
  • Azureへ接続
    • クライアントコンピューターにクライアント証明書をインポートする
    • ネットワーク接続設定からVPNを選択し、「接続」をクリックして接続を開始
      azurevpn-2

以上で、通常手順によるVPN設定は完了です。

設定後、困ったこと

上記手順で設定を行うと、VPN接続の際に必ずポップアップが表示され、「接続」を押さないと接続開始されません。
また、ユーザーのサインアウトで切断されてしまい、バックグラウンドで接続し続けることが出来ません。
VPNを常時接続しておきたい場合など、このままでは接続を維持することが難しいです。

解決方法

下記サイト記事を参考に設定を行うことで、サインアウト後も接続を維持することが出来ます。

以下、設定手順です。

  • コンピューターアカウントの「信頼されたルート証明機関」に、下記2つの証明書をインポート
    1. VPN構成時にAzureに登録したルート証明書
    2. 1を使用して作成したクライアント証明書
  • VPNクライアントインストーラーを展開
    .\XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.exe /C /T:{展開先ディレクトリ}
    
  • 展開されたディレクトリの”.cer”ファイルを証明書ストアにインポート
    ※VPNクライアントインストール済みの際は、既にストアにある旨表示されます

    certutil -addstore root .\XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.cer
    
  • 展開されたディレクトリの”.pbk”ファイルを開き、下記項目の値を確認
    • PhoneNumber
  • 「新しい接続またはネットワークのセットアップ」を選択
    azurevpn-3

  • 「職場に接続します」を選択
    azurevpn-4

  • 「新しい接続を作成します」を選択
    azurevpn-5

  • 「インターネット接続(VPN)を使用します」を選択
    azurevpn-6

  • 「インターネットアドレス」に、.pbkファイルで確認した値を入力
    azurevpn-7

  • 「ネットワーク接続」から作成したVPN設定を右クリックし、「プロパティ」を選択
    azurevpn-8

  • 「セキュリティ」タブを選択

    • 「VPNの種類」を「Secure Socket トンネリング プロトコル(SSTP)」に変更
    • 「拡張認証プロトコル」を「スマートカードまたはその他の証明書(暗号化は有効)」に変更
      azurevpn-9
    • 「プロパティ」を選択
      azurevpn-10

      • 「このコンピューターの証明書を使う」を選択
      • 「証明書を検証してサーバーのIDを検証する」を選択
      • VPNゲートウェイの証明書を選択
        azurevpn-11
      • 認証方法の「詳細設定」を選択
        azurevpn-12

        • 「証明書発行者」を選択
        • 「ルート証明機関」から、下記2つの証明書を選択
          1. VPN構成時にAzureに登録したルート証明書
          2. 1を使用して作成したクライアント証明書
            azurevpn-13
  • 「ネットワーク」タブを選択
    • 「インターネットプロトコル バージョン 4」⇒「プロパティ」⇒「詳細設定」⇒「リモートネットワークでデフォルトゲートウェイを使う」のチェックを外す
      azurevpn-16
  • 「OK」を押して保存

  • 自動起動の設定

    • タスクスケジューラを起動
    • 新しいタスクを作成
    • 「全般」タブ
      • 「ユーザーがログオンしているかどうかに関わらず実行する」にチェック
      • 「最上位の権限で実行する」にチェック
      • 「構成: Windows Server 2012 R2」を選択
        azurevpn-17
    • 「トリガー」タブ
      • タスクの開始「スタートアップ時」を作成
        azurevpn-18
    • 「操作」タブ
      • 「操作: プログラムの開始」を選択
      • 「プログラム/スクリプト: rasdial」を入力
      • 「引数の追加」に作成したVPN設定名を入力
        azurevpn-19
    • 「設定」タブ
      • 「タスクを停止するまでの時間」のチェックを外す
      • 「要求時に実行中のタスクが終了しない場合、タスクを強制的に停止する」のチェックを外す
        azurevpn-20
    • 「OK」を押して保存
  • タスクを実行し、作成したVPN設定が「接続済み」になれば設定完了
    azurevpn-15

  • サインアウト、再ログインし、VPNが切断されていないことを確認

以上で、設定は完了です。

稼働後、困ったこと

上記設定で1年ほど問題なく稼働していたのですが、ある日突然、下記のエラーが発生してVPN接続が失敗するようになりました。

azurevpn-1
0x800B0109: 証明書チェーンは処理されましたが、信頼プロバイダーが信頼していないルート証明書で強制終了しました。

調査したところ、Azure側のVPNゲートウェイに使用される証明書が更新されたようでした。
最新のVPNクライアント構成パッケージをダウンロードし再設定したところ、再び接続することが出来ました。

おわりに

以上でオンプレミスのサーバーからAzureにVPN接続し、バックグラウンドで接続維持できる環境を構築出来ました。
突然接続出来なくなった事象については、Azure側の証明書が最短1年半で更新されるようで、Microsoft社から事前に通知されることは現状無いということです。
そのため、定期的に接続チェックするなど、留意する必要がありそうです。

参考

アバター画像
About サイオステクノロジーの中の人です 88 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる