富士ソフトの佐藤です。
Google Cloudに環境を構築した後、既存の社内環境と接続する必要が出てくることがあります。セキュアかつ高速で安定した経路としてInterConnectがおすすめですが、コストをかけずに迅速に接続したい場合は、VPN接続が適しています。
今回は、Google Cloudと社内環境に見立てた自宅のホームラボ環境をVPN接続し、自宅からGoogle Cloudに接続する方法をご紹介します。
構成
ホームラボのゲートウェイであるFortigate60DとGoogle CloudのCloud VPNでVPN接続を行い、さらにCloud RouterとBGPによるルート情報の交換を行うことで、通信を可能にします。
Compute Engineはすでに構築済みで、Webサーバーとして起動しています。
Cloud VPNの概要
Cloud VPNは、IPsec VPN接続を使用してピアネットワークをVPCネットワークに安全に拡張するサービスです。
ネットワーク間のトラフィックを暗号化し、VPNゲートウェイ間で暗号化と復号を行うことで、送信中のデータを保護します。
主なVPN接続サービスには以下の2種類があります。
設計時の考慮ポイント
Cloud VPNを設計する際は、以下の点を考慮することが重要です。
トンネル構成
HA VPNトンネルが2つある場合はアクティブ/パッシブ構成、3つ以上ある場合はアクティブ/アクティブ構成を使用します。
セキュリティ対策
テストと検証
本番環境に展開する前に、テスト環境でVPN接続の動作を確認します。
設定手順概要
Cloud VPNの設定手順
1.VPN設定ウィザードの起動
2.VPNオプションの選択
3.Cloud HA VPNゲートウェイの作成
4.VPNトンネルの追加
5.Cloud Routerの設定
6.BGPセッションの構成
7.設定の確認とサンプル構成ファイルのダウンロード
ホームラボのFortigate60Dの設定手順
1.サンプル構成ファイルの修正
2.CLIからの設定の適用
3.VPNトンネルの確認
4.BGPルーティングの確認
Cloud VPNの設定手順
1.JITHUBプロジェクトで、 [ネットワーク接続]-[VPN]を選択し、[+VPN設定ウィザード]を選択する。
2.VPNオプションで、「高可用性(HA)VPN」選択し、「続行」をクリックする。
3.「①Cloud HA VPNゲートウェイの作成」で以下の情報を入力し、「作成して続行」を選択する。
VPNゲートウェイの名前:gcvpngw
ネットワーク:mainvpc
リージョン:asia-northeast1(東京)
VPNゲートウェイのIPバージョン:IPv4
VPNゲートウェイのIPスタックタイプ:IPv4(シングルスタック)
4.「②VPNトンネルの追加」で以下の情報を入力し、「作成して続行」を選択する。
ピアVPNゲートウェイ:オンプレミス、または Google Cloud 以外
ピアVPNゲートウェイの名前:「新しいピアVPNゲートウェイを作成する」を選択
名前:fgt60d
インタフェース:1つのインターフェース
インタフェース0のIPアドレス:183.180.20.137 ←Fortigate60DのグロバールIPを入力する
高可用性:VPNトンネルを1つ作成する
5.引き続き以下の情報を入力する。
Cloud Router:「新しいルーターを作成」を選択する。
名前:vpnrouter
Google ASN:64640
ルート:Cloud Routerに表示されるすべてのサブネットにアドバタイズ(デフォルト)
6.引き続き以下の情報を入力する。
Cloud Router:vpnrouter
名前:vpntunnel01
IKE事前共有鍵キー:xxxxxxxx
7.「+VPNTUNNEL01用のBPGセッションを構成」を選択する。
8.「BGPセッションの作成」で以下の情報を入力し、「保存して次へ」を選択する。
BGPセッションの種類:IPv4 BGPセッション
名前:bgpsession01
ピアASN:65000 ←Fortigateでは、65000でBGPのASNを設定している
BGP IPv4アドレスを割り当てる:自動
9.BGPの設定が反映されたことを確認して、「BGP構成を保存」を選択する。
10.「リマインダー」の下にある「構成をダウンロード」を押下すると、オンプレ環境用のサンプル構成ファイルをダウンロードできるので、該当するベンダー、プラットフォーム、ソフトウェアを選択してください。
なお、Fortigateは1つしか設定ファイルがなかったので、これをダウンロードします。
サンプル構成ファイルは以下となります。
# Google Cloud # Configuration generated for fgt60d, project: jithub-414902. # # This configuration contains _SNAKE_CASE_ variables which are required to be # replaced by the network engineer setting up the GCP <-> Prem VPN tunnels. # # These values are as follows: # > _IKE_SHARED_SECRET_PLACEHOLDER_ if configuration is downloaded after creation in GCP, this is where pre-shared secret is replaced. # > _CUSTOMER_ONPREM_IP_ ip component of on-premise IP range e.g. 172.10.11.0/24 => 172.10.11.0 # > _CUSTOMER_ONPREM_NETMASK_ netmask component of GCP on-premise IP range e.g. 172.10.11.0/24 => 24 => 255.255.255.0 # Other # > Port assignment assumes no prior set up for virtual port assignments # > aes256-sha1 algorithms are chosen as a sensible default; if modified, pay # mind to MTU differences config system interface edit port1 set vdom root set mode static set ip 169.254.76.222 255.255.255.252 set allowaccess ping https ssh set description wan1 next edit port2 set vdom root set mode static set ip _CUSTOMER_ONPREM_IP_ _CUSTOMER_ONPREM_NETMASK_ set allowaccess ping set description lan1 next end # phase1 config vpn ipsec phase1-interface edit GCP-HA-VPN-INT0 set interface port1 set ike-version 2 set keylife 36000 set peertype any set proposal aes256-sha1 set remote-gw 34.157.78.15 set local-gw 183.180.20.137 set psksecret VMwarevmware1! next end # phase2 config vpn ipsec phase2-interface edit GCP-HA-VPN-INT0 set phase1name GCP-HA-VPN-INT0 set proposal aes256-sha1 set dhgrp 15 set keylifeseconds 10800 next end # tunnel interfaces config system interface edit GCP-HA-VPN-INT0 set ip 169.254.76.222 _CUSTOMER_ONPREM_NETMASK_TUNNEL0_ set remote-ip 169.254.76.221 255.255.255.252 next end # Configure BGP settings config router bgp set as 65000 set router-id 169.254.76.222 config neighbor edit 169.254.76.221 set soft-reconfiguration enable set remote-as 64640 next end config redistribute connected set status enable end end # Configure the firewall policy to allow traffic config firewall policy edit 1 set name allow-gcp-to-lan set srcintf GCP-HA-VPN-INT0 set dstintf port2 set srcaddr all set dstaddr all set action accept set schedule always set service ALL next edit 2 set name allow-lan-to-gcp set srcintf port2 set dstintf GCP-HA-VPN-INT0 set srcaddr all set dstaddr all set action accept set schedule always set service ALL end end
ホームラボのFortigate60Dの設定手順
VPN設定の実施
サンプル構成ファイルの情報をもとに、インタフェースの設定を書き換えて、CLIから流し込みを行います。
以下、変更した箇所です。
port1 → wan1
port2 → internal1
psksecret → マスクしています
_CUSTOMER_ONPREM_NETMASK_TUNNEL0_ → 255.255.255.255
# phase1 config vpn ipsec phase1-interface edit GCP-HA-VPN-INT0 set interface "wan1" set ike-version 2 set keylife 36000 set peertype any set proposal aes256-sha1 set dhgrp 5 2 set nattraversal disable set remote-gw 34.157.78.15 set psksecret xxxxxxxx next end # phase2 config vpn ipsec phase2-interface edit GCP-HA-VPN-INT0 set phase1name GCP-HA-VPN-INT0 set proposal aes256-sha1 set dhgrp 15 set auto-negotiate enable set keylifeseconds 10800 next end # tunnel interfaces config system interface edit GCP-HA-VPN-INT0 set ip 169.254.76.222 255.255.255.255 set remote-ip 169.254.76.221 255.255.255.252 set allowaccess ping set type tunnel set interface "wan1" next end # Configure BGP settings config router bgp config neighbor edit 169.254.76.221 set remote-as 64640 next end end # Configure the firewall policy to allow traffic config firewall policy edit 151 set name allow-gcp-to-lan set srcintf "GCP-HA-VPN-INT0" set dstintf "internal1" set srcaddr all set dstaddr all set action accept set schedule always set service ALL next edit 152 set name allow-lan-to-gcp set srcintf "internal1" set dstintf "GCP-HA-VPN-INT0" set srcaddr all set dstaddr all set action accept set schedule always set service ALL end end
動作確認
オンプレ環境の仮想マシン(192.168.10.91)から、Google CloudのCompute Engine(10.24.1.3)への接続を確認します。
pingとcurlコマンドを使用して、接続性とWebサーバーの応答を確認しました。
[root@cent91 ~]# [root@cent91 ~]# ping 10.24.1.3 -c 3 PING 10.24.1.3 (10.24.1.3) 56(84) bytes of data. 64 バイト応答 送信元 10.24.1.3: icmp_seq=1 ttl=61 時間=49.8ミリ秒 64 バイト応答 送信元 10.24.1.3: icmp_seq=2 ttl=61 時間=54.4ミリ秒 64 バイト応答 送信元 10.24.1.3: icmp_seq=3 ttl=61 時間=54.4ミリ秒 --- 10.24.1.3 ping 統計 --- 送信パケット数 3, 受信パケット数 3, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 49.844/52.885/54.408/2.150 ms [root@cent91 ~]# [root@cent91 ~]# [root@cent91 ~]# curl -v http://10.24.1.3 * Trying 10.24.1.3:80... * Connected to 10.24.1.3 (10.24.1.3) port 80 (#0) > GET / HTTP/1.1 > Host: 10.24.1.3 > User-Agent: curl/7.76.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Sun, 06 Oct 2024 12:39:04 GMT < Server: Apache/2.4.62 (CentOS Stream) < Last-Modified: Sun, 06 Oct 2024 10:44:04 GMT < ETag: "69f-623cc95439ba1" < Accept-Ranges: bytes < Content-Length: 1695 < Content-Type: text/html; charset=UTF-8 <