📡

Google CloudのCloudVPN(HA)構成で接続してみる

2021/09/20に公開

以前検証した GCPとWatchGuard製FireBoxのVPN接続 の続編記録です。

背景

前回の記事にも掲載しましたが、Google CloudからVPNについて案内が来ています。

件名:[ご対応のお願い] 2021 年 10 月までに Classic VPN から高可用性 VPN に移行してください
本文:
(一部抜粋)

サポートを終了する次の Classic VPN 構成を使用した新しいトンネルは 2021 年 10 月以降は作成できなくなります。
また、これらの構成を使用している既存のトンネルはサポート対象外となります。
すでにインストールして使用しているトンネルは、引き続き正常に動作します。

・ トンネルの接続先のゲートウェイに関係なく、動的ルーティング(Cloud Router)を使用するすべての Classic VPN トンネル。
・ 使用するルーティング方法に関係なく、2 つの GCP Classic VPN ゲートウェイを相互接続する Classic VPN トンネル。
・ 静的ルーティングを使用して GCP Classic VPN ゲートウェイを他のクラウド プロバイダのネットワークに接続する Classic VPN トンネル。

この変更に向けた準備をお手伝いできるよう、このメールをネットワーク エンジニアやサイト信頼性エンジニア(SRE)にご転送ください。

https://cloud.google.com/network-connectivity/docs/vpn/how-to/moving-to-ha-vpn

CloudVPNとは?など疑問がある方は、次のブログを拝見するとよいです。
GCP の細かすぎて伝わらないハイブリッドネットワーキング

CloudVPN(HA)については、公式ドキュメントでトポロジーについて次の通りに記載されています。

  • 1 台の HA VPN ゲートウェイと 2 台の別々のピア VPN デバイスを接続し、各ピアデバイスが個別の外部 IP アドレスを持つ。
  • 1 台の HA VPN ゲートウェイと 1 台のピア VPN デバイスを接続し、ピアデバイスが 2 つの外部 IP アドレスを持つ。
  • 1 台の HA VPN ゲートウェイと 1 台のピア VPN デバイスを接続し、ピアデバイスが 1 つの外部 IP アドレスを持つ。

https://cloud.google.com/network-connectivity/docs/vpn/concepts/topologies

今回の検証で構築する環境については、「1 台の HA VPN ゲートウェイと 1 台のピア VPN デバイスを接続し、ピアデバイスが 1 つの外部 IP アドレスを持つ。」を利用して構成することにします。

VPN-HAトポロジー

検証環境の構成

検証環境構成

検証結果

Google Cloud側の設定は問題なく実施できましたが、
Firebox側の設定で1つのインタフェースからGoogle Cloudとの複数のBGP接続ができないようで、
Google Cloud側でステータスが変わらないことがわかりました。

toGCP-1の概要
*** WG Diagnostic Report for Gateway "toGCP-1" ***
Created On: Mon Sep 20 17:57:36 2021

[Conclusion]
    There are no VPN routes for BOVPN virtual interface toGCP-1.A correction to this error was attempted.
    Recommendation: Send traffic to a host on the remote network, and run the report again.

[Gateway Summary]
    Gateway "toGCP-1" contains "1" gateway endpoint(s). IKE Version is IKEv2.
    Gateway Endpoint #1 (name "toGCP-1") Enabled
        PFS: Disabled 	AlwaysUp: Enabled
        DPD: Disabled 	Keepalive: Enabled
        Local ID<->Remote ID: {IP_ADDR(${myGlobalIpAddress}) <-> IP_ADDR(35.220.56.85)}
        Local GW_IP<->Remote GW_IP: {${myGlobalIpAddress} <-> 35.220.56.85}
        Outgoing Interface: eth0 (ifIndex=2)
            ifMark=0x10000
            linkStatus=2 (0:unknown, 1:down, 2:up)
        BVPN Interface: bvpn1 (ifIndex=18)
            Remote Endpoint Type: Cloud VPN or Third-Party Gateway
            Local IP address/Netmask: {169.254.1.2 / 255.255.255.252}
            NAT-D flag=0x0 (0:none, 1:remote, 2:local, 3:both)


[Tunnel Summary]
    "1" tunnel(s) are found using the previous gateway

    Name: "toGCP-1" Enabled
        PFS: "Enabled" DH-Group: "14"
        Number of Proposals: "1"
        Proposal "ESP-AES256-SHA256"
            ESP:
            EncryptAlgo: "AES" KeyLen: "32(bytes)"
            AuthAlgo: "SHA2-256" 
            LifeTime: "28800(seconds)" LifeByte: "0(kbytes)"
        Number of Tunnel Routes: "0"


[Run-time Info (bvpn routes)]


[Run-time Info (gateway IKE_SA)]
    Name: "toGCP-1" (IfStatus: 0x80000002)
    IKE SAID: "0x4436fa33" State: "MATURE"
    Created: Mon Sep 20 17:15:09 2021
    My Address: ${myGlobalIpAddress}:500	Peer Address: 35.220.56.85:500
    InitCookie: "d30b0de5027278e2"	RespCookie: "d95dfe2177ef4615"
    LifeTime: "86400(seconds)" LifeByte: "0(kbtyes)" DPD: "Enabled"
    Serial Number: 301
    msgIdSend: 78 msgIdRecv: 68


[Run-time Info (tunnel IPSEC_SA)]
    "2" IPSEC SA(s) are found under tunnel "toGCP-1"
    #1 "OUTBOUND"
        SPI: 0x3460484e ISAKMP SA ID: 0x4436fa33
        Created on: Mon Sep 20 17:15:13 2021
        Last Used on: Mon Sep 20 17:57:35 2021
        Bytes Sent: "349612" Packets Sent: "7999"
        Errors: replay: "0" replay_win: "0" integrity: "0" hw_ctx: "0"
        HwCryptoCtx: currErr: "0" ctxState: "0"
        Tunnel Endpoint: "${myGlobalIpAddress}->35.220.56.85"
        Tunnel Selector: "0 -> 0	Proto: ANY"
        AUTH: "hmac(sha256)" KeyLen: "32(bytes)"
        CRYPT: "cbc(aes)" KeyLen: "32(bytes)"
        XFRM Mark: 1 (value: 0x1 mask: 0xffff)
        Gateway Name: "toGCP-1"
        Tunnel Name: "toGCP-1"
        Owner Id: "D0FF037E97925"
        IFMARK: "0x10000(2)" DPD: "Disabled"
        Number of Rekeys: "0"
    #2 "INBOUND"
        SPI: 0xc023b9e ISAKMP SA ID: 0x4436fa33
        Created on: Mon Sep 20 17:15:13 2021
        Last Used on: Mon Sep 20 17:57:35 2021
        Bytes Sent: "515169" Packets Sent: "7999"
        Errors: replay: "0" replay_win: "0" integrity: "0" hw_ctx: "0"
        HwCryptoCtx: currErr: "0" ctxState: "0"
        Tunnel Endpoint: "35.220.56.85->${myGlobalIpAddress}"
        Tunnel Selector: "0 -> 0	Proto: ANY"
        AUTH: "hmac(sha256)" KeyLen: "32(bytes)"
        CRYPT: "cbc(aes)" KeyLen: "32(bytes)"
        XFRM Mark: 1 (value: 0x1 mask: 0xffff)
        Gateway Name: "toGCP-1"
        Tunnel Name: "toGCP-1"
        Owner Id: "D0FF037E97925"
        IFMARK: "0x10000(2)" DPD: "Disabled"
        Number of Rekeys: "0"

[Run-time Info (tunnel IPSEC_SP)]
    "1" IPSEC SP(s) are found under tunnel "toGCP-1"
    #1
        Tunnel Endpoint: "${myGlobalIpAddress}->35.220.56.85"
        Tunnel Selector: 0 -> 0	Proto: ANY
        XFRM Mark: 1 (value: 0x1, mask: 0xffff)
        Created On: Mon Sep 20 17:15:07 2021
        Last Used On: Mon Sep 20 17:57:35 2021
        Gateway Name: "toGCP-1"
        Tunnel Name: "toGCP-1"

[Policy checker result]
    Tunnel name: toGCP-1
        No policy checker results for this tunnel(no vpn routes found or some other error)
toGCP-2の概要
*** WG Diagnostic Report for Gateway "toGCP-2" ***
Created On: Mon Sep 20 17:58:39 2021

[Conclusion]
    There are no VPN routes for BOVPN virtual interface toGCP-2.A correction to this error was attempted.
    Recommendation: Send traffic to a host on the remote network, and run the report again.

[Gateway Summary]
    Gateway "toGCP-2" contains "1" gateway endpoint(s). IKE Version is IKEv2.
    Gateway Endpoint #1 (name "toGCP-2") Enabled
        PFS: Disabled 	AlwaysUp: Enabled
        DPD: Disabled 	Keepalive: Enabled
        Local ID<->Remote ID: {IP_ADDR(219.110.18.52) <-> IP_ADDR(35.242.59.89)}
        Local GW_IP<->Remote GW_IP: {${myGlobalIpAddress} <-> 35.242.59.89}
        Outgoing Interface: eth0 (ifIndex=2)
            ifMark=0x10000
            linkStatus=2 (0:unknown, 1:down, 2:up)
        BVPN Interface: bvpn5 (ifIndex=20)
            Remote Endpoint Type: Cloud VPN or Third-Party Gateway
            Local IP address/Netmask: {169.254.2.2 / 255.255.255.252}
            NAT-D flag=0x0 (0:none, 1:remote, 2:local, 3:both)


[Tunnel Summary]
    "1" tunnel(s) are found using the previous gateway

    Name: "toGCP-2" Enabled
        PFS: "Enabled" DH-Group: "14"
        Number of Proposals: "1"
        Proposal "ESP-AES256-SHA256"
            ESP:
            EncryptAlgo: "AES" KeyLen: "32(bytes)"
            AuthAlgo: "SHA2-256" 
            LifeTime: "28800(seconds)" LifeByte: "0(kbytes)"
        Number of Tunnel Routes: "0"


[Run-time Info (bvpn routes)]


[Run-time Info (gateway IKE_SA)]
    Name: "toGCP-2" (IfStatus: 0x80000002)
    IKE SAID: "0x57428249" State: "DELETING"
    Created: Mon Sep 20 17:58:37 2021
    My Address: ${myGlobalIpAddress}:500	Peer Address: 35.242.59.89:500
    InitCookie: "fb2fa0a577af9c07"	RespCookie: "dd2f35401ac33b0b"
    LifeTime: "86400(seconds)" LifeByte: "0(kbtyes)" DPD: "Enabled"
    Serial Number: 949
    msgIdSend: 1 msgIdRecv: 3


[Run-time Info (tunnel IPSEC_SA)]
    "0" IPSEC SA(s) are found under tunnel "toGCP-2"

[Run-time Info (tunnel IPSEC_SP)]
    "1" IPSEC SP(s) are found under tunnel "toGCP-2"
    #1
        Tunnel Endpoint: "${myGlobalIpAddress}->35.242.59.89"
        Tunnel Selector: 0 -> 0	Proto: ANY
        XFRM Mark: 5 (value: 0x5, mask: 0xffff)
        Created On: Mon Sep 20 17:39:08 2021
        Gateway Name: "toGCP-2"
        Tunnel Name: "toGCP-2"

[Policy checker result]
    Tunnel name: toGCP-2
        No policy checker results for this tunnel(no vpn routes found or some other error)

以下は設定の復習用です。

VPNの作成

2021年9月20日時点ではまだ選択可能です。

検証環境

前述のHA構成を実施するための選択肢が予め選択可能になっています。

検証環境

AS番号はプライベートで運用するため、特にしていなければ65534あたりを使う。
グローバルネットワークを管理しているようなTier1プロバイダを始め、AS番号を使って互いにBGPで通信を行うことで互いに追加したルートが動的に反映されるようになっている。

検証環境

IPSecのローカルアドレスは外部に通信する要件もないので、リンクローカルアドレス(169.254.x.x)がよく使われる。
255.255.255.252(/30)で互いに一つずつという構成も一般的。

検証環境

BGPセッションの設定も行うと、Google Cloud側は待機状態になる。

検証環境

追加する場合は、既に定義したVPNゲートウェイとCloud Routerを使って同じ手順を繰り返す。

検証環境

するとVPNは次のようになる。

検証環境

まとめ

接続に利用した機器の課題はありますが、目的であるGoogle CloudのCloud VPN(HA)自体は触ることができました。
結局、HA構成だからといって必ずGoogle Cloudが2つのインタフェースを使った定義をしなければならないということではなく、
まずは最低一つの定義をすればよいということは、実際に触ってみることで理解できたのでよかったです。

Fireboxなぁ...もう少し使い勝手よければいいんだけど...

Discussion