원격 사이트에 대한 기본 VPN 연결 만들기

소스 및 대상 IP 주소 모두 RFC 1918이 아닌 외부 IP 주소가 되도록 온프레미스 사이트와 Google Cloud 간에 기본 VPN 터널 연결을 구성할 수 있습니다. 예를 들어 온프레미스 IP 주소 범위가 Google Cloud VM IP 주소와 충돌하지 않도록 원격 사이트에 대한 기본 VPN 연결을 구성할 수 있습니다.

이 튜토리얼에서는 Google Cloud 프로젝트, Google Cloud 콘솔, 가상 머신(VM) 인스턴스, 기본 VPN, 몇 가지 Linux 명령어를 사용합니다. 연결을 테스트하려면 VM과 원격 피어 사이에 트래픽을 송수신하도록 새 VM 인스턴스를 만듭니다.

시작하기 전에

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Compute Engine API.

    Enable the API

  7. 워크스테이션에서 gcloud 명령줄 도구를 설치합니다.
  8. 프로젝트를 사용하도록 gcloud 명령줄 도구를 구성합니다. 다음 명령어에서 PROJECT_ID를 프로젝트 ID로 바꿉니다.
    gcloud config set project PROJECT_ID
  9. 온프레미스 서브넷이 온프레미스 VPN 게이트웨이에 연결되어 있는지 확인합니다.
  10. 피어 VPN 게이트웨이 구성의 안내에 따라 Google Cloud와 온프레미스 VPN 게이트웨이 간에 피어 VPN 게이트웨이를 구성합니다.

새로운 고정 외부 IP 주소 예약

Compute Engine에서 각 VM 인스턴스는 여러 네트워크 인터페이스를 가질 수 있습니다. 각 인터페이스는 내부 및 외부 IP 주소를 모두 포함할 수 있습니다. 전달 규칙에는 외부 부하 분산을 위한 외부 IP 주소 또는 내부 부하 분산을 위한 내부 주소를 지정할 수 있습니다. 고정 IP 주소에 대한 자세한 내용은 외부 IP 주소를 참조하세요.

고정 외부 IP 주소는 사용자가 해제하도록 결정할 때까지 프로젝트를 위해 예약되는 IP 주소입니다. 고객이 서비스에 액세스하기 위해 사용하는 IP 주소가 있는 경우 해당 프로젝트만 사용할 수 있도록 이 IP 주소를 예약할 수 있습니다. 또한 고정 외부 IP 주소로 임시 외부 IP 주소를 승격할 수도 있습니다.

다음과 같은 두 가지 유형의 외부 IP 주소를 예약할 수 있습니다.

  • 하나 이상의 네트워크 인터페이스가 포함된 VM 인스턴스 또는 리전 네트워크 부하 분산기가 사용하는 리전 IP 주소
  • 전역 부하 분산기에 사용되는 전역 IP 주소

리전 및 전역 부하 분산기 목록은 Google Cloud 부하 분산기 요약을 참조하세요.

Google Cloud CLI를 사용하거나 API를 통해 고정 외부 IP 주소를 예약합니다. IP 주소를 예약한 후에는 새 인스턴스를 만드는 동안 IP 주소를 새 인스턴스에 할당하거나 기존 인스턴스에 IP 주소를 할당합니다.

콘솔

  1. 고정 주소 예약 페이지로 이동

    고정 주소 예약으로 이동

  2. 새 주소의 이름을 선택합니다.

  3. IPv4 또는 IPv6 주소 여부를 지정합니다. IPv6 주소는 전역만 가능하며 전역 부하 분산기에서만 사용될 수 있습니다.

  4. 이 IP 주소가 리전 또는 전역인지 지정합니다. 인스턴스 또는 네트워크 부하 분산기에 대해 고정 IP 주소를 예약하는 경우에는 리전을 선택합니다. 전역 부하 분산기에 대해 고정 IP 주소를 예약하는 경우에는 전역을 선택합니다.

  5. 리전 IP 주소인 경우에는 주소를 만들 리전을 선택합니다.

  6. 선택사항: IP 주소에 연결할 리소스를 선택합니다.

  7. 예약을 클릭하여 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 주소를 만듭니다.

module "address" {
  source       = "terraform-google-modules/address/google"
  version      = "~> 4.0"
  project_id   = var.project_id # Replace this with your service project ID in quotes
  region       = "europe-west1"
  address_type = "EXTERNAL"
  names = [
    "regional-external-ip-address-1",
    "regional-external-ip-address-2",
    "regional-external-ip-address-3"
  ]
}

다음 예시에서는 전역 외부 IPv6 주소를 만듭니다.

resource "google_compute_global_address" "default" {
  project      = var.project_id # Replace this with your service project ID in quotes
  name         = "ipv6-address"
  address_type = "EXTERNAL"
  ip_version   = "IPV6"
}

IP 전달 사용 설정

VM을 생성할 때 또는 기존 VM에서 canIpForward 인스턴스 속성을 업데이트할 때 IP 전달을 사용 설정할 수 있습니다. IP 전달은 VM 수준에서 사용 설정되며 VM에 연결된 모든 인터페이스에 적용됩니다.

VM을 만들 때 IP 전달 사용 설정

이 안내에서는 VM을 만들 때 IP 전달을 사용 설정하는 방법을 설명합니다. 기존 VM에서 IP 전달을 사용 설정해야 하는 경우 canIpForward 인스턴스 속성을 업데이트합니다.

콘솔

  1. VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스로 이동
  2. 인스턴스 만들기를 클릭합니다.
  3. 부팅 디스크에서 Linux 이미지를 선택했는지 확인합니다(예: Debian GNU/Linux).
  4. 네트워킹, 디스크, 보안, 관리, 단독 테넌시를 클릭합니다.
  5. 네트워킹을 클릭합니다.
  6. IP 전달사용 설정을 선택합니다.
  7. 다른 인스턴스 매개변수를 지정합니다.
  8. 만들기를 클릭합니다.

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 인수에 변경 가능한 할당된 값이 있습니다.

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "instance-next-hop"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  can_ip_forward = true
}

인그레스 트래픽 경로 만들기

새 정적 경로를 만들려면 다음 단계를 따르세요. 작업 전에 다음 사항을 숙지해야 합니다.

  • 커스텀 정적 경로의 대상 범위는 VPC 네트워크의 모든 서브넷 경로에서 사용되는 대상 범위와 일치하거나 더 구체적일 수 없습니다.

    • VPC 네트워크 피어링을 사용하여 두 개의 VPC 네트워크를 연결하는 경우 한 네트워크에서 사용되는 커스텀 정적 경로의 대상 위치는 두 네트워크에서 사용되는 서브넷 경로와 일치하거나 더 구체적일 수 없습니다. Google Cloud는 이런 식으로 서브넷 경로와 충돌하는 커스텀 정적 경로를 거부합니다.
  • 자동 모드 VPC 네트워크를 사용하는 경우 충돌을 방지하려면 대상 위치가 10.128.0.0/9 범위에 속하는 정적 경로를 만들지 않아야 합니다. 자세한 내용은 자동 모드 네트워크용으로 예약된 IP 주소 범위를 참조하세요.

  • 커스텀 정적 경로의 대상은 모든 내부 할당 범위와 겹칠 수 없습니다.

  • VM을 다음 홉으로 사용하는 커스텀 정적 경로를 만들려면 다음 홉으로 사용되는 인스턴스에 대해 잘 알아야 합니다. Google Cloud는 다음 홉 인스턴스를 선택하는 경우 경로를 만들 때 VM이 존재하는지만 검증합니다.

  • 네트워크 태그를 사용하여 경로를 만들면 이 태그가 있는 VM만 해당 경로를 수신합니다. 그러나 태그가 지정된 VM은 네트워크 태그가 없는 모든 경로를 수신합니다.

콘솔

  1. Google Cloud 콘솔의 경로 페이지로 이동합니다.
    경로로 이동
  2. 경로 만들기를 클릭합니다.
  3. 경로의 이름설명을 지정합니다.
  4. 경로가 적용될 기존 네트워크를 선택합니다.
  5. 대상 IP 범위를 지정하여 경로의 대상 위치를 정의합니다.
  6. 경로의 우선순위를 지정합니다. 우선순위는 여러 경로의 대상 위치가 동일한 경우에 라우팅 순서를 결정하는 데만 사용됩니다. 자세한 내용은 정적 경로 매개변수를 참조하세요.
  7. 네트워크 태그가 일치하는 특정 인스턴스에만 경로를 적용하려면 인스턴스 태그 필드에서 태그를 지정합니다. 경로를 네트워크의 모든 인스턴스에 적용하려는 경우 또는 내부 TCP/UDP 부하 분산기를 경로의 다음 홉으로 선택하는 경우 이 필드를 비워 둡니다. 네트워크 태그는 다음 홉으로 내부 TCP/UDP 부하 분산기가 있는 경로에는 적용되지 않습니다.
  8. 경로의 다음 홉을 지정합니다.

    • 인스턴스 지정을 선택하면 인스턴스를 이름으로 선택할 수 있습니다. 그러면 IP 주소가 변경되더라도 트래픽이 해당 인스턴스(또는 동일한 영역에 있는 동일한 이름의 대체 인스턴스)로 라우팅됩니다.
    • IP 주소 지정을 선택하면 VPC 네트워크에 있는 기존 인스턴스의 IP 주소를 입력할 수 있습니다. 유효한 다음 홉 IP 주소의 중요 제한사항은 정적 경로의 다음 홉을 참조하세요.

    다양한 유형의 다음 홉에 대한 자세한 내용은 정적 경로 다음 홉을 참조하세요.

  9. 만들기를 클릭합니다.

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은 커스텀 정적 경로의 다음 홉을 나타냅니다. 다음 중 하나만 다음 홉으로 지정해야 합니다. 다양한 유형의 다음 홉에 대한 자세한 내용은 정적 경로 다음 홉을 참조하세요.
    • --next-hop-instance=INSTANCE_NAME--next-hop-instance-zone=ZONE: 이 다음 홉을 사용하여 이름 및 영역에 따라 트래픽을 기존 VM 인스턴스로 전달합니다. 트래픽은 경로와 동일한 네트워크에 있는 VM 네트워크 인터페이스의 기본 내부 IP 주소로 전송됩니다.
    • --next-hop-address=ADDRESS: 이 다음 홉을 사용하여 트래픽을 기존 VM 인스턴스의 IP 주소로 전달합니다.

커스텀 정적 경로를 네트워크 태그에 따라 특정 VM에만 적용하려면 --tags 플래그를 추가하고 하나 이상의 네트워크 태그를 지정합니다. 네트워크 태그와 커스텀 정적 경로가 함께 작동하는 방식에 대한 자세한 내용은 적용 가능한 경로를 참조하세요. 모든 커스텀 정적 경로에 태그를 사용할 수 있습니다.

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_SPECIFICATIONVALUE는 커스텀 정적 경로의 다음 홉을 나타냅니다. NEXT_HOP_SPECIFICATIONnextHopIp, nextHopInstance 다음 홉 필드 중 하나만 지정해야 합니다. 다양한 유형의 다음 홉에 대한 자세한 내용은 정적 경로 다음 홉을 참조하세요.

자세한 내용은 routes.insert 메서드를 참조하세요.

Terraform

Terraform 모듈을 사용하여 정적 경로를 만들 수 있습니다.

이 정적 경로는 인터넷에 대한 기본 경로를 만듭니다.

module "google_compute_route" {
  source       = "terraform-google-modules/network/google//modules/routes"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "default"

  routes = [
    {
      name              = "egress-internet"
      description       = "route through IGW to access internet"
      destination_range = "0.0.0.0/0"
      tags              = "egress-inet"
      next_hop_internet = "true"
    }
  ]
}

정적 라우팅을 사용하여 기본 VPN 만들기

VPN 설정 마법사는 기본 VPN 게이트웨이를 만들 수 있는 유일한 Google Cloud Console 옵션입니다. 마법사에는 기본 VPN 게이트웨이, 터널, BGP 세션, 외부 VPN 게이트웨이 리소스를 만들기 위한 모든 필수 구성 단계가 포함되어 있습니다. 하지만 BGP 세션 구성과 같은 특정 단계는 나중에 완료할 수도 있습니다.

콘솔

게이트웨이 구성

  1. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

    VPN으로 이동

  2. 게이트웨이를 처음 만드는 경우 VPN 연결 만들기를 클릭합니다.

  3. VPN 설정 마법사를 선택합니다.

  4. 기본 VPN 옵션 버튼을 선택합니다.

  5. 계속을 클릭합니다.

  6. VPN 연결 만들기 페이지에서 다음 게이트웨이 설정을 지정합니다.

    • 이름: VPN 게이트웨이의 이름입니다. 이름은 나중에 변경할 수 없습니다.
    • 설명: 원할 경우 설명을 추가합니다.
    • 네트워크: VPN 게이트웨이와 터널을 만들 기존 VPC 네트워크를 지정합니다.
    • 리전: Cloud VPN 게이트웨이 및 터널은 리전별 개체입니다. 게이트웨이가 위치할 Google Cloud 리전을 선택합니다. 다른 리전에 있는 인스턴스 및 다른 리소스는 경로 순서에 따라 이그레스 트래픽에 터널을 사용할 수 있습니다. 최상의 성능을 원한다면 관련 Google Cloud 리소스와 동일한 리전에서 게이트웨이와 터널을 찾습니다.
    • IP 주소: 리전별 외부 IP 주소를 만들거나 기존 주소를 선택합니다.

터널 구성

  1. 새 터널의 경우 터널 섹션에서 다음 설정을 지정합니다.

    • 이름: VPN 터널의 이름입니다. 이름은 나중에 변경할 수 없습니다.
    • 설명: 원할 경우 설명을 입력합니다.
    • 원격 피어 IP 주소: 피어 VPN 게이트웨이의 외부 IP 주소를 지정합니다.
    • IKE 버전: 피어 VPN 게이트웨이에서 지원하는 적절한 IKE 버전을 선택합니다. 피어 기기에서 지원되는 경우 IKEv2가 권장됩니다.
    • IKE 사전 공유 키: 인증에 사용되는 사전 공유 키(공유 보안 비밀)을 제공합니다. Cloud VPN 터널의 사전 공유 키는 피어 VPN 게이트웨이에서 상대 터널을 구성할 때 사용한 공유 비밀번호와 일치해야 합니다. 암호적으로 강력한 사전 공유 키를 생성하려면 다음 안내를 따르세요.
    • 정책 기반 터널 선택
    • 라우팅 옵션에서 정책 기반을 선택합니다.
    • 원격 네트워크 IP 범위에서 온프레미스 VPN 설정의 로컬 트래픽이 사용하는 IP 주소 범위를 공백으로 구분된 목록으로 제공합니다.
    • 로컬 IP 범위 필드에 이전에 만들고 서브넷 프리픽스 /32가 포함된 외부 IP 주소 범위를 입력합니다.
    • 완료를 클릭합니다.
    • 만들기를 클릭합니다.

gcloud

Cloud VPN 게이트웨이를 만들려면 다음 명령 시퀀스를 완료합니다. 명령어에서 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트의 ID
  • NETWORK: Google Cloud 네트워크의 이름
  • REGION: 게이트웨이 및 터널을 만들 Google Cloud 리전
  • GW_NAME: 게이트웨이의 이름
  • GW_IP_NAME: 게이트웨이에 사용되는 외부 IP 주소의 이름
  • 선택사항: --target-vpn-gateway-region은 기본 VPN 게이트웨이가 작동할 리전입니다. 값은 --region과 같아야 합니다. 지정하지 않으면 이 옵션이 자동으로 설정됩니다. 이 옵션은 이 명령어 호출의 기본 compute/region 속성 값을 재정의합니다.

게이트웨이 리소스 구성

  1. 대상 VPN 게이트웨이 객체를 만듭니다.

    gcloud compute target-vpn-gateways create GW_NAME \
       --network=NETWORK \
       --region=REGION \
       --project=PROJECT_ID
    
  2. 리전 외부(정적) IP 주소를 예약합니다.

    gcloud compute addresses create GW_IP_NAME \
       --region=REGION \
       --project=PROJECT_ID
    
  3. 피어 VPN 게이트웨이를 구성할 때 사용할 수 있도록 IP 주소를 적어 둡니다.

    gcloud compute addresses describe GW_IP_NAME \
       --region=REGION \
       --project=PROJECT_ID \
       --format='flattened(address)'
    
  4. 전달 규칙 3개를 만듭니다. 이러한 규칙은 Google Cloud에 ESP(IPsec), UDP 500, UDP 4500 트래픽을 게이트웨이로 전송하도록 지시합니다.

    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 터널 만들기

  1. 명령어에서 다음을 바꿉니다.

    • TUNNEL_NAME: 터널의 이름
    • ON_PREM_IP: 피어 VPN 게이트웨이의 외부 IP 주소
    • IKE_VERS: IKEv1의 경우 1, IKEv2의 경우 2
    • 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
    
  2. 이전 단계의 --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에서 트래픽을 전송 및 수신할 수 있는지 여부를 테스트하려면 다음 단계를 수행합니다.

트래픽 수신

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
  2. 가상 머신 인스턴스 목록에서 앞에서 만든 VM을 찾고 SSH를 클릭합니다.
  3. 앞에서 예약한 공개 IP 주소를 사용하여 VM의 IP 주소 별칭을 만듭니다. 이 단계를 완료하면 VM에 대한 트래픽을 수신할 수 있습니다.

    다음 명령어를 실행합니다.

    sudo ip address add EXTERNAL_IP_ADDRESS/32 dev eth0
    

    EXTERNAL_IP_ADDRESS를 앞에서 예약한 공개 IP 주소로 바꿉니다.

트래픽 전송

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.
  2. 가상 머신 인스턴스 목록에서 앞에서 만든 VM을 찾고 SSH를 클릭합니다.
  3. 다음 명령어를 실행하여 외부 IP 주소를 핑할 수 있는지 테스트합니다.

    $ 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 주소로 바꿉니다.

  4. VPN 터널로 트래픽을 전송할 때 VM에서 이 인터페이스를 자동으로 사용하도록 하려면 iptables 규칙을 만들면 됩니다.

    예를 들어 다음 명령어를 실행하여 iptables 규칙을 만듭니다.

    $ sudo iptables -t nat -A POSTROUTING --destination REMOTE_PEER_SUBNET -j SNAT --to-source EXTERNAL_IP_ADDRESS
    

    REMOTE_PEER_SUBNET을 원격 피어의 서브넷으로 바꿉니다.

  5. 다음 명령어를 실행하여 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