Azure ExpressRoute の検証環境を1時間以内で構築するポイント(主にアプリ開発者向け)

2020.2.11: Connection 作成と ER の削除について追記しました

最近、Azure の専用線接続サービスである ExpressRoute を使った検証環境を構築する機会がありました。ExpressRoute は、一般的なケースではオンプレミスのデータセンターと物理的な接続が必要となるため、気軽に検証することができないと思われがちですが、Oracle クラウド(以下 OCI)とのクロスクラウドネットワークを使うことで、(ハマらなければ)1 時間もかからずに接続できることがわかりました。(なお、この記事はネットワークやインフラに精通している方向けではありません。)

Azure と OCI の直接接続は、もう数年前から実現しているので公式ドキュメントも以下のように両クラウドから提供されています。

Azure OCI Connect

公式ドキュメントがあるので安心してセットアップを実施してみたのですが、自分のネットワークインフラスキルが低かったせいか 5 時間以上経過しても接続できず。。。しかし、そこへ幸運にも ExpressRoute の神が降臨し、その後 30 分くらいであっさり接続できました。

ということで、おそらく私のようなアプリ寄りのエンジニアが公式ドキュメントをみながら作業をすると同じようにハマるかもしれないので、将来の自分のためにもハマりポイントを中心にメモを残しておきたいと思います。

全体的な流れ

公式ドキュメントには非常に詳細な説明が書かれているため、逆に手順の全体像は掴みにくくなりがちです。特に Azure と OCI を行き来するため手順全体の流れを知っておくことがとても重要だと感じました。ExpressRoute の検証環境をゼロから作る場合の全体感はざっと以下の手順になるはずです。

  1. Azure 仮想ネットワーク (VNet) の作成
  2. Azure 仮想ネットワークゲートウェイ の作成
  3. Azure ExpressRoute circuit の作成
  4. OCI 仮想クラウド・ネットワーク (VCN ) の作成
  5. OCI 動的ルーティング ゲートウェイ (DRG) の作成
  6. OCI FastConnect の作成
  7. OCI ルート表の設定
  8. OCI セキュリティルールの設定
  9. Azure Connection の作成
  10. Azure ネットワークセキュリティグループ (NSG) の設定
  11. 接続の確認

この流れで一番ポイントになる部分は「FastConnect の作成」だと思います。理由は FastConnect の作成を実行すると、OCI 側だけでなく Azure 側の ExpressRoute にもプロビジョニングの処理が及ぶためです。逆にここを乗り越えられれば繋がったも同然ですし、実際に L2 とか L3 のレベル?では繋がったことになります。

ExpressRoute と FastConnect の接続

この手順が一番重要かつ本テーマにおける本質的な作業です。それ以外の手順は、従来のネットワーク設定の範疇なので特に新しいことはありません。

まず Azure 側の ExpressRoute circuit の作成 は何も迷うことはないと思います。公式手順書にあるのと同じように設定するだけですが、念のため成功した設定例を貼っておきます。Provider で Oracle Cloud FastConnect を選ぶだけであとはお好みでという感じです。

ER Configration

Oracle 側の FastConnect の作成 もそれほど設定項目は多くないのですが、この記事の中でも一番と言っても良いくらい重要なのが、BGP IP アドレスの設定です。ネットワークに詳しい人なら何も迷うことはないと思いますが、Azure 側 Oracle 側どちらの公式手順書をみても、自分にとっては決め手となる情報がなく何度も試行錯誤してしまいました。結果的には有識者のアドバイスにより以下の設定でうまくいきました。

FC Configration

要するに、BGP の IP アドレスは、Azure 側 Oracle 側のどちら側のネットワーク体系ともぶつからないアドレス体系であれば何でも OK だったのです(/30 は必須)。ちなみに神のアドバイスとしてはリンクローカルアドレスである 169.254.x.x/30 を指定しておけば間違いないとのことでした。

接続の確認

FastConnect 側で正しく設定を入れて「作成」を実行してからは、「プロビジョニング完了」になるまで待つことが大切です。裏側で Azure 側の ExpressRoute にも手が入るタイミングなので、私のように余計なことはせず我慢して待つのが正解です(数十分くらいで終わるはず)。

プロビジョニングが完了したら、Azure 側 で ExpressRoute の設定画面の「Peerings」を確認します。すると、以下のように Private Peering の設定が自動的に完了しているはずです。最初これがわからずに中途半端な知識で Private Peering を作成するものかと思って数時間を消費したことをあえて強調しておきます・・。

Private Peering

OCI 側とネットワーク的に(L2, L3)正しく接続しているかの確認方法として、Private Peering 右側の「…」から、「View ARP Records」「View route table」などで相手側の Mac address 等が確認できます。ちなみに神はここの情報からネットワーク機器のメーカー等がわかると言っていました(汗。

ARP

Connection の作成 (2021.2.11 追記)

ExpressRoute と FastConnect の接続が確認できたら、Azure 側で ExpressRoute と仮想ネットワークを接続します。これは、ExpressRoute の Connection メニューから接続を作成していきます。といっても、以下のように仮想ネットワークゲートウェイと ExpressRoute をマッピングするくらいしか設定はありません。

Connection

OCI 側でも同じことが必要ですが、FastConnect 作成時に動的ルーティング ゲートウェイの選択が必須になるので、この時点では既に設定済みになっています。

通信の確認

これでネットワーク的に Azure と OCI が物理的に接続できていることになります。あとは、ホスト同士の通信を確認していきます。

ここまでくると専用線接続だからと言って特殊なことは何もなく、以下の 2 点に注意すれば接続できるはずです。

  • ルーティングの設定
  • ファイアーウォールの設定

ルーティングについては、宛先ホストの経路が専用線接続へのゲートウェイになるように設定されていれば大丈夫なので、ハマることはほとんどないはずです。

やはり気を付けたいのはファイアーウォールの設定です。通したい通信によって設定はさまざまですが、ICMP による疎通確認をしたいだけなら以下ように NSG のデフォルトで設定される 65000 番のルールが有効になっていれば OK です(本番環境では緩すぎるルールだと思うので検証用と割り切ってください)。

NSG

ネットワークの設定はうまくいってしまえばあっけないのですが、接続できていない時の手詰まり感はアプリケーション開発の比じゃないなとあらためて思い知らされました。

最近の Azure PaaS/Serverless は Private Link の登場などにより、ExpressRoute を使ったオンプレミスとの接続がアーキテクチャ設計でもあたりまえになってきたので、この検証環境はサクッと作れるようになっておきたいと思いました(目標 30 分以内)。

ExpressRoute の削除 (2021.2.11 追記)

検証が完了して ExpressRoute が不要になったでの、リソースを削除しようとしたら順番に気を付けなければならないことがわかったので、うまくいった手順を記載しておきます。

  1. Azure Connection を削除する
  2. Azure Peering を削除する
  3. OCI FastConnect を削除する
  4. Azure ExpressRoute circuit を削除する

それぞれの手順で数分から数十分待つ必要があるのと、 FastConnect の詳細ページで削除に失敗した場合には、DRG の画面から FastConnect 一覧にある三点リーダーから削除する必要がある点には注意が必要でした。