Azure Virtual WANを試す(Barracuda CloudGen Firewall編)

#はじめに

[Azure Virtual WAN](https://azure.microsoft.com/ja-jp/services/virtual-wan/)が2018年9月にGAしていましたが、Barracuda CloudGen Firewall(以下CGFW)の実機F18をお借りできたのでお試しました。

誤解を恐れずに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発で設定できるため、オペレータの操作が簡単になります。

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

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




#Azure Virtual Wan事前準備

まずはAzure Virtual Wanの準備と、Azure側の仮想マシン環境を作成します。

##Azure Virtual WANリソースの作成
Azureポータルから「＋リソースの作成」でフィルタ項目に「wan」と入力して、一覧から「Virtual WAN」を選択して作成します。
名前とリソースグループは適当に選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/27b2dc99-f6d5-b9e3-57cb-f51f4af4862a.png)


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

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

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/10655a84-e325-7869-92d6-0102cfc039e5.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/339edc3d-bb44-aabe-f892-c7e6eb04d7fc.png)


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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/09ad7211-9ea7-f0b6-db90-bfb3023628b7.png)

#VPN接続登録用のアプリケーションIDの準備

オンプレミス上のCGFWの管理画面から直接Azureに接続してVPN接続に必要な各種情報を設定・取得する必要があり、その為にAzureサブスクリプションが紐付いているAzure Active Directory(以下AAD)に新たなアプリケーションIDを用意する必要があります。

##新しいアプリケーションの登録

Azureポータル画面からAADを選択し、「アプリの登録」「＋新しいアプリケーション登録」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/39e63f72-de8f-3c64-aa72-ec96790046d7.png)

「名前」は適当に(今回はvwanoperator)、「アプリケーションの種類」は「Webアプリ/API」を選択します。
サインオンURLは実際には使いませんのでAAD上の他のアプリケーションと重複しないURLを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/ba1efd11-90ce-41ca-f998-089960df4903.png)

「設定」メニューで表示される「アプリケーションID」は後でCGFWからAzure Virtual Wan接続時に使用するので控えておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/8b64ea93-4d6e-52a5-8c2b-50d6a9a963e8.png)

##サービスプリンシパルの作成

続いて先の画面の「設定」をクリックします。
設定ブレードの「キー」をクリックして、新たなパスワードを作成します。
「説明」のキー名は適当に、「有効期限」もとりあえず1年にしました。
最後に「保存」を押すと、「値」としてアプリケーションIDのパスワードが表示されるので、こちらも控えておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/071abb5f-5134-5355-091c-0b5ea669757b.png)

##テナントID、サブスクリプションIDの確認
AzureポータルからAAD画面の「プロパティ」をクリックして表示される「ディレクトリID」を控えます。
これは「テナントID(Tenant ID)」とも呼ばれています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/9787f3b4-d5b9-592e-4e23-824e2c5175b2.png)

Azureポータルから「サブスクリプション」画面に表示されるサブスクリプション一覧から、Azure Virtual Wanが作成されているサブスクリプションの「サブスクリプションID」を控えておきます。

##サブスクリプションにIAMの追加
Azure Virtual Wanが作成されているサブスクリプションに対して、先に作成したアプリケーションIDを「共同作成者」として追加します。

サブスクリプション画面から「アクセス制御(IAM)」をクリック、「＋ロールの割当の追加」にて、「役割」に「共同作成者」、「アクセスの割当先」には「Azure ADのユーザ、グループ、サービスプリンシパル」を選択、「選択」欄に先に作成したアプリケーションの名前を入力すると下部に一覧で表示されるので、それを選択後に「保存」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/1da3e3c0-a334-22b2-f6af-077a35d22f92.png)

正しく共同作成者の部分に先に追加したアプリケーションが登録されていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/a898e94f-0c02-4e74-52ea-be5cf05abb12.png)

#オンプレ機器の準備
今回はF18を利用します。詳細手順は省略しますが、オンプレ側の適切なネットワーク配下で内部のルーティング等が正常に設定されており、管理ツール(FirewallAdmin.exe)から設定変更が行える必要があります。

この先の説明では、管理ツールの具体的な使用方法は割愛します。各種設定追加・変更の操作について基本的な事は知っている前提となります。

CGFWは2019/2/1時点で最新の以下のファームウェアを使用しました。必要に応じてファームウェアのアップデート(+Hotfixの適用)を行ってください。

Firmware Version : 7.2.3-161
+ Hotfix 896
+ Hotfix 897

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/a532fccd-2f4f-32cb-9f0d-f3a6da24d8cb.png)

##CGFW側のインターネット接続設定
こちら、詳細は省略しますが、適切な手順でインターネット接続を行います。
私はF18のp4ポートにフレッツ光のONUを接続して、PPPoEによる接続を行っています。
WAN側のグローバルIPアドレスは固定化されている必要があります。お使いのプロバイダのプランにて固定IPオプションなどがあればそれを有効化します。
[CONTROL]->[Network]にてインターネットへの接続が正常に行われていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/98ad251e-70bb-39db-da8b-e46a5444bc42.png)

##CGFW側のVPN設定
クライアントPCからFirewallAdminのexeファイルを実行して、CGFWの管理画面にログインします。

[CONFIGURATION]->[Service Properties - VPN(VPN Service)]画面にて、「Enable Service」が有効になっていない場合は「Yes」に変更します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/982da490-fb27-9a0f-ed63-d89232581661.png)

[CONFIGURATION]->[VPN Settings - VPN(vpn)]->「Click here for Server Settings」画面内の[Advanced]タブにて、「Use IPSec Dynamic IPs」を「Yes」にします。こちらは**PPPoEなどでインターネット接続している場合には必須**の設定です。
もし「Start IKEv2」がNoのままの場合は「Yes」に変更します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/e81c4736-6973-5cc0-943f-deba77b92802.png)

#Azure Virtual WanへのVPN接続自動設定
ここからがAzure Virtual Wanの肝となる機能のひとつである、Site to Site VPNの接続とそれに関連するBGPによるルーティング設定の自動化となります。

##CGFWからAzure Virtual Wanへの接続要求
[CONTROL]->[BOX]->[Connect to Virtual Wan]メニューを開き、Tenant ID(ディレクトリID)、SUbscription ID、User ID(アプリケーションID)、Password(アプリケーションパスワード)欄に先に控えた各種内容を入力します。
「Virtual Wan Name」にはAzure側で作成したAzure Virtual Wanの名前を入力します。こちらの名前は大文字小文字区別しますので正確に入力します。
最後に「Connect」をクリックして、接続開始です。、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/280fba75-c256-ad74-ec84-d213413ec728.png)

Azure側に(存在しない場合には)Configファイルやり取り用のストレージアカウントが作成され、Azure側から接続情報のjsonファイルが作成されるのを待ちます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/260f9b1c-381d-0357-2793-74ca76e68d20.png)

##VPNサイトをハブに関連付け
Azureポータル上のAzure Virtual Wanの画面にて「VPNサイト」をクリックすると、一覧に先に登録したCGFWが表示されるので、選択後「＋新しいハブの関連付け」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/86fbb324-847e-3829-41d4-a17c3fa612b4.png)

「ハブ」に先に作成したAzure Virtual Wanのハブを選択、PSKは省略して大丈夫です。
最後に「関連付けの追加」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/6107cdb8-8ecd-e856-5d08-f244c46a214b.png)

##CGFW側の完了確認
CGFWの管理画面に戻り、[CONTROL]->[BOX]->[Check Connection Status]メニューを開くとログが更新されています。
InfoレベルでSite to Site VPN及びBGP関連がSuccessと出力されていることを確認します。
(なんだかConfigファイルをストレージアカウントから削除できないとエラーも出ていますが、特に弊害なさそうなので今回はスルーします)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/ae74f693-1b35-a7ff-4663-78cac63de0f5.png)

#VPN設定確認
[VPN]->[Site-to-Site]で確認すると、Azure Virtual Wanに2本接続が作成されていることが確認できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/c27f9c9d-547b-bb73-42c7-9b8c1405884b.png)

無論Azureポータル上からもVPN接続状態が「接続済み」になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/4a8c3882-4ea0-6b40-0dad-7d1569f92c6b.png)

[CONFIGURATION]->[Site to Site - VPN(vpn)]画面から「IPsec IKEv2 Tunnels」のタブを開くと自動設定されたVPN設定の一覧が表示されるので、いずれか一つの設定を確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/489a5388-198b-d8c9-3e3e-7dd76ec13faa.png)

「Network Settings」内の「Interface Index」の値を控えておきます。
これはCGFW側に複数のVPN接続設定が存在する場合に不定となる値っぽいのですが、この後にCGFWのFirewallルール追加する際に必要となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/5740d42c-fdfc-d480-1e4d-b0b634e55224.png)

#BGPの設定確認
[CONFIGURATION]->[OSPF/RIP/BGP Settings - VWAN-BGP(OSPF-RIP-BGP-Service)]から「Operational Setup」画面を確認すると、ちゃんとBGPのサービスが有効になっています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/a268f7a5-5878-5e8a-b747-7992d37c571d.png)

「BGP Router Setup」画面にて、BGP Router Configurationの「Networks」にオンプレミス側のCIDRを必要なだけ(疎通させたいセグメント)追加します。
こちらを追加することで、オンプレミス側のルーティング情報をBGP経由でAzure Virtual Wan側に広告させることができます(逆にこちらを指定しないとSite to Site VPN接続が正常でも疎通できません)。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/b36fc450-80a9-967b-8415-58dda36edf77.png)

Azure Virtual Wanからのルーティング情報は[CONTROL]->[Network]にて「BGP」タブから確認することができます。
ちゃんと経路交換ができているっぽいですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/ccac4e9a-9df0-2020-37dd-11bde909462b.png)

#CGFWのFirewallルール追加

##Firewall Objectの作成
先に「IPsec IKEv2 Tunnels」にて「Network Settings」内の「Interface Index」の値を確認しましたが、こちらが「1」の場合、CGFWの論理インタフェース名は「vpnr1」となるようです。
オンプレミスからはこのvpnr1宛の通信に関してのみ許可するFirewallルールを作成したいので、まずはFirewall Objectを作成します。
[CONFIGURATION]->[Forwarding Rules - NGFW(Firewall)]からFirewall Objectsの「Network」を開き、新たなオブジェクトを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/e740e37a-3d5e-2159-4538-6a37c4c7ac6c.png)

##Firewallルールの有効化
[CONFIGURATION]->[Forwarding Rules - NGFW(Firewall)]からAccess Ruleを開き、デフォルトの「LAN-2-VPN-SITE」を編集します。
「Deactivate Rule」のチェックを外し、「Destination」には先に作成したvpnr1 0.0.0.0/0を指定したFirewall Objectを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/67986db9-ece9-3386-4a8d-7c0f99e69237.png)

Firewallルールが有効化されていることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/868739aa-1fa2-4dec-ad4f-acbd1837159e.png)

#接続確認
予めAzure側(192.168.0.0/24)上にLinux Serverをデプロイして、Apacheをインストールしておきました。

```sh
$ sudo yum install httpd –y
$ sudo systemctl start httpd.service
```

オンプレミス側のPCのブラウザからでhttp://192.168.0.4/ でAzure側のApacheに接続出来たことを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/43983d1a-a58c-2389-6795-73bdde68faa0.png)

CGFW管理画面からも[FIREWALL]->[Live]で該当の通信が正常に通っていることが確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/72082860-0a31-cd10-4fa5-04617c970e5e.png)

#おわりに
Azure Virtual Wanの自動設定ですが、事前にCGFの基本設定(インターネット接続など)が済んでいれば、面倒なSite to Site VPN接続パラメータの入力、更に難解なBGPの設定が自動で行われるためかなり簡略化することができました。

今回はなかなか簡単に個人では利用できない物理CGFWを使う機会があり、検証としては有益でした。