はじめに
以前に、Azure への VPN 接続を安価に実現できないかと思って、以下の記事にある Windows Server RAS 役割サービスによる、SSTP 接続を考案して検証し、記事化しています。
Windows Server RAS (SSTP) の記事
上記の方法でも、使わないときには VM を停止することができるので、Azure 標準 の 仮想ネットワークゲートウェイ(停止できない)よりも コストを削減することができます。
しかしながら、もっと 簡単に より安価に 実現する方法がないかと考え、OpenVPN によるリモートアクセスを検証してみました。
より簡単に
Windows Server RAS (SSTP) の方法は、手順が複雑でした。手順については、Windows の技術者なら 付いてこられる内容だと思いますが、そうではない人は、Windows の学習をする目的でもない限りは、敷居が高いと思います。
しかし、OpenVPN は、Marketplace から 完成版の VM を直接デプロイできるため、非常に簡単に構築することができます。
Windows Server RAS (SSTP) の記事は、Windows や Azure の機能を学習したいという人には、超おススメなコンテンツなのですが、 単純に 楽に 安価に VPN 接続環境が欲しい・・というだけなら OpenVPN をお勧めします。
より安価に
OpenVPN は、OS が Linux で動いており、VM のサイズ は 最小規模なもので運用可能です。
私が検証したところでは、Standard B1s (1 vCPU 1 GiB メモリ)で問題無く動作しています。
仮に 1か月間連続稼働させ、ストレージは 常にフルアクセス、通信量として 100 GB をダウンロードしたと想定した見積もりで、最大の費用は 2,830 円です。
もし、VM を全く起動しなかった場合は、ストレージコストだけが請求されて 月額 364 円です。
つまり、運用を工夫することで、月額 364 円~ 2,830円 の範囲で利用することができます。
大体、どのくらいのコストが掛かるのかをイメージいただけたかと思いますが、あとは 以下のサイトで ご自身で見積もって頂ければと思います。
Azure 料金計算ツール
さらに "料金計算の内訳" を見るには、ココ を押してください。
コンピューティング料金は、VM を停止させられるので、VM の起動中のみ 掛かります。
最大で、月額 1,505 円 になりますが、停止させた分節約できます(1時間の単価は、2.06 円です)
ストレージは、Standard SSD で 32 GiB のサイズで済んでいるので、月額 363 円で固定です。
ストレージトランザクションは、3200 トランザクション以上は 月額 960.5 円で固定なようです。
実際には、それほど 書き込みは発生しないと思いますが、最大値で見積もっています。
ダウンロードの通信コストは、100 GB 以下は無料です。
見積もりでは、100 GB で算出していますので、それ以上 利用すると 1 GB あたり、18.19 円 が加算されます。
1. 構築手順
1-1. 利用する仮想ネットワークをデプロイする
現在、利用中の仮想ネットワークがあれば、その リソースグループ名、リージョン名、仮想ネットワーク名 を控えておきます。
新規に、仮想ネットワークを用意する場合は、事前に 作成しておきます。
1-2. Open VPN を Marketplace から デプロイする
OpenVPN は、Marketplace からデプロイが可能です。
つまり、構築済みのサーバーを、丸ごとデプロイして、すぐに使う事が出来るようになっています。
1-2-1. Marketplace から OpenVPN のイメージの選択をする
- Azure Portal を開き、検索窓に market と入力して、検索された Marketplace を選択します。
- Marketplace の画面で、検索窓に openvpn と入力します。表示された中から、OpenVPN Inc. から提供されている OpenVPN Access Server を選択します。
- まず、プランと価格 タブを選択して、説明欄を確認しましょう。(翻訳を後述してあります)
ライセンスについて納得したら 作成 ボタンを押します。
"説明" 欄 の Bing 翻訳
ライセンス持ち込み - https://www.openvpn.net からライセンスを購入するか、2つの無料の同時接続を有効にしてください。SSH経由でログインした後、VPNサーバーの管理者ユーザー名とパスワードを選択します。また、VPNサーバーにインターネットから到達できるように、管理者設定に適切なFQDNが入力されていることを確認する必要があります。
→ つまり、2 ユーザーの同時アクセスまでなら、無料で利用できます。
"事前設定された構成で開始する" を見るには ココ を押してください。
1-2-2. ミニマムの VM 設定を行って、デプロイする
OpenVPN の 作成 ボタンを押すと、仮想マシンの作成 画面が表示されます。
凡例
緑下線:利用者様の環境に合わせて、任意に設定してください。
青下線:任意で構いませんが、私が検証で使った値です。
赤下線:今回の構築には、必須の選択肢です。
-
基本 タブで、各値を入力して 次:ディスク を押します。
サイズを B1s にすることで、コストダウンしています。
※後日、追加検証しましたが ワンサイズ下の B1ls だと正常に動きませんでした。B1s がコスパ最強かもしれません。
※上記で入力した ユーザー名 と パスワード は、あとで SSH クライアントから接続する際に使います。
-
ディスク タブで、各値を入力して 次:ネットワーク を押します。
ディスクの種類を 既定値(Premium SSD)から下げてコストダウンしています。
※後日、追加検証しましたが さらに安価な Standard HDD でも動作はしていました。価格インパクトはそれほど無いですが、少し下がります。
-
ネットワーク タブで、各値を入力して 次:管理 を押します。
仮想ネットワーク と サブネット は、ご利用中の環境に合わせて選択してください。
-
管理 タブで、任意で 自動シャットダウン の構成を実施して 確認および作成 を押します。
自動シャットダウン を構成しておくと、VM の停止し忘れを抑止できるため、コスト削減 につながります。
-
確認および作成 タブでは、この VM のコストを確認できます。下図の場合は、OpenVPN のライセンス料は 無料 で、VM の利用料が 時間単価で 約 2 円 であることが判ります。
問題なければ、作成 ボタンを押します。
- 展開が完了すると、以下の通知が表示されます。
私が検証した時には、2~3分くらいで、デプロイが完了しました。
- 以下は、デプロイ完了じの画面です。リソースに移動 を押します。
- 以下が、作成された OpenVPN の VM の 概要ページ です。
あとで、赤枠欄の パブリック IP アドレス へ接続するため、覚えておきましょう。
1-2-3. 管理ポート (SSH) の制限(推奨)
OpenVPN では、SSH (22 番ポート) を使って管理が行えます。
このポートが、任意のインターネット側から利用できる状態のため、ネットワークセキュリティグループ (NSG) の設定を変更して セキュリティを向上させましょう。
- 左ペインの ネットワーク設定 を開き、default-allow-ssh を選択します。
- 下図の NSG 設定画面で、ソース 欄で My IP address に設定変更して 保存 を押します。こうすることで 現在 Azure Portal を操作している PC からのみ SSH 接続が出来る状態になります。
- 以下の通知が表示されれば OK です。
- NSG が保存されて、以下のように 注意マークが消えて、ピンクの帯の箇所に 自宅の IP アドレスが表示された状態になれば OK です。これで、自宅からしか管理できなくなり、セキュリティが向上します。
1-3. OpenVPN の初期構成を行う
SSH クライアント を使って、OpenVPN に接続して、初期設定を行います。
この記事では、SSH クライアントとして、Tera Team を使っています。
Tera Term
https://forest.watch.impress.co.jp/library/software/utf8teraterm/
1-3-1. SSH での初期設定
- SSH クライアントを使って、OpenVPN の パブリック IP アドレス に接続します。
- Tera Term の場合は、初回接続時に 以下の画面が表示されます。そのまま 続行 します。
- VM への認証を行います。
※VM 作成時の 管理者アカウント を使います。
- 正常に接続されると、以下のように表示されます。
- 以下のプロンプトに対して、yes と応答します。もし、応答しそびれて "Enter" などを押してしまったら、一旦 切断して、再度 SSH 接続すれば リトライできます。
- それ以降の画面では、以下のように 値の確認 を求められますが、全て Enter(つまり既定値のまま)で応答して構いません。
7.以下の画面まで進んだら、黄色枠 の箇所では、管理者アカウント (openvpn) の パスワード を設定します。ここで設定した アカウント&パスワード を使って WebUI にログオンできるようになります。
8.そのあとの 以下のメッセージには、Enter キーで応答します。
> Please specify your Activation key (or leave blank to specify later):
9.最後に 以下の画面が表示されれば、初期設定は OK です。
SSH クライアントは、切断してしまって構いません。
1-4. WebUI での初期設定
- ブラウザを開いて 以下のアドレス に接続します。管理者向けのページに繋がります。
https://[VM の パブリック IP アドレス]:943/admin
続けて (安全ではありません) の箇所をクリックします。
- 以下の画面が表示されるため、前章の黄色枠 で設定した アカウント&パスワード で Sign In します。
- 初回は、以下の表示になるため内容を確認して Agree を押します。
- OpenVPN のサインインができたら、左ペインの Network Settings を選択して、VPN Server の Hostname oe IP Address 欄に VM の パブリック IP アドレス を入力したあと、ページを一番下まで スクロールさせます。
-
Save Settings ボタンを押して、設定を保存します。
- これだけでは、まだ設定が反映されていません。
以下の画面で Update Running Server を押して反映させます。
- すると、以下のエラーになりますが、問題ありません。
気にせず、再度 管理画面にアクセスしてサインインしてください。
2. 接続手順
ここまで構成が完了したら、外部から リモートアクセスが可能な状態です。
2-1. User Login & 接続アプリのダウンロード
- ブラウザを開いて 以下のアドレス に接続します(admin が付かず 管理者ページとは違います)
https://[VM の パブリック IP アドレス]:943/
これで、ユーザー向けのページに繋がるため、アカウントで Sign In します。
- 下図では、赤枠部分を押して Windows 用 クライアントアプリを ダウンロードします。その他の OS から接続する場合は、任意のアイコンを押してください。
- 以下のようなファイル名で、ダウンロードされるため、ダブルクリックして 起動します。
"Windows によって PC が保護されました" という画面が開いたら、ココ を押してください。
この画面は、Windows Smart Screen の機能が働いた時に表示されます。
詳細設定 の箇所を押してください。
実行 を押せば、継続できます。
4.OpenVPN Connect Setup が起動するため、ウィザードを進めて行きます。
5.インストールが終わると、以下の画面になります。Finish を押して終了します。
2-2. 接続アプリ (OpenVPN Connect) の起動
3.以下の画面まで遷移したら、赤枠部分をクリックすることで、VPN 接続を開始できます。
4.パスワード を入力します(openvpn ユーザーなので、黄枠 で設定したパスワードです)
VPN 接続の Before / After
以下のサイトを使って、VPN 接続 の前後で インターネットに接続している エンドポイント のアドレスが変わる事が確認できます。
参考:IPアドレス確認 (CMAN) のサイト
https://www.cman.jp/network/support/go_access.cgi
VPN 接続前 (Before)
VPN 接続後 (After)
Azure の パブリック IP アドレス に変更されます。
なんと、OpenVPN では、既定で フルトンネル が構成されているので、PC から インターネット へのアクセスも Azure 経由となります。
必要な時だけ起動するテクニック
スマホ用に、"Microsoft Azure" という名称の "Azure mobile App" があります。
これを スマホ にインストールすれば、VM の起動停止を 手元でコントロールできます。
そのため VPN 接続をする前に OpenVPN の VM を起動したり、不用になったら 停止 をさせる事もできるため、VM 稼働のコストを削減できますね。
Azure mobile app
Next 1:NAT を使わずに通信させるには?
ここまでの構築でも、Azure と問題無く通信できていると思いますが、VPN クライアント -> Azure への片方向の通信になっています。
NAT が使われているため、このままでは、Azure -> VPN クライアント の通信は行えません。
これを可能にするための追加設定を、以下の記事で説明しています。必要に応じて 追加構成いただくと良いと思います。
Next 2:さらに Azure と 拠点間で Site to Site の相互ルーティングをするには
前章までの構成は、いわゆる P2S (Point to Site) の通信になっていて、Azure と 1台の PC を接続するイメージでした。
追加で、以下の構成を行う事で、S2S (Site to Site) の通信を実現できます。
参考
以下の OCI を使った OpenVPN の記事を見かけた際に、Azure でやってみたらどうだろう・・と思い立つことができました。感謝です。