Azure Virtual WANを試す(YAMAHAルータ編)

#はじめに

[Azure Virtual WAN](https://azure.microsoft.com/ja-jp/services/virtual-wan/)が2018年9月にGAしていましたが、やっと検証する時間が取れましたのでポストします。

誤解を恐れずにAzure Virtual WANの事を整理すると既存の[Azure VPN Gateway](https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpngateways?WT.mc_id=AZ-MVP-5002499)を使いやすくパッケージ化したものです。

AzureにあるVirtual Networkへの接続には[Virtual Network Peering](https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-peering-overview?WT.mc_id=AZ-MVP-5002499)を使っているのですが、この辺の接続の操作もAzure Virtual WANの中のメニューから1発で設定できるため、オペレータの操作が簡単になります。

オンプレミス側のルータがVirtual WANの対応機器の場合、Virtual WANへの接続設定が自動で行えるという機能もあります。

今回は以下のような構成で、オンプレミス側のLANからAzure Virtual WANを利用してAzure仮想ネットワーク上のLinux仮想マシンにつなげてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/6d00c8db-af1d-b596-85b2-176aae16659e.png)


#構築の流れ

主な構築の流れは以下のとおりです。

1. Virtual WANリソースの作成
2. ハブの作成
3. VPNサイトの作成
4. VPNサイトをハブに関連付け
5. Azure仮想ネットワーク及び仮想マシンを作成
6. Azure仮想ネットワークをハブにピアリング
7. VPN構成のダウンロード
8. オンプレルータの設定

##Virtual WANリソースの作成
Azureポータルから「＋リソースの作成」でフィルタ項目に「wan」と入力して、一覧から「Virtual WAN」を選択して作成します。
名前とリソースグループは適当に選択します。

##ハブの作成
Virtual WANリソースのメニューから「ハブ」を選んで作成します。
この際にリージョンの指定を行いますが、本記事執筆時点(2018/12/19)では以下の制限があります。

- 複数のハブを作成しても相互接続できない
- Azure仮想ネットワークとのピアリングは同一リージョンでないとだめ(グローバルVNETピアリングが使えない)

他にハブ自身にもネットワーク空間を割り当てる必要があるので、アドレス設計は慎重に。
こちらはVPNゲートウェイを内部的に作成するため、完了までに30分くらいかかります。

##VPNサイトの作成
Virtual WANリソースのメニューから「VPNサイト」を選んで作成します。
名前は適当に、パブリックIPアドレスにはオンプレミスのルータのWAN側アドレスを指定します。
プライベートアドレス空間もオンプレのものを指定します。BGPを使わない場合は疎通させたいオンプレ側のプライベートアドレスを全てCIDR形式で登録します。
今回は詳細設定項目のBGPは無効状態のまま、デバイス情報も特に指定せずに作成します。

##VPNサイトをハブに関連付け
VPNサイト一覧から「＋新しいハブの関連付け」にて作成したVPNサイトをハブに関連付けします。
この際に「PSK」の指定があるので、適当な文字列を入力します。こちらの値はオンプレルータ側のVPN接続設定でも利用します。

##Azure仮想ネットワーク及び仮想マシンを作成
いつもの手順で仮想ネットワークと仮想マシンを作成します。今回は仮想マシンはCentOS 7.5を利用しました。
仮想ネットワークのアドレス空間は192.168.0.0/24で作成します。オンプレ、Virtual WANのハブのアドレス空間と重複しないように注意します。

##Azure仮想ネットワークをハブにピアリング
Virtual WANリソースのメニューから「仮想ネットワーク接続」を選んで作成します。
「＋接続の追加」から先に作成した仮想ネットワークをハブに関連付けます。
仮想ネットワークとハブが同一リージョンでないと関連付けできないので注意してください。

##VPN構成のダウンロード
Virtual WAN概要ブレードから「↓VPN構成をダウンロードする」からオンプレ側ルータに設定する設定ファイル(json)をダウンロードします。

内容の例は以下の通り

```json
[
  {
    "configurationVersion": {
      "LastUpdatedTime": "2018-12-18T02:42:14.6153434Z",
      "Version": "040a8a3e-19f9-4a24-b4b9-367b558636c8"
    },
    "vpnSiteConfiguration": {
      "Name": "Kita-Shinagawa",
      "IPAddress": "XX.XX.XX.XX"
    },
    "vpnSiteConnections": [
      {
        "hubConfiguration": {
          "AddressSpace": "192.168.200.0/24",
          "Region": "Japan East",
          "ConnectedSubnets": [
            "192.168.0.0/24"
          ]
        },
        "gatewayConfiguration": {
          "IpAddresses": {
            "Instance0": "40.XX.XX.139",
            "Instance1": "40.XX.XX.124"
          }
        },
        "connectionConfiguration": {
          "IsBgpEnabled": false,
          "PSK": "hoehoehoehoe",
          "IPsecParameters": {
            "SADataSizeInKilobytes": 102400000,
            "SALifeTimeInSeconds": 3600
          }
        }
      }
    ]
  }
]
```

オンプレルータで設定するときに必要な情報としては、vpnSiteConnections.gatewayConfiguration.Instance0 と vpnSiteConnections.connectionConfiguration.PSK あたりでしょうか。

##オンプレルータの設定
今回はYAMAHA RTX810を使用します。既にPPPoEでインターネットへの接続は済んでいる状態を想定しています。

AzureへIKEv2でSite to Site接続するconfig例は「[Microsoft AzureとVPN(IPsec IKEv2)接続するルーターの設定 : コマンド設定](https://network.yamaha.com/setting/router_firewall/cloud/microsoft_azure/setup_rt_ikev2)」を参考に作成しました。

以下はRTX810への追加configです。
IPアドレスなどは適宜修正してください。

```
tunnel select 1
ipsec tunnel 1
ipsec sa policy 1 1 esp aes256-cbc sha256-hmac anti-replay-check=off
ipsec ike version 1 2
ipsec ike duration child-sa 1 27000
ipsec ike duration ike-sa 1 28800
ipsec ike group 1 modp1024
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on rfc4306
ipsec ike local address 1 192.168.XXX.1
ipsec ike local name 1 XX.XX.XX.XX ipv4-addr
ipsec ike nat-traversal 1 on
ipsec ike message-id-control 1 on
ipsec ike child-exchange type 1 2
ipsec ike pre-shared-key 1 text hoehoehoehoe
ipsec ike remote address 1 40.81.XX.XX
ipsec ike remote name 1 40.81.XX.XX ipv4-addr
ipsec ike negotiation receive 1 off
ip tunnel tcp mss limit auto
tunnel enable 1
ipsec auto refresh on
p route 192.168.0.0/24 gateway tunnel 1
```

こちらをRTX810に流し込むことでしばらく待つとVPN接続が完了します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/2102b8d1-e78a-5534-ae99-89cc47c681fc.png)

#接続確認
オンプレ拠点のPCからAzure仮想マシンにpingを飛ばしてみます。

```sh
katakura@LENOVO2018X1:~$ ping -c 3 192.168.0.4
PING 192.168.0.4 (192.168.0.4) 56(84) bytes of data.
64 bytes from 192.168.0.4: icmp_seq=1 ttl=62 time=6.16 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=62 time=6.22 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=62 time=6.13 ms
```

sshも無論大丈夫

```sh
katakura@LENOVO2018X1:~$ ssh azureuser@192.168.0.4
Password:
Last login: Tue Dec 18 02:57:24 2018 from xxxxx.i-revonet.jp
[azureuser@TokyoVM01 ~]$
```

#おわりに
特に今回試した範囲ですと、オンプレ機器のconfig自動設定も出来ていない他、VPNのActive/Active接続も行っていないため、今ひとつイケていない感じですが(そもそもAzure Virtual WANの特徴的な機能を使い切っていない)、構築の流れは理解できるかと思います。

しばらくしたらconfig自動設定に対応した機器を借りられそうですので、その際に追加で検証してみたいと思います。