【前回】GCPサイト間VPNの構築(5.ステータス確認・疎通確認)
【次回】GCPサイト間VPNの構築(7.Cloud Deployment Manager)
ネットワーク構成
下記のネットワーク構成で、オンプレ環境に見立てたCML上のLAN(172.16.0.0/24)とGCP上のサブネット(10.0.0.0/24)が直接通信できるようにします。※Server(172.16.0.1)とVMインスタンス(10.0.0.100)で、Pingによる疎通確認ができるようにしていきます。
GCPコンソール画面上でのGUIによるVPN構築については、下記を参照してください。
gcloud CLI(gcloudコマンド)のインストール方法については、下記を参照してください。
gcloud CLI(gcloudコマンド)によるVPN接続の構築
GCPのVPN接続には、「高可用性(HA) VPN」と「Classic VPN」があります。ここでは、「高可用性(HA) VPN」でVPNを構築します。※Googleとしても、「Classic VPN」には一部非推奨な構成・機能があるため、「高可用性(HA) VPN」への移行を推奨しています。
Cloud HA VPN ゲートウェイの作成
GCP側のゲートウェイとなる「Cloud HA VPNゲートウェイ」を作成します。
gcloud compute vpn-gateways create cvpngw-gcp-vpn-test-002 \
--region=asia-northeast1 --network=vpc-gcp-vpn-test-001
Terminal[~]: gcloud compute vpn-gateways create cvpngw-gcp-vpn-test-002 \
--region=asia-northeast1 --network=vpc-gcp-vpn-test-001
Creating VPN Gateway...done.
NAME INTERFACE0 INTERFACE1 NETWORK REGION
cvpngw-gcp-vpn-test-002 XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX vpc-gcp-vpn-test-001 asia-northeast1
2つのインターフェースが作成され、それぞれにグローバルIPアドレスが振られます。
ピアVPNゲートウェイの作成
ローカルネットワーク側(オンプレ環境等)のゲートウェイとなる「ピアVPNゲートウェイ」を作成します。インターフェース0のIPアドレスには、ローカルネットワーク側のグローバルIPアドレスを入力します。
gcloud compute external-vpn-gateways create pvpngw-gcp-vpn-test-002 \
--interfaces=0=XXX.XXX.XXX.XXX
Terminal[~]: gcloud compute external-vpn-gateways create pvpngw-gcp-vpn-test-002 \
--interfaces=0=XXX.XXX.XXX.XXX
Creating external VPN gateway...done.
NAME REDUNDANCY_TYPE
pvpngw-gcp-vpn-test-002 SINGLE_IP_INTERNALLY_REDUNDANT
自宅等のインターネット環境の場合、利用しているグローバルIPアドレスは、以下のCMANのページで確認できます。
Cloud Router の作成
GCP側の終端ルーターとなる「Cloud Router」を作成します。
gcloud compute routers create crouter-gcp-vpn-test-002 \
--region=asia-northeast1 --network=vpc-gcp-vpn-test-001 \
--asn=65000
Terminal[~]: gcloud compute routers create crouter-gcp-vpn-test-002 \
--region=asia-northeast1 --network=vpc-gcp-vpn-test-001 \
--asn=65000
Creating router [crouter-gcp-vpn-test-002]...done.
NAME REGION NETWORK
crouter-gcp-vpn-test-002 asia-northeast1 vpc-gcp-vpn-test-001
VPNトンネルの作成
VPNトンネルを作成します。
gcloud compute vpn-tunnels create vpn-tunnel-gcp-vpn-test-002 \
--region=asia-northeast1 \
--vpn-gateway=cvpngw-gcp-vpn-test-002 \
--peer-external-gateway=pvpngw-gcp-vpn-test-002 --peer-external-gateway-interface=0 \
--router=crouter-gcp-vpn-test-002 --interface=0 \
--ike-version=2 \
--shared-secret=********************************
Terminal[~]: gcloud compute vpn-tunnels create vpn-tunnel-gcp-vpn-test-002 \
--region=asia-northeast1 \
--vpn-gateway=cvpngw-gcp-vpn-test-002 \
--peer-external-gateway=pvpngw-gcp-vpn-test-002 --peer-external-gateway-interface=0 \
--router=crouter-gcp-vpn-test-002 --interface=0 \
--ike-version=2 \
--shared-secret=********************************
Creating VPN tunnel...done.
NAME REGION GATEWAY VPN_INTERFACE PEER_ADDRESS
vpn-tunnel-gcp-vpn-test-002 asia-northeast1 cvpngw-gcp-vpn-test-002 0 XXX.XXX.XXX.XXX
“*******”は、任意の事前共有キーを指定します。ここで指定した事前共有キーは、ローカルネットワーク側のルーターの設定で使用します。
Cloud Router へのインターフェース追加
Cloud RouterにBGPセッション用のインターフェースを追加します。
gcloud compute routers add-interface crouter-gcp-vpn-test-002 \
--region=asia-northeast1 \
--interface-name if-bgp-gcp-vpn-test-002 \
--vpn-tunnel vpn-tunnel-gcp-vpn-test-002 \
--ip-address 169.254.0.5 --mask-length 30
Terminal[~]: gcloud compute routers add-interface crouter-gcp-vpn-test-002 \
--region=asia-northeast1 \
--interface-name if-bgp-gcp-vpn-test-002 \
--vpn-tunnel vpn-tunnel-gcp-vpn-test-002 \
--ip-address 169.254.0.5 --mask-length 30
Updated [https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/routers/crouter-gcp-vpn-test-002].
Cloud Router へのBGPピア追加
Cloud RouterにBGPピアを追加します。
gcloud compute routers add-bgp-peer crouter-gcp-vpn-test-002 \
--region=asia-northeast1 \
--peer-name bgp-gcp-vpn-test-002 \
--peer-asn 65001 \
--interface if-bgp-gcp-vpn-test-002 \
--peer-ip-address 169.254.0.6
Terminal[~]: gcloud compute routers add-bgp-peer crouter-gcp-vpn-test-002 \
--peer-name bgp-gcp-vpn-test-002 \
--peer-asn 65001 \
--interface if-bgp-gcp-vpn-test-002 \
--peer-ip-address 169.254.0.6 \
--region=asia-northeast1
Creating peer [bgp-gcp-vpn-test-002] in router [crouter-gcp-vpn-test-002]...done.
BGPピア側のルーター設定
BGPピアとなるCiscoルーターの設定については、下記を参照しください。
GCP側のステータス確認
VPNトンネル・BGPセッションの確認
下記のコマンドを実行し、VPNトンネルとBGPセッションのステータスを確認します。
gcloud compute vpn-tunnels describe vpn-tunnel-gcp-vpn-test-002
Terminal[~]: gcloud compute vpn-tunnels describe vpn-tunnel-gcp-vpn-test-002
creationTimestamp: '2022-05-05T18:47:48.603-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'XXXXXXXXXXXXXXXXXXX'
ikeVersion: 2
kind: compute#vpnTunnel
localTrafficSelector:
- 0.0.0.0/0
name: vpn-tunnel-gcp-vpn-test-002
peerExternalGateway: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/global/externalVpnGateways/pvpngw-gcp-vpn-test-002
peerExternalGatewayInterface: 0
peerIp: XXX.XXX.XXX.XXX
region: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/routers/crouter-gcp-vpn-test-002
selfLink: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/vpnTunnels/vpn-tunnel-gcp-vpn-test-002
sharedSecret: '*************'
sharedSecretHash: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/vpnGateways/cvpngw-gcp-vpn-test-002
vpnGatewayInterface: 0
detailedStatus: Tunnel is up and running.
→ VPNトンネルがアップしていることが確認できます。
status: ESTABLISHED
→ BGPセッションが確立されていることが確認できます。
受信ルートの確認
下記のコマンドを実行し、BGPでルートを受信していることを確認します。
gcloud compute routers get-status crouter-gcp-vpn-test-002
Terminal[~]: gcloud compute routers get-status crouter-gcp-vpn-test-002
kind: compute#routerStatusResponse
result:
bestRoutes:
- asPaths:
- asLists:
- 65001
pathSegmentType: AS_SEQUENCE
creationTimestamp: '2022-05-06T02:35:48.733-07:00'
destRange: 172.16.0.0/24
kind: compute#route
network: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/global/networks/vpc-gcp-vpn-test-001
nextHopIp: 169.254.0.6
nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/vpnTunnels/vpn-tunnel-gcp-vpn-test-002
priority: 0
routeType: BGP
bestRoutesForRouter:
- asPaths:
- asLists:
- 65001
pathSegmentType: AS_SEQUENCE
creationTimestamp: '2022-05-06T02:35:45.959-07:00'
destRange: 172.16.0.0/24
kind: compute#route
network: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/global/networks/vpc-gcp-vpn-test-001
nextHopIp: 169.254.0.6
priority: 0
routeStatus: ACTIVE
routeType: BGP
bgpPeerStatus:
- advertisedRoutes:
- destRange: 10.0.0.0/24
kind: compute#route
network: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/global/networks/vpc-gcp-vpn-test-001
nextHopIp: 169.254.0.5
nextHopVpnTunnel: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/vpnTunnels/vpn-tunnel-gcp-vpn-test-002
priority: 100
routeType: BGP
ipAddress: 169.254.0.5
linkedVpnTunnel: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/regions/asia-northeast1/vpnTunnels/vpn-tunnel-gcp-vpn-test-002
name: bgp-gcp-vpn-test-002
numLearnedRoutes: 1
peerIpAddress: 169.254.0.6
state: Established
status: UP
uptime: 42 minutes, 44 seconds
uptimeSeconds: '2564'
network: https://www.googleapis.com/compute/v1/projects/gcp-test-project-001-XXXXXX/global/networks/vpc-gcp-vpn-test-001
destRange: 172.16.0.0/24
nextHopIp: 169.254.0.6
→ 172.16.0.0/24のルートをBGPで受信していることが確認できます。
以上で、GCPサイト間VPNの構築(6.gcloud CLI によるVPN接続の作成)の説明は完了です!
【前回】GCPサイト間VPNの構築(5.ステータス確認・疎通確認)
【次回】GCPサイト間VPNの構築(7.Cloud Deployment Manager)