背景
前回の記事にも掲載しましたが、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 アドレスを持つ。」を利用して構成することにします。
検証環境の構成
検証結果
Google Cloud側の設定は問題なく実施できましたが、
Firebox側の設定で1つのインタフェースからGoogle Cloudとの複数のBGP接続ができないようで、
Google Cloud側でステータスが変わらないことがわかりました。
<details>
<summary>toGCP-1の概要</summary>
*** 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)
</details>
<details>
<summary>toGCP-2の概要</summary>
*** 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)
</details>
以下は設定の復習用です。
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なぁ...もう少し使い勝手よければいいんだけど...