Azure と GCP を BGP で冗長な S2S VPN 接続してみる

Azure と GCP を BGP で冗長な S2S VPN 接続してみる

今回は Azure と Google Cloud を VPN 接続してみます。Google Cloud も AWS と同様に BGP ネイバーを確立するために APIPA を利用する必要があります。

今回の構成

Azure の仮想ネットワークゲートウェイと Google Cloud の Cloud Router を接続します。Cloud Router では Google Cloud 側ネットワークの AS 番号などを指定しますが、グローバル IP は接続ごとに払い出されます。したがって、斜めの襷掛け線はリンクアップしない接続となります。

構築手順

Azure:仮想ネットワークの展開

Azure ポータルにて、[リソースの作成] から「仮想ネットワーク」と検索し、[仮想ネットワーク][作成] をクリックします。

[基本] タブにて、次のように設定して [次] をクリックします。

  • [サブスクリプション]:リソースを作成するサブスクリプションを選択
  • [リソースグループ]:リソースを作成するリソースグループを選択
  • [名前]:リソースの名前を指定(VPN-LAB-2-VNET
  • [地域][東日本]

[IP アドレス] タブで次のように入力し、[次] をクリックします。

  • [IPv4 アドレス空間]:仮想ネットワークのプライベートアドレスを指定(172.17.2.0/24
  • [サブネット]
    • [サブネット名]:サブネットの名前を指定(PrivateSubnet
    • [サブネットアドレス範囲]:サブネットのアドレス範囲を指定(172.17.2.0/25

[セキュリティ] タブで次のように設定して [次] をクリックします。

  • [BastionHost][無効化]
  • [DDoS Protection Standard][無効化]
  • [ファイアウォール][無効化]

[タグ] タブでそのまま [次] をクリックします。

[確認および作成] タブで [作成] をクリックします。

仮想ネットワークの作成が完了するのを確認します。

Azure:仮想ネットワークゲートウェイの展開

[リソースの作成] から「仮想ネットワーク ゲートウェイ」と検索し、 [仮想ネットワーク ゲートウェイ][作成] をクリックします。

[基本] タブで次のように入力して [次] をクリックします。

  • [プロジェクトの詳細]
    • [サブスクリプション]:リソースを作成するサブスクリプションを選択
    • [リソースグループ]:仮想ネットワークに応じて自動選択
  • [インスタンスの詳細]
    • [名前]:リソースの名前を指定(VPN-LAB-2-VGW
    • [地域][東日本]
    • [ゲートウェイの種類][VPN]
    • [VPN の種類][ルート ベース]
    • [SKU][VpnGw1]
    • [世代][Generation1]
    • [仮想ネットワーク][VPN-LAB-2-VNET]
    • [ゲートウェイ サブネットのアドレス範囲]:GatewaySubnet のアドレス範囲を指定(172.17.2.128/28
  • [パブリック IP アドレス]
    • [パブリック IP アドレス名]:パブリック IP アドレスリソースの名前(VPN-LAB-2-VGW-PIP-1
  • [2番目のパブリック IP アドレス]
    • [2番目のパブリック IP アドレス名]:パブリック IP アドレスリソースの名前(VPN-LAB-2-VGW-PIP-2
  • [BGP の構成][有効]
  • [自律システム番号 (ASN)]:仮想ネットワークの AS 番号を指定(64172
  • [カスタムの Azure APIPA BGP IP アドレス]:BGP ピアリングに使う IP アドレスを指定(169.254.22.2
  • [2番目のカスタムの Azure APIPA BGP IP アドレス]:BGP ピアリングに使う IP アドレスを指定(169.254.22.10

[タグ] タブでそのまま [次] をクリックします。

[確認および作成] タブで [作成] をクリックします。

仮想ネットワークゲートウェイの作成が完了するのを待ちます(30〜40分かかります)。完了したら仮想ネットワークゲートウェイのパブリック IP アドレスを [構成] から確認します。

GC:VPC ネットワークの作成

Cloud Console にて、[VPC ネットワーク]>[VPC ネットワーク] をクリックし、上部の [VPC ネットワークを作成] をクリックします。

[VPC ネットワークの作成] にて、次のように入力して [作成] をクリックします。

  • [名前]:VPC ネットワークの名前を指定(vpn-lab-2-vpc
  • [サブネット作成モード][カスタム]
    • [名前]:サブネットの名前を指定(lab-2-private-subnet
    • [リージョン][asia-northeast1]
    • [IP アドレス範囲]:サブネットのアドレス範囲を指定(172.19.2.0/24
    • [限定公開の Google アクセス][オフ]
    • [フローログ][オフ]
  • [動的ルーティング モード][リージョン]
  • [Maximum Transmission Unit]:1460

VPC ネットワークが作成されたことを確認します。

GC:クラウドルーターの作成

[ハイブリッド接続]>[クラウド ルーター] を選択し、上部の [ルーターを作成] をクリックします。

[Cloud Router の作成] にて、次のように入力して [作成] をクリックします。

  • [名前]:クラウド ルーターの名前を指定(vpn-lab-2-cr
  • [ネットワーク][vpn-lab-2-vpc]
  • [リージョン][asia-northeast1]
  • [Google ASN]:Google Cloud 側の AS 番号を指定(65192
  • [アドバタイズさえれたルート]
    • [ルート][Cloud Route に表示されるすべてのサブネットにアドバタイズ]

クラウドルーターが作成されたことを核にします。

GC:VPN 接続の作成

[ハイブリッド接続]>[VPN] を選択し、[VPN 接続を作成] をクリックします。

[VPN の作成] にて、[高可用性 (HA) VPN] を選択して [続行] をクリックします。

[Cloud HA VPN ゲートウェイの作成] にて、次のように入力し、[作成して続行] をクリックします。

  • [VPN ゲートウェイの名前]:VPN ゲートウェイの名前を指定(vpn-lab-2-vgw
  • [ネットワーク][vpn-lab-2-vpc]
  • [リージョン][asia-northeast1]

[VPN トンネルの追加] にて、[ピア VPN ゲートウェイ][オンプレミスまたは非 Google Cloud] を選択します。その後、[ピア VPN ゲートウェイの名前][新しいピア VPN ゲートウェイを作成する] をクリックします。

[ピア VPN ゲートウェイの追加] にて、次のように設定し [作成] をクリックします。

  • [名前]:ピア VPN ゲートウェイの名前を指定(vpn-lab-2-pgw-azure
  • [ピア VPN ゲートウェイ インタフェース][2 つのインターフェース]
    • [インターフェース 0 の IP アドレス]:Azure 仮想ネットワークゲートウェイの 1 番目のパブリック IP アドレスを入力
    • [インターフェース 1 の IP アドレス]:Azure 仮想ネットワークゲートウェイの 2 番目のパブリック IP アドレスを入力

再び [VPN トンネルの追加] にて、次のように入力した後で [VPN トンネル (未構成)] をクリックします。

  • [高可用性][VPN トンネルのペアを作成する]
  • [Cloud Route][vpn-lab-2-cr]

[VPN トンネル] にて、次のように入力して [完了] をクリックします。

  • [関連づけられている Cloud VPN ゲートウェイ インタフェース]:Cloud VPN ゲートウェイの 1 番目の IP アドレスが自動選択
  • [関連づけられているピア VPN ゲートウェイ インタフェース]:Azure 仮想ネットワークゲートウェイの 1 番目のパブリック IP アドレスを選択
  • [名前]:1 番目の VPN トンネルの名前を指定(vpn-lab-2-vgw-to-azure-1
  • [IKE バージョン][IKEv2]
  • [IKE 事前共有キー]: 1 番目の VPN トンネルの共有キーを指定

同様に 2 番目の VPN トンネルの情報を入力します。

  • [関連づけられている Cloud VPN ゲートウェイ インタフェース]:Cloud VPN ゲートウェイの 2 番目の IP アドレスが自動選択
  • [関連づけられているピア VPN ゲートウェイ インタフェース]:Azure 仮想ネットワークゲートウェイの 2 番目のパブリック IP アドレスを選択
  • [名前]:2 番目の VPN トンネルの名前を指定(vpn-lab-2-vgw-to-azure-2
  • [IKE バージョン][IKEv2]
  • [IKE 事前共有キー]: 2 番目の VPN トンネルの共有キーを指定

VPN トンネルを作成したら [作成して続行] をクリックします。

[BGP セッションの構成] にて、[BGP セッションを構成] をクリックします。

[BGP セッションの作成] にて、次のように入力して [作成] をクリックします。

  • [名前]:BGP セッションの名前(vpn-lab-2-bgp-azure-1
  • [ピア ASN]:Azure 仮想ネットワークゲートウェイの AS 番号(64172
  • [アドバタイズされたルートの優先度 (MED)]:空欄
  • [Cloud Router の BGP IP]:Cloud Router の BGP IP アドレス(169.254.22.1
  • [BGP ピア IP]:Azure 仮想ネットワークゲートウェイの BGP ピア IP アドレス(169.254.22.2

BGP セッションの構成を入力し終えたら [BGP 構成を保存] をクリックします。

[まとめとリマインダー] にて、設定内容を確認して [OK] をクリックします。

Azure:ローカルネットワークゲートウェイの展開

Azure ポータルに戻り、[リソースの作成] から「ローカル ネットワーク ゲートウェイ」を検索し、[ローカル ネットワーク ゲートウェイ][作成] をクリックします。

[ローカル ネットワーク ゲートウェイの作成] にて、次のように入力して [作成] をクリックします。

1 番目のローカルネットワークゲートウェイには 1 番目の Google Cloud の VPN 接続(vpn-lab-2-vgw-to-azure-1)の接続情報を入力します。

  • [名前]:ローカルネットワークゲートウェイの名前を指定(VPN-LAB-2-GC-1
  • [エンドポイント][IP アドレス]
  • [IP アドレス]:Google Cloud の VPN 接続ののグローバル IP アドレスを指定
  • [アドレス空間]:空欄
  • [BGP 設定の構成][有効]
  • [自律システム番号 (ASN)]:Google Cloud の AS 番号を指定(65192
  • [BGP ピアの IP アドレス]:Google Cloud の BGP ピア IP アドレスを指定(169.254.22.1
  • [サブスクリプション]:ローカルネットワークゲートウェイを展開するサブスクリプションを指定
  • [リソース グループ]:ローカルネットワークゲートウェイを展開するリソースグループを指定
  • [場所]:ローカルネットワークゲートウェイを展開するリージョンを指定

同様に 2 番目のローカルネットワークゲートウェイも同様に作成します。2 番目のローカルネットワークゲートウェイには 2 番目の Google Cloud の VPN 接続(vpn-lab-2-vgw-to-azure-2)の接続情報を入力します。

  • [名前]:ローカルネットワークゲートウェイの名前を指定(VPN-LAB-2-GC-2
  • [エンドポイント][IP アドレス]
  • [IP アドレス]:Google Cloud の VPN 接続ののグローバル IP アドレスを指定
  • [アドレス空間]:空欄
  • [BGP 設定の構成][有効]
  • [自律システム番号 (ASN)]:Google Cloud の AS 番号を指定(65192
  • [BGP ピアの IP アドレス]:Google Cloud の BGP ピア IP アドレスを指定(169.254.22.2
  • [サブスクリプション]:ローカルネットワークゲートウェイを展開するサブスクリプションを指定
  • [リソース グループ]:ローカルネットワークゲートウェイを展開するリソースグループを指定
  • [場所]:ローカルネットワークゲートウェイを展開するリージョンを指定

ローカルネットワークゲートウェイが作成されたことを確認します。

Azure:サイト間接続の展開

[すべてのリソース]>[仮想ネットワーク ゲートウェイ] を選択し、作成した仮想ネットワークゲートウェイ(VPN-LAB-2-VGW)をクリックします。

左メニューから、[接続] をクリックします。上部メニューの [追加] をクリックします。[接続の追加] にて、次のように入力して [OK] をクリックします。

  • [名前]:接続の名前を指定(VPN-LAB-2-VGW-to-GC-1
  • [接続の種類][サイト対サイト (IPsec)]
  • [仮想ネットワーク ゲートウェイ][VPN-LAB-2-VGW]
  • [ローカル ネットワーク ゲートウェイ][VPN-LAB-2-GC-1]
  • [共有キー (PSK)]vpn-lab-2-vgw-to-azure-1 で指定した事前共有キー
  • [Azure プライベート IP アドレスを使用する][無効] (未チェック)
  • [BGP を有効にする][有効] (チェック)
  • [IKE プロトコル][IKEv2]

2番目の接続も同様に作成します。

  • [名前]:接続の名前を指定(VPN-LAB-2-VGW-to-GC-2
  • [接続の種類][サイト対サイト (IPsec)]
  • [仮想ネットワーク ゲートウェイ][VPN-LAB-2-VGW]
  • [ローカル ネットワーク ゲートウェイ][VPN-LAB-2-GC-2]
  • [共有キー (PSK)]vpn-lab-2-vgw-to-azure-2 で指定した事前共有キー
  • [Azure プライベート IP アドレスを使用する][無効] (未チェック)
  • [BGP を有効にする][有効] (チェック)
  • [IKE プロトコル][IKEv2]

2つの接続が作成されたことを確認します。

動作確認

接続状態

Azure の仮想ネットワークゲートウェイで接続の [状態] が両方とも [接続済み] になることを確認します。

Google Cloud の VPN 接続は 2 つのトンネルで [VPN トンネルのステータス][確立済み][BGP セッションのステータス][BGP が確立されました] になります。

ルート広報

Azure では仮想マシンのネットワークインターフェースを選択し、 [有効なルート] から BGP で広報されたルートを確認できます。広報されたルートは次ホップが [仮想ネットワーク ゲートウェイ] になっています。

Google Cloud では VPC の [ルート] タブを選択することで広報されたルートを確認できます。広報されたルートは [ネクストホップ] が仮想プライベートゲートウェイの BGP アドレスになっています。

以上で BGP による Azure と Google Cloud の S2S VPN 接続は完了です。といきたいところですが、どうにも接続が不安定です。両方の接続が綺麗にアップしませんでした。BGP ネイバーが、片方はアップするけどもう片方がダウンしている、という状態が数時間おきに入れ替わるような感じです。どちらの接続もアップはするので設定値に問題はなさそうですが、少し不可解でした。