背景
iPhoneやiPadから、Azure上の仮想ネットワークにP2S接続(ポイント対サイト接続)したくなったのだが、Microsoftのドキュメントは要点が掴みづらくてわかりにくいし(機械翻訳の影響か?)、Google先生に聞いてもドンピシャな回答が見つけられなかったので、その手順を記す。
調査
そもそも、iOSデバイスでAzureにP2S接続できるのか?
公式ドキュメントには、
ポイント対サイト VPN では、次のいずれかのプロトコルを使用できます。
- SSL/TLS ベースの VPN プロトコルである OpenVPN® プロトコル。 ほとんどのファイアウォールは、TLS で使用されるアウトバウンド TCP ポート 443 を開いているため、TLS VPN ソリューションはファイアウォールを通過できます。 OpenVPN は、Android、iOS (バージョン 11.0 以上)、Windows、Linux、および Mac デバイス (OSX バージョン 10.13 以上) から接続する際に使用できます。
とあるので、iOS 11.0以降ならOpenVPNが使えるのでP2S接続が可能。
制限は?
上記の情報から、iOSデバイスをP2S接続するにはOpenVPNを使用することがわかった。
しかし、ゲートウェイの SKUを確認すると、最も安価なBasicではOpenVPNが使用できない事がわかる。
ついでにいうと、Linuxを繋ぎたい場合もOpenVPN必須なので、BasicではNG。
また、Macを繋ぎたい場合はIKEv2が必要なので、BasicではNG。
つまり、BasicでつながるのはWindowsのみ。
ということで、iOS/Mac/LinuxをP2S接続したい場合はVpnGw1以上を選択する必要がある。
説明の前提とする環境
以下のクライアント環境から、仮想ネットワーク環境に対してP2S接続する前提で記載する。
| 環境 | アドレス範囲 |
|---|---|
| 仮想ネットワーク | 172.16.1.0/24 |
| クライアント (iOS) | 10.0.0.0/24 |
クライアント環境と仮想ネットワーク環境とで、使用しているアドレス範囲に重複があると接続できないので、あらかじめどちらかのアドレス範囲を変更しておく必要がある。
また、後ほど登場するゲートウェイサブネットや、仮想ネットワークゲートウェイのアドレスプールも、これらのアドレス範囲と重複することが許されないので要注意。
手順
1. 接続先の仮想ネットワークと仮想マシンをデプロイする
これについては迷うこともないと思うので、説明は割愛する。
仮想ネットワークについては、ほとんどが既存の仮想ネットワークに接続したいという要件だと思うので省略することになると思う。
仮想マシンは、P2S接続確立後にpingやsshなどで接続確認するときに使う。
既存の仮想マシンを流用して構わなければ省略。
2. 接続先の仮想ネットワークにアドレス空間を追加する
P2S接続を実現するには、ゲートウェイサブネットを置くためのアドレス空間が必要になる。
既存のアドレス空間に/28の範囲を確保できるだけの余力があれば省略可能。
例えば、
| アドレス空間 | 備考 |
|---|---|
| 172.16.1.0/24 | ← 既存のアドレス空間 |
| 172.16.2.0/24 | ← 追加のアドレス空間 |
3. 仮想ネットワークゲートウェイをデプロイする
-
Azure Portal上の
+リソースの作成をクリック -
検索バーに
vpn gatewayと入力 -
候補の
仮想ネットワークゲートウェイを選択し、作成をクリック -
下記を参考に設定
設定 例 備考 名前 任意の名前を設定 地域 接続先の仮想ネットワークと同じリージョンを選択 ゲートウェイの種類 VPN SKU VpnGw1 Basic以外を選択仮想ネットワーク 接続先の仮想ネットワークを選択 ゲートウェイ サブネットのアドレス範囲 172.16.2.0/28 '/28'の範囲が確保できていれば十分 パブリックIPアドレス VPNゲートウェイに設定されるパブリックIP。
既存の余剰IPがなければ作る。 -
デプロイ(待ち時間に次の手順を実施しておく)
4. 証明書の生成とエクスポート
公式ドキュメントのPowerShell を使用したポイント対サイトの証明書の生成とエクスポートを参考に、別途別リージョンに構築しておいた Windows 10 の仮想マシン上で作業を行った。
手元に、 Windows 10 もしくは Windows Server 2016 の環境があれば、そこで作業して構わない。
もし、Linux上で作業をする場合はこちらの手順らしい。(未検証)
実施すべき作業は、
- 自己署名ルート証明書の作成
- クライアント証明書の生成
- ルート証明書の公開キー (.cer) のエクスポート
- クライアント証明書 (.pfx) のエクスポート
5. ユーザーVPN構成の設定
-
Azure Portalに戻って、デプロイした仮想ネットワークゲートウェイを開く
-
左側のメニューから
ユーザーVPN構成をクリック -
下記を参考に設定
設定 例 備考 アドレスプール 192.168.0.0/24 他の登場人物と重複しないアドレス範囲を指定 トンネルの種類 OpenVPN (SSL) 認証の種類 Azure証明書 ルート証明書 > 名前 任意の名前を設定 ルート証明書 > 公開証明書データ 手順4−3で取得したルート証明書の公開キー文字列を貼り付け -
保存
6. 構成ファイルのダウンロード
- 同画面で
VPNクライアントのダウンロードをクリック - Zipファイルを解凍
7. vpnconfig.ovpnの編集
-
OpenVPNフォルダ配下の、vpnconfig.ovpnをテキストエディタで開いておく - 手順4−4でエクスポートしておいた
pfxファイルを使用して、WindowsかLinux上で下記のコマンドを実行する
openssl pkcs12 -in "filename.pfx" -nodes -out "profileinfo.txt"
-
profileinfo.txtを開き、クライアント証明書の秘密鍵文字列と公開鍵文字列を確認する - 以下のように、
秘密鍵文字列と公開鍵文字列をvpnconfig.ovpnに上書きする
:
前半部分は省略
:
# P2S client certificate
# Please fill this field with a PEM formatted client certificate
# Alternatively, configure 'cert PATH_TO_CLIENT_CERT' to use input from a PEM certificate file.
<cert>
-----BEGIN CERTIFICATE-----
:
クライアント証明書の公開鍵文字列
:
-----END CERTIFICATE-----
</cert>
# P2S client certificate private key
# Please fill this field with a PEM formatted private key of the client certificate.
# Alternatively, configure 'key PATH_TO_CLIENT_KEY' to use input from a PEM key file.
<key>
-----BEGIN PRIVATE KEY-----
:
秘密鍵の文字列
:
-----END PRIVATE KEY-----
</key>
8. iOSデバイスにOpenVPN Connectアプリをインストールする
9. vpnconfig.ovpnをiOSデバイスにインストールする
- 転送したファイルをiOSデバイスで開く
- OpenVPN Connectアプリが開いて
Import Profile画面になるのでADDをタップ -
ImportedProfile画面になるので、再度ADDをタップ
10. P2S接続の確立
OpenVPN ConnectアプリのProfile画面で、トグルボタンを有効に倒す。
これでP2SのVPN接続が確立する。
VPN接続中は、画面上部の電波マーク付近にVPNアイコンが表示される。
なお、複数のVPNプロファイルがインストールされている場合で、プロファイルを切り替えたいときは、OpenVPN Connectアプリからではなく、OSの設定画面(設定>VPN)から直接プロファイルの切り替えが必要になる場合もある。
10. 動作確認
接続先の仮想ネットワーク上の仮想マシンに対して、pingやssh接続をしてみる。
iPhoneやiPadには標準のターミナルアプリが無いが、a-Shellというアプリを使うとシェルを使用できるようになる。