Azure Virtual WANで静的グローバルIPのVPNを構築

# 自宅から複数人が同じグルーバルIPでインターネット接続がしたい
作業場所を固定化しない働き方もスタンダードになってきていると思いますので、使用するグルーバルIPは各人の環境に依存する事が多くなります。
グローバルIPで制御しているサイトやシステムを利用する場合、各人のグローバルIPを許可してもらう必要があります。
少人数であったり短期間での使用であればさほど気にならないとは思いますが、
頻繁に利用者の増減が行われたり大人数での作業等の場合、許可設定の手間がとても掛かります。
皆が同じグローバルIPを利用出来るのであれば幸せになれるのではないかと考えました。
そこで簡易に用意出来るVPN環境をAzureで構築してみました。

# 構成
Azureで利用するサービスはVirtual WANとAzure Firewallです。
Virtual WANでP2S VPN接続してFirewallにルーティングしてインターネットに出ます。
認証はAzureADを使用します。
VPNクライアントは[Azure VPNクライアント](https://www.microsoft.com/ja-jp/p/azure-vpn-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88/9np355qt2sqb?activetab=pivot:overviewtab)。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/b9465a0a-8e62-7c44-1b83-beb7df6abafb.png" width=100%>

# 構築
## Azure VPNアプリ登録
以下ドキュメントを参考にしてVPNの認証に使うテナントにAzureVPNアプリを登録します。
[ユーザー VPN OpenVPN プロトコル接続用の Azure Active Directory テナントを準備する](https://docs.microsoft.com/ja-jp/azure/virtual-wan/openvpn-azure-ad-tenant)


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/b7c340b4-8b59-097a-8b5e-66807ad8f0ab.png" width=80%>

## Virtual WAN
P2Sの場合は種類をStandardにします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/abd5b1ff-1964-9a19-d72c-8651b91d6dba.png" width=80%>


### ユーザーVPN
Virtual WAN作成後にVPNを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/0bdcabea-bbb5-ad2a-8122-26b0810ca48d.png" width=70%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/22a0a937-b227-31fe-338b-fe428ab0faa1.png" width=75%>

`対象ユーザー`はAzureADに登録したVPNアプリのアプリケーションIDです
`Issuer`と`AADテナント`の末尾はテナントIDです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/ccbb8d5a-1ed4-e303-dd85-667294335a7c.png" width=75%>

出来ました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/48bf8f26-f9ab-2842-20ef-4b4e785ba1ba.png" width=95%>

### 仮想ハブ
次に仮想ハブを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/bd1c3dff-5cd8-2f76-be0f-1bb56b584cfa.png" width=70%>

今回はどこの仮想ネットワークにも接続しないため`ハブプライベートアドレス空間`は適当です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/f42aac24-1521-f350-cd74-7c9fe35a234f.png" width=75%>

ポイント対サイトを作成します。
`構成`は先ほど作成したユーザーVPN名です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/14f69afb-a7f9-c604-cf7b-e058024d2088.png" width=75%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/72f7f2cf-1c57-7d85-b863-db1d361933ee.png" width=90%>

### Azure Firewall
`セキュリティで保護されたハブに変換`を行うことでハブにFirewallを作成できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/2d00023c-5b68-a178-4cb6-2a97104c970f.png" width=90%>

Azure Firewallを有効にし、Azure Firewallを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/25d6b3ed-6cf6-4c16-0c71-8c166965ebf6.png" width=90%>

`Firewall Manager`からインターネット通信をハブと関連付けます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/6cc58a13-7ea3-111e-5082-de3add0189e8.png" width=90%>

画像はチェックついていないですが、`P2SConnectionConfigDefault`にチェックして **インターネットトラフィックをセキュリティで保護** を押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/a1bbd7a1-c4f0-3f4e-7b75-dfd6d61cc2db.png" width=90%>

関連付けられました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/c8f67cae-468a-9262-f4f3-9f76f75a4995.png" width=90%>

ルーティングを見てみます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/46725974-17e1-8bf2-aa18-fd34c2595772.png" width=90%>

デフォルトルートの次ホップがAzure Firewallになっています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/bf7bb9d1-47f0-addf-f5c8-3e70b3aabeee.png" width=90%>

ファイアウォールポリシーはネットワーク規則でVPNクライアントIPのみ全許可にしています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/913f64c2-a7a5-e221-328f-7141e6946a36.png" width=100%>

## VPNクライアント
AzureポータルからVPNプロファイルをダウンロードします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/2163ff67-6eea-031f-ab9e-4a32efd7212a.png" width=100%>


ダウンロードした`azurevpnconfig.xml`をエディタで開き、clientconfigノードを以下のように編集し、デフォルトルートを強制トンネルします。
こちらの編集をしないとクライアント端末のデフォルトルートが優先されVPNで設定したグローバルIPを使用できません。
ただし、xmlの編集をしたくない場合はクライアント端末のNICのメトリックを変更することでも対応可能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/066febe9-9fad-df12-1ec2-18bbf9b9bcf5.png" width=70%>

```xml:azurevpnconfig.xml
  <clientconfig>
    <includeroutes>
      <route>
        <destination>0.0.0.0</destination>
        <mask>1</mask>
      </route>
      <route>
        <destination>128.0.0.0</destination>
        <mask>1</mask>
      </route>
    </includeroutes>
  </clientconfig>
```
Azure VPNクライアントを起動しプロファイルをインポートします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/55482157-d8aa-c1c0-5ebe-6e55e08ed3bf.png" width=70%>

接続名を任意の名前に変更し、保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/e394bd59-4d1f-de7b-9808-79444420eb01.png" width=70%>

プロファイルインポート後、接続します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/fe39a539-b98c-d150-1d93-6358a0b8cb0e.png" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/668ce77c-f5e7-56b1-1bd4-7a2b6dcfb767.png" width=50%>

Azure FirewallのパブリックIPでインターネット通信出来ることを確認できました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/33ec2148-4011-ab9a-45bd-dde498131b87.png" width=80%>

# 終わりに
サーバレスでVPN環境を構築することが出来ました。
認証にもAzureADを使えたりセキュリティ面でも申し分ないと思うのですがAzure利用料が高額になるため、
この環境を使うための予算取りが一番の課題な気がしています…。

# 参考ドキュメント
[ポイント対サイト ユーザー VPN 接続を構成する - Azure Active Directory 認証](https://docs.microsoft.com/ja-jp/azure/virtual-wan/virtual-wan-point-to-site-azure-ad)
[P2S OpenVPN プロトコル接続用に VPN クライアントを構成する:Azure AD 認証](https://docs.microsoft.com/ja-jp/azure/virtual-wan/openvpn-azure-ad-client#how-do-i-direct-all-traffic-to-the-vpn-tunnel-force-tunnel)
[Virtual WAN ハブのルーティング インテントとルーティング ポリシーの構成方法](https://docs.microsoft.com/ja-jp/azure/virtual-wan/how-to-routing-policies)