オンプレミス サイトと Google Cloud の間に Classic VPN トンネル接続を構成すると、送信元 IP アドレスと宛先 IP アドレスの両方が外部(RFC 1918 以外の)IP アドレスになります。たとえば、オンプレミスの IP アドレス範囲が Google Cloud VM の IP アドレスと競合しないように、リモートサイトへの Classic VPN 接続を構成します。
このチュートリアルでは、Google Cloud プロジェクト、Google Cloud コンソール、仮想マシン(VM)インスタンス、Classic VPN、いくつかの Linux コマンドを使用します。接続をテストするには、VM とリモートピア間でトラフィックを送受信する VM インスタンスを新規作成します。
準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
- ワークステーションで
gcloud
コマンドライン ツールをインストールします。 - プロジェクトを使用するように
gcloud
コマンドライン ツールを構成します。次のコマンドを実行します。PROJECT_ID
はプロジェクト ID で置き換えます。gcloud config set project PROJECT_ID
- オンプレミスのサブネットがオンプレミス VPN ゲートウェイに接続されていることを確認します。
- ピア VPN ゲートウェイの構成の手順に沿って、Google Cloud とオンプレミス VPN ゲートウェイ間のピア VPN ゲートウェイを構成します。
新しい静的外部 IP アドレスを予約する
Compute Engine では、各 VM インスタンスが複数のネットワーク インターフェースを持つことができます。各インターフェースは、内部 IP アドレスと外部 IP アドレスの両方を持つことができます。転送ルールには、外部ロード バランシングのための外部 IP アドレスや、内部ロード バランシングのための内部アドレスを指定できます。静的 IP アドレスの詳細については、外部 IP アドレスをご覧ください。
静的外部 IP アドレスはプロジェクト用に予約される IP アドレスであり、解放するまで予約されたままになります。お客様がサービスにアクセスする際に利用する IP アドレスがある場合、該当プロジェクトでのみ使用できるようにその IP アドレスを予約できます。また、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させることもできます。
次の 2 種類の外部 IP アドレスを予約できます。
- 1 つ以上のネットワーク インターフェースを備えた VM インスタンスまたはリージョン ロードバランサで使用されるリージョン IP アドレス
- グローバル ロードバランサに使用されるグローバル IP アドレス
リージョン ロードバランサとグローバル ロードバランサの一覧については、Google Cloud ロードバランサの概要をご覧ください。
静的外部 IP アドレスを予約するには、Google Cloud CLI または API を使用します。IP アドレスを予約した後、新しいインスタンスの作成時に IP アドレスを新しいインスタンスに割り当てるか、既存のインスタンスに IP アドレスを割り当てます。
コンソール
[静的アドレスの予約] ページに移動します。
新しいアドレスの名前を指定します。
IPv4 アドレスか IPv6 アドレスかを指定します。IPv6 アドレスはグローバルのみで、グローバル ロードバランサでのみ使用できます。
この IP アドレスがリージョン アドレスかグローバル アドレスかを指定します。インスタンスまたはリージョン ロードバランサに静的 IP アドレスを予約する場合は、[リージョン] を選択します。グローバル ロードバランサに静的 IP アドレスを予約する場合は、[グローバル] を選択します。
リージョン IP アドレスの場合は、アドレスを作成するリージョンを選択します。
(省略可)IP アドレスに関連付けるリソースを選択します。
[予約] をクリックして IP アドレスを予約します。
gcloud
gcloud compute
を使用して静的外部 IP アドレスを予約するには、compute addresses create
コマンドを使用します。
グローバル IP アドレスを予約するには、--global
フィールドと --ip-version
フィールドを使用します。--ip-version
フィールドには IPV4
または IPV6
を指定します。IPv6 アドレスはグローバルのみで、グローバル ロードバランサでのみ使用できます。
ADDRESS_NAME
は、このアドレスの名前に置き換えます。
gcloud compute addresses create ADDRESS_NAME \ --global \ --ip-version [IPV4 | IPV6]
リージョン IP アドレスを予約するには、--region
フィールドを使用します。
gcloud compute addresses create ADDRESS_NAME \ --region=REGION
次のように置き換えます。
ADDRESS_NAME
: このアドレスの名前。REGION
: このアドレスを予約するリージョン。このリージョンは、IP アドレスを割り当てるリソースと同じリージョンにする必要があります。リージョン IP アドレスはすべて IPv4 です。
結果を表示するには、compute addresses describe
コマンドを使用します。
gcloud compute addresses describe ADDRESS_NAME
API
リージョン IPv4 アドレスを作成するには、リージョン addresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
リクエスト本文は次のようにします。
{ "name": "ADDRESS_NAME" }
次のように置き換えます。
ADDRESS_NAME
: アドレスの名前REGION
: このリクエストのリージョン名PROJECT_ID
: このリクエストのプロジェクト ID
グローバル静的 IPv4 アドレスの場合は、globalAddresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
リクエスト本文は次のようにします。
{ "name": "ADDRESS_NAME" }
グローバル静的 IPv6 アドレスの場合は、globalAddresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
リクエスト本文は次のようにします。
{ "name": "ADDRESS_NAME", "ipVersion": "IPV6" }
addresses.get
メソッドを使用して結果を確認します。
Terraform
Terraform モジュールを使用して外部 IP アドレスを作成できます。
次の例では、Terraform の引数に変更可能なサンプル値が含まれています。この例では、3 つのリージョン外部 IPv4 アドレスを作成します。
次の例では、グローバル外部 IPv6 アドレスを作成します。
IP 転送を有効にする
IP 転送は、VM の作成時、または既存の VM の canIpForward
インスタンス プロパティの更新で有効にできます。IP 転送は VM レベルで有効になり、VM に接続されているすべてのインターフェースに適用されます。
VM の作成時に IP 転送を有効にする
ここでは、VM の作成時に IP 転送を有効にする方法について説明します。既存の VM で IP 転送を有効にする必要がある場合は、canIpForward
インスタンス プロパティを更新します。
コンソール
- [VM インスタンス] ページに移動します。
[VM インスタンス] に移動 - [インスタンスを作成] をクリックします。
- [ブートディスク] で、Debian GNU/Linux などの Linux イメージが選択されていることを確認します。
- [ネットワーク、ディスク、セキュリティ、管理、単一テナンシー] をクリックします。
- [ネットワーキング] をクリックします。
- [IP 転送] で [有効にする] を選択します。
- 他のインスタンス パラメータを指定します。
- [作成] をクリックします。
gcloud
gcloud
を使用してインスタンスを作成する場合は、--can-ip-forward
フラグをコマンドに追加します。
gcloud compute instances create ... --can-ip-forward
API
インスタンスを作成する場合は、canIpForward
フィールドを使用して IP 転送を有効にします。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "canIpForward": true, ...other fields }
次のように置き換えます。
- PROJECT_ID: インスタンスが作成されるプロジェクトの ID。
- ZONE: インスタンスが作成される Google Cloud ゾーン。
詳細については、instances.insert
メソッドをご覧ください。
Terraform
Terraform リソースを使用して、IP 転送を有効にした VM インスタンスを作成できます。
この例では、Terraform 引数に値が割り当てられていますが、これらは変更可能です。
上り(内向き)トラフィックのルートを作成する
新しい静的ルートを作成するには、次の操作を行います。操作を行う前に、以下の点を十分に理解するようにしてください。
カスタム静的ルートには、VPC ネットワーク内のサブネット ルートによって使用されている送信先範囲と一致する、またはそれよりも限定された送信先範囲を設定することはできません。
- VPC ネットワーク ピアリングを使用して 2 つの VPC ネットワークを接続する場合、一方のネットワーク内のカスタム静的ルートに、両方のネットワーク内にあるサブネット ルートと一致する、またはそれよりも限定された送信先を設定することはできません。Google Cloud では、このようにサブネット ルートと競合するカスタム静的ルートは拒否されます。
自動モードの VPC ネットワークを使用する際の競合を回避するために、宛先が
10.128.0.0/9
内に収まる静的ルートを作成しないでください。詳細については、自動モード ネットワーク用に予約された IP アドレス範囲を確認してください。カスタム静的ルートの送信先は、内部割り当て範囲と重複することはできません。
VM をネクストホップとして使用するカスタム静的ルートを作成する前にネクストホップとしてのインスタンスに精通していることを確認してください。ネクストホップのインスタンスを選択した場合、Google Cloud はルートの作成時に VM が存在することのみを検証します。
ネットワーク タグを使用してルートを作成すると、そのタグを持つ VM のみがそのルートを受け取ります。ただし、タグ付き VM は、ネットワーク タグを持たないルートをすべて受け取ります。
コンソール
- Google Cloud コンソールの [ルート] ページに移動します。
[ルート] に移動 - [ルートを作成] をクリックします。
- ルートの名前と説明を指定します。
- ルートが適用される既存のネットワークを選択します。
- 送信先 IP の範囲を指定して、ルートの送信先を定義します。
- ルートの優先度を指定します。優先度は、ルートに同等の送信先がある場合に、ルーティングの順序を決定するためにのみ使用されます。詳細については、静的ルートのパラメータをご覧ください。
- 一致するネットワーク タグを持つインスタンスの一部にのみルートが適用されるようにするには、[インスタンス タグ] フィールドにタグを指定します。ネットワーク上のすべてのインスタンスにルートが適用されるようにする場合、あるいは内部 TCP / UDP ロードバランサをルートのネクストホップとして選択する場合は、このフィールドを空白のままにします。ネットワーク タグは、内部 TCP / UDP ロードバランサをネクストホップとして持つルートに適用されません。
ルートのネクストホップを選択します。
- [インスタンスを指定] を選択すると、名前でインスタンスを選択できます。トラフィックは、IP アドレスが変更されても、そのインスタンス(または、同じゾーン内の同じ名前を持つ、代替インスタンス)にルーティングされます。
- [IP アドレスを指定] を選択すると、VPC ネットワーク内の既存インスタンスの IP アドレスを入力できます。有効なネクストホップ IP アドレスに関する重要な制限については、静的ルートのネクストホップをご覧ください。
ネクストホップの種類の詳細については、静的ルートのネクストホップをご覧ください。
[作成] をクリックします。
gcloud
新しいカスタム静的ルートを作成します。
gcloud compute routes create ROUTE_NAME \ --destination-range=DESTINATION_RANGE \ --network=NETWORK \ NEXT_HOP_SPECIFICATION
次のようにプレースホルダを置き換えます。
- ROUTE_NAME はルートの名前です。
- DESTINATION_RANGE は、このルートが適用される送信先 IP アドレスを表します。最も広範囲な宛先は
0.0.0.0/0
です。 - NETWORK は、ルートを含む VPC ネットワークの名前です。
- NEXT_HOP_SPECIFICATION は、カスタム静的ルートのネクストホップを表します。ネクストホップとして次のいずれか 1 つのみを指定する必要があります。ネクストホップの種類の詳細については、静的ルートのネクストホップをご覧ください。
--next-hop-instance=INSTANCE_NAME
と--next-hop-instance-zone=ZONE
: このネクストホップを使用して、トラフィックを名前とゾーンで既存の VM インスタンスに転送します。トラフィックは、ルートと同じネットワークにある VM のネットワーク インターフェースのプライマリ内部 IP アドレスに送信されます。--next-hop-address=ADDRESS
: このネクストホップを使用して、トラフィックを既存の VM インスタンスの IP アドレスに転送します。
カスタム静的ルートをネットワーク タグによる VM の選択にのみ適用するには、--tags
フラグを追加し、1 つ以上のネットワーク タグを指定します。ネットワーク タグとカスタム静的ルートがどのように連携するかについては、適用可能なルートをご覧ください。タグはカスタム静的ルートで使用できます。
gcloud
構文の詳細については、SDK のドキュメントをご覧ください。
API
新しいカスタム静的ルートを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/routes { "destRange": "DESTINATION_RANGE", "name": "ROUTE_NAME", "network": "NETWORK_NAME", "priority": PRIORITY, "NEXT_HOP_SPECIFICATION": VALUE }
次のようにプレースホルダを置き換えます。
- PROJECT_ID は、ルートが作成されるプロジェクトの ID です。
- DESTINATION_RANGE は、このルートが適用される送信先 IP アドレスを表します。最も広範囲な宛先は
0.0.0.0/0
です。 - ROUTE_NAME はルートの名前です。
- NETWORK_NAME は、ルートを含む VPC ネットワークの名前です。
- NEXT_HOP_SPECIFICATION の VALUE は、カスタム静的ルートのネクストホップです。NEXT_HOP_SPECIFICATION には、
nextHopIp
、nextHopInstance
のいずれかのネクストホップ フィールドのみを指定する必要があります。ネクストホップの種類の詳細については、静的ルートのネクストホップをご覧ください。
詳細については、routes.insert
メソッドをご覧ください。
Terraform
静的ルートは、Terraform モジュールを使用して作成できます。
この静的ルートは、インターネットへのデフォルト ルートを作成します。
静的ルーティングを使用する Classic VPN を作成する
VPN 設定ウィザードは、Classic VPN ゲートウェイを作成する唯一の Google Cloud Console オプションです。このウィザードには、Classic VPN ゲートウェイ、トンネル、BGP セッション、外部 VPN ゲートウェイ リソースの作成に必要なすべての構成手順が含まれています。ただし、BGP セッションの構成など、特定の手順は後で完了できます。
コンソール
ゲートウェイの構成
Google Cloud Console で、[VPN] ページに移動します。
ゲートウェイを初めて作成する場合は、[VPN 接続を作成] をクリックします。
[VPN 設定ウィザード] を選択します。
[Classic VPN] オプション ボタンを選択します。
[続行] をクリックします。
[VPN 接続の作成] ページで、次のゲートウェイ設定を指定します。
- 名前: VPN ゲートウェイの名前。この名前は後で変更できません。
- 説明: 必要に応じて、説明を追加します。
- ネットワーク: VPN ゲートウェイとトンネルを作成する既存の VPC ネットワークを指定します。
- リージョン: Cloud VPN ゲートウェイとトンネルはリージョン オブジェクトです。ゲートウェイが配置される Google Cloud リージョンを選択します。別のリージョン内にあるインスタンスなどのリソースでは、ルートの順序の対象となる下り(外向き)トラフィック用のトンネルを使用できます。パフォーマンスの向上のために、ゲートウェイとトンネルは、関連する Google Cloud リソースと同じリージョン内に配置してください。
- IP アドレス - 既存のリージョンの外部 IP アドレスを作成または選択します。
トンネルの構成
新しいトンネルの場合、[トンネル] セクションで次の設定を指定します。
- 名前: VPN トンネルの名前。この名前は後で変更できません。
- 説明: 説明を任意で入力します。
- リモートピア IP アドレス: ピア VPN ゲートウェイの外部 IP アドレスを指定します。
- IKE バージョン: ピア VPN ゲートウェイでサポートされている適切な IKE バージョンを選択します。IKEv2 がピアデバイスでサポートされていれば、このバージョンを選択してください。
- IKE 事前共有キー: 認証用の事前共有キー(共有シークレット)を指定します。Cloud VPN トンネルの事前共有キーは、ピア VPN ゲートウェイ上で対応するトンネルを構成する場合に使用するものと同じでなければなりません。暗号的に強い共有鍵を生成するには、こちらの手順で操作してください。
- ポリシーベースのトンネルの選択
- [ルーティング オプション] で [ポリシーベース] を選択します。
- [リモート ネットワーク IP の範囲] で、オンプレミス VPN 設定のローカル トラフィックで使用される IP アドレス範囲をスペース区切りのリストで指定します。
- [ローカル IP 範囲] フィールドに、以前に作成した外部 IP アドレス範囲とサブネット接頭辞
/32
を入力します。 - [完了] をクリックします。
- [作成] をクリックします。
gcloud
Cloud VPN ゲートウェイを作成するには、次のコマンド シーケンスを完了します。コマンドでは、以下を置き換えます。
PROJECT_ID
: オブジェクトの IDNETWORK
: Google Cloud ネットワークの名前REGION
: ゲートウェイとトンネルを作成する Google Cloud リージョンGW_NAME
: ゲートウェイの名前GW_IP_NAME
: ゲートウェイが使用する外部 IP アドレスの名前- (省略可)
--target-vpn-gateway-region
は、Classic VPN ゲートウェイが動作するリージョンです。--region
と同じ値になります。指定しない場合、このオプションが自動的に設定されます。このオプションは、このコマンド呼び出しのデフォルトの compute/region プロパティ値をオーバーライドします。
ゲートウェイ リソースの構成
ターゲット VPN ゲートウェイ オブジェクトを作成します。
gcloud compute target-vpn-gateways create GW_NAME \ --network=NETWORK \ --region=REGION \ --project=PROJECT_ID
リージョンの外部(静的)IP アドレスを予約します。
gcloud compute addresses create GW_IP_NAME \ --region=REGION \ --project=PROJECT_ID
IP アドレスをメモします(ピア VPN ゲートウェイを構成するときに使用します)。
gcloud compute addresses describe GW_IP_NAME \ --region=REGION \ --project=PROJECT_ID \ --format='flattened(address)'
転送ルールを 3 つ作成します。このルールは、ESP(IPsec)、UDP 500、UDP 4500 のトラフィックをゲートウェイに送信するよう Google Cloud に指示します。
gcloud compute forwarding-rules create fr-GW_NAME-esp \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --ip-protocol=ESP \ --address=GW_IP_NAME \ --target-vpn-gateway=GW_NAME \ --region=REGION \ --project=PROJECT_ID
gcloud compute forwarding-rules create fr-GW_NAME-udp500 \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --ip-protocol=UDP \ --ports=500 \ --address=GW_IP_NAME \ --target-vpn-gateway=GW_NAME \ --region=REGION \ --project=PROJECT_ID
gcloud compute forwarding-rules create fr-GW_NAME-udp4500 \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --ip-protocol=UDP \ --ports=4500 \ --address=GW_IP_NAME \ --target-vpn-gateway=GW_NAME \ --region=REGION \ --project=PROJECT_ID
Cloud VPN トンネルの作成
コマンドでは、以下を置き換えます。
TUNNEL_NAME
: トンネルの名前ON_PREM_IP
: ピア VPN ゲートウェイの外部 IP アドレスIKE_VERS
:1
(IKEv1 の場合)または2
(IKEv2 の場合)SHARED_SECRET
: 事前共有キー(共有シークレット)。Cloud VPN トンネルの事前共有キーは、ピア VPN ゲートウェイ上で対応するトンネルを構成する場合に使用するものと同じでなければなりません。暗号的に強い共有鍵を生成するには、こちらの手順で操作してください。
ポリシーベースの VPN の場合:
LOCAL_IP_RANGES
: Google Cloud IP アドレス範囲のカンマ区切りのリスト。たとえば、VPC ネットワーク内のサブネットごとに CIDR ブロックを指定できます。これは Cloud VPN の観点から見ると「左側」です。REMOTE_IP_RANGES
: ピア ネットワークの IP アドレス範囲のカンマ区切りリスト。これは Cloud VPN の観点から見ると「右側」です。
ポリシーベースの VPN トンネルを構成するには、次のコマンドを実行します。
gcloud compute vpn-tunnels create TUNNEL_NAME \ --peer-address=ON_PREM_IP \ --ike-version=IKE_VERS \ --shared-secret=SHARED_SECRET \ --local-traffic-selector=LOCAL_IP_RANGES \ --remote-traffic-selector=REMOTE_IP_RANGES \ --target-vpn-gateway=GW_NAME \ --region=REGION \ --project=PROJECT_ID
ルーティング オプションとトラフィック セレクタで定義されるとおり、ルートベースの VPN の場合、ローカルとリモートのトラフィック セレクタはどちらも
0.0.0.0/0
です。ルートベースの VPN トンネルを構成するには、次のコマンドを実行します。
gcloud compute vpn-tunnels create TUNNEL_NAME \ --peer-address=ON_PREM_IP \ --ike-version=IKE_VERS \ --shared-secret=SHARED_SECRET \ --local-traffic-selector=0.0.0.0/0 \ --remote-traffic-selector=0.0.0.0/0 \ --target-vpn-gateway=GW_NAME \ --region=REGION \ --project=PROJECT_ID
前の手順の
--remote-traffic-selector
オプションで指定したリモート IP アドレス範囲ごとに静的ルートを作成します。このコマンドをリモート IP アドレス範囲ごとに繰り返します。ROUTE_NAME
はルートの一意の名前に、REMOTE_IP_RANGE
は該当するリモート IP アドレス範囲に置き換えます。gcloud compute routes create ROUTE_NAME \ --destination-range=REMOTE_IP_RANGE \ --next-hop-vpn-tunnel=TUNNEL_NAME \ --network=NETWORK \ --next-hop-vpn-tunnel-region=REGION \ --project=PROJECT_ID
トラフィックを送受信するように VM を構成する
設定を完了し、VM との間でトラフィックの送受信が可能かどうか確認するには、次の手順を行います。
トラフィックを受信する
- Google Cloud コンソールで [VM インスタンス] ページに移動します。
- 仮想マシン インスタンスのリストで、前に作成した VM を見つけて [SSH] をクリックします。
予約したパブリック IP アドレスを使用して、VM の IP アドレス エイリアスを作成します。この手順を完了すると、VM にトラフィックを受信できるようになります。
次のコマンドを実行します。
sudo ip address add EXTERNAL_IP_ADDRESS/32 dev eth0
EXTERNAL_IP_ADDRESS
は、前に予約したパブリック IP アドレスに置き換えます。
トラフィックを送信する
- Google Cloud コンソールで [VM インスタンス] ページに移動します。
- 仮想マシン インスタンスのリストで、前に作成した VM を見つけて [SSH] をクリックします。
次のコマンドを実行して、外部 IP アドレスに ping を実行して接続をテストします。
$ ping -I EXTERNAL_IP_ADDRESS REMOTE_PEER_IP_ADDRESS PING 10.0.0.1 (10.0.0.1) from EXTERNAL_IP_ADDRESS : 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=4.46 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.11 ms
REMOTE_PEER_IP_ADDRESS
は、リモートピアのサブネットの IP アドレスに置き換えます。VPN トンネルにトラフィックを送信するときに、VM がこのインターフェースを自動的に使用できるようにするには、
iptables
ルールを作成します。たとえば、
iptables
ルールを作成するには、次のコマンドを実行します。$ sudo iptables -t nat -A POSTROUTING --destination REMOTE_PEER_SUBNET -j SNAT --to-source EXTERNAL_IP_ADDRESS
REMOTE_PEER_SUBNET
は、リモートピアのサブネットに置き換えます。次のコマンドを実行して Cloud VPN トンネルをテストします。
$ ping REMOTE_PEER_IP_ADDRESS PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=3.48 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.42 ms
$ ping EXTERNAL_IP_ADDRESS PING 35.195.72.19 (35.195.72.19) 56(84) bytes of data. 64 bytes from 35.195.72.19: icmp_seq=1 ttl=64 time=0.033 ms 64 bytes from 35.195.72.19: icmp_seq=2 ttl=64 time=0.062 ms