こんにちは駆け出しアーキテクトのやまぱんです。
今回は Azure 環境内で S2S VPN with BGP 環境 を Azure Portal で作ってみます。
IaC (Bicep) でパッとデプロイしてつくるなら親愛なる同僚のこちらの記事で紹介されてる Bicep を使ってデプロイするとよいでしょう。まさにポチポチして待ってるだけでできます!
ただ、やはり自分で 1 つずつ設定して作ることもしておこうと思ったら少しハマったので自分の為にもこの記事を書きます。
似たような記事をいくつか見つけましたが UI が変わっていたり、図がちょっとおかしかったり、肝心なところが分かりづらかったり、BGP を有効にしてなかったりしていたので改めて書き下ろしてみました。
誰かの役に立てば幸いです。
コメントなどあれば是非いただければと思います👸
P2S の方の記事も上げましたのでよければご覧ください。
さて、Vnet 同士をつなげるには Vnet peering や Vnet どうし向けの V2V VPN などの方法がありますが、 Azure 環境内でオンプレ環境とつなげるような疑似環境を作るには S2S VPN を構成することになります。
VPN ゲートウェイのデプロイに時間がかかるのでスムーズにいって 40 分程度はかかると思います。
前置き
Azure VPN Gateway とは
Azure VPN Gateway は 仮想ネットワークゲートウェイ(Virtual Network Gateway)の一種です。
なので、デプロイするときは仮想ネットワークゲートウェイをデプロイし、ゲートウェイの種類で VPN を選択します。

Azure VPN Gateway の接続方法
そもそも Azure VPN Gateway の接続方法は以下の3種類あります。
- S2S / Site to Site 接続 (今回はこちら)
他クラウド環境と接続したり、オンプレミス環境と接続したり - V2V / VNet to VNet 接続
Vnet 同士 の VPN 接続 - P2S / Point to Site 接続
クライアント PC と Azure Vnet を接続
Local Network Gateway
Local Network Gateway は 接続先のネットワークの情報 を格納するものです。
Local Network Gateway はいわゆる名前から想像するようなゲートウェイではないです。
名前が非常にややこしいと思います。
これがわりと今回の肝です。
ざっくりやりたいこと
こんな感じで 2 つの独立した Azure のネットワーク (Vnet) を VPN (S2S 接続) でつなげたい。
ついでに BGP も有効にしたい。

as-is / to-be
事前の環境(as-is)
こんな感じの環境からスタートします。
- クラウド側 (Vnet-Hub)が 10.100.0.0/16
- オンプレ側 (Vnet-Onp)が 172.16.0.0/16
ただし、Azure Firewall や Azure Bastion は今回不要なのでなくても構いません。
最低限 Vnet があれば OK です。
完成する環境(to-be)
手順
実際につくっていきます。
上述の通り、事前に Vnet は既にある前提で作っていきます。
GatewaySubnet を作る
VPN ゲートウェイを作る

Azure Portal の検索窓から「VNG」や「仮想ネットワークゲートウェイ」で検索する。
時間がかかる (20 分ぐらいはかかります) ので、コンビニいったり、洗濯したり、散歩したり、溜まってる LINE を返すなどするとよいでしょう。
SKU は検証用なので高価なものは必要ないので廉価なものを設定しています。
ASN は 65010 を指定
ASN は 65020を指定
- 作成した VPN ゲートウェイ(仮想ネットワークゲートウェイ)のパラメーターは[仮想ネットワークゲートウェイ] → [構成] から確認可能
ここまで出来たらこんな感じになってるはず。
あとはローカルネットワークゲートウェイを作って接続です!

ローカルネットワークゲートウェイを作る
Azure Portal の検索窓から「LNG」や「ローカルネットワークゲートウェイ」で検索する。

ローカルネットワークゲートウェイは接続先のネットワークの情報を設定します。
つまり・・・
- クラウド側 (Vnet-Hub)のローカルネットワークゲートウェイはオンプレ側 (Vnet-Onp)の VPN ゲートウェイの情報をいれます
- オンプレ側 (Vnet-Onp)のローカルネットワークゲートウェイはクラウド側 (Vnet-Hub)の VPN ゲートウェイの情報をいれます
-
クラウド側 (Vnet-Hub)での設定値
前の手順で作成したオンプレ側 (Vnet-Onp) の VPN ゲートウェイの値を確認しつつ入れていきます。
名前は HUB_LNG で作成します。

このあたりを参考にして設定値を下記のように入れます。

-
オンプレ側 (Vnet-Onp)での設定値
こちらも同様に、前の手順で作成したクラウド側 (Vnet-Hub) の VPN ゲートウェイの値を確認しつつ入れていきます。
名前は Onp_LNG で作成します。

ここまでくればあとは接続するだけ!
接続します (接続のデプロイ)
さて、メインの接続です。
ここまでの設定に問題がなければ接続もスムーズにいくはず!
接続の種類:サイト対サイト、名前は HubToOnp 、psk は password、BGP は有効、仮想ネットワークゲートウェイとローカルネットワークゲートウェイはクラウド側のリソースを指定し、そのほかはデフォルトです。

できあがると状態が"不明"のままで表示されます。
オンプレ側もつくると状態が変わります。

- オンプレ側 (Vnet-Onp)での設定値
名前は OnpToHub、psk も同じものを設定し、その他同様に同じように設定します。
下記のような感じで作成。
接続の確認
接続リソース
"接続リソース"が正しく作成されていると、2~3 分まって更新すると状態が "不明"から"接続済" になります。

仮想ネットワークゲートウェイ
仮想ネットワークゲートウェイ → [BGP ピア] から下記のように確認することができます。
これはクラウド側 (Vnet-Hub) 10.100.0.0/16 側の仮想ネットワークゲートウェイを確認した結果です。
オンプレ側 (Vnet-Onp) : 172.16.0.0/16 のルートを学習していることが分かります。

VM による ping の確認
予め受け側のマシンで管理者権限でコマンドプロンプトを起動して下記コマンドで ping 応答を許可しておきます。(ここで説明は省きますが、NSG も許可しておきます)
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow
下記の通り、クラウド側 (Vnet-Hub): 10.100.1.4 からオンプレ側 (Vnet-Onp): 172.16.1.4 へ ping コマンドを教えて打って、応答が返ってきていることが分かります。

参考







