Menggunakan Public NAT dengan Compute Engine

Halaman ini menunjukkan demonstrasi gateway NAT Publik yang menyediakan layanan penafsiran alamat jaringan untuk instance VM Compute Engine. Sebelum Anda memulai, baca Ringkasan NAT publik.

Prasyarat

Anda harus melakukan hal berikut sebelum menyiapkan NAT Publik.

Mendapatkan izin IAM

Peran roles/compute.networkAdmin memberi Anda izin untuk membuat gateway NAT di Cloud Router, mencadangkan dan menetapkan alamat IP NAT, serta menentukan subnetwork (subnet) yang traffic-nya harus menggunakan terjemahan alamat jaringan oleh gateway NAT.

Menyiapkan Google Cloud

Sebelum memulai, siapkan item berikut di Google Cloud.

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Instal Google Cloud CLI.

  5. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  6. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Instal Google Cloud CLI.

  10. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  11. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Contoh

Berikut adalah contoh end-to-end yang menunjukkan contoh gateway NAT Publik dan contoh VM Compute Engine yang menggunakan gateway NAT Publik.

Langkah 1: Buat jaringan dan subnet VPC

Jika sudah memiliki jaringan dan subnet, Anda dapat melewati langkah ini.

Konsol

  1. Di konsol Google Cloud , buka halaman VPC networks.

    Buka halaman Jaringan VPC

  2. Klik Create VPC network.

  3. Masukkan Nama custom-network1.

  4. Di bagian Subnets, tetapkan Subnet creation mode ke Custom.

  5. Di bagian New subnet, masukkan Name subnet-us-east-192.

  6. Di Region, pilih us-east4.

  7. Masukkan IP address range 192.168.1.0/24.

  8. Klik Done, lalu klik Create.

gcloud

  1. Buat jaringan VPC mode kustom baru di project Anda:

    gcloud compute networks create custom-network1 \
        --subnet-mode custom
  2. Tentukan awalan subnet untuk region pertama Anda. Dalam contoh ini, kita menetapkan 192.168.1.0/24 ke region us-east4.

    gcloud compute networks subnets create subnet-us-east-192 \
       --network custom-network1 \
       --region us-east4 \
       --range 192.168.1.0/24

Terraform

Anda dapat menggunakan modul Terraform untuk membuat jaringan Virtual Private Cloud (VPC) dan subnet kustom.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 13.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "custom-network1"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "subnet-us-east-192"
      subnet_ip     = "192.168.1.0/24"
      subnet_region = "us-east4"
    }
  ]
}

Langkah 2: Buat instance VM tanpa alamat IP eksternal

Konsol

  1. Di konsol Google Cloud , buka halaman VM instances.

    Buka halaman VM instances

  2. Klik Create instance.

  3. Tentukan Name nat-test-1 untuk instance Anda.

  4. Tetapkan Region ke us-east4.

  5. Setel Zone ke us-east4-c.

  6. Klik link Management, security, disks, networking, sole tenancy.

  7. Klik tab Networking.

  8. Di bagian Network interfaces, klik Edit untuk antarmuka default VM.

    1. Setel Network ke custom-network1.
    2. Tetapkan Subnetwork ke subnet-us-east-192.
    3. Tetapkan External IP ke None.
    4. Klik Done.
  9. Untuk membuat dan memulai instance, klik Create.

gcloud

gcloud compute instances create nat-test-1 \
    --image-family debian-9 \
    --image-project debian-cloud \
    --network custom-network1 \
    --subnet subnet-us-east-192 \
    --zone us-east4-c \
    --no-address

Terraform

Anda dapat menggunakan resource Terraform untuk membuat instance VM.

resource "google_compute_instance" "default" {
  project      = var.project_id
  zone         = "us-east4-c"
  name         = "nat-test-1"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network    = "custom-network1"
    subnetwork = var.subnet # Replace with a reference or self link to your subnet, in quotes
  }
}

Langkah 3: Buat aturan firewall yang mengizinkan koneksi SSH

Konsol

  1. Di konsol Google Cloud , buka halaman Firewall policies.

    Buka halaman Kebijakan firewall

  2. Klik Create firewall rule.

  3. Masukkan Nama allow-ssh.

  4. Tentukan Network custom-network1.

  5. Setel Direction of traffic ke Ingress.

  6. Setel Action on match ke Allow.

  7. Tetapkan Targets ke All instances in the network.

  8. Setel Source filter ke IPv4 ranges.

  9. Tetapkan Source IP ranges ke 35.235.240.0/20.

  10. Tetapkan Protocols and ports ke Specified protocols and ports.

  11. Pilih kotak centang tcp, lalu masukkan port 22.

  12. Klik Create.

gcloud

gcloud compute firewall-rules create allow-ssh \
    --network custom-network1 \
    --source-ranges 35.235.240.0/20 \
    --allow tcp:22

Terraform

Anda dapat menggunakan resource Terraform untuk membuat aturan firewall.

resource "google_compute_firewall" "rules" {
  project = var.project_id
  name    = "allow-ssh"
  network = var.network # Replace with a reference or self link to your network, in quotes

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }
  source_ranges = ["35.235.240.0/20"]
}

Langkah 4: Buat izin SSH IAP untuk instance pengujian Anda

Pada langkah selanjutnya, gunakan Identity-Aware Proxy (IAP) untuk terhubung ke instance pengujian Anda.

Konsol

  1. Di konsol Google Cloud , buka halaman Identity-Aware Proxy.

    Buka halaman Identity-Aware Proxy

  2. Pilih tab SSH and TCP resources.

  3. Untuk memperbarui izin anggota pada resource, centang kotak di samping All Tunnel Resources > us-east4-c > nat-test-1.

  4. Di panel kanan, klik Tambahkan anggota.

  5. Untuk memberikan akses ke resource kepada pengguna, grup, atau akun layanan, di kolom Anggota baru, tentukan alamat email mereka.

    Jika hanya menguji fitur ini, Anda dapat memasukkan alamat email Anda sendiri.

  6. Untuk memberikan akses anggota ke resource melalui fitur penerusan TCP Cloud IAP, di daftar drop-down Role, pilih Cloud IAP > IAP-secured Tunnel User.

  7. Klik Simpan.

gcloud

Perintah ini memberikan akses SSH menggunakan IAP ke semua instance VM dalam project Anda. Jika Anda ingin memberikan akses SSH menggunakan IAP ke VM tertentu, gunakan petunjuk Google Cloud konsol.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=MEMBER_INFO \
    --role=roles/iap.tunnelResourceAccessor

Ganti kode berikut:

  • PROJECT_ID: project ID Anda
  • MEMBER_INFO: daftar pasangan type:email anggota yang dipisahkan koma. Contoh:
    • Untuk pengguna perorangan: user:test-user@example.com
    • Untuk grup: group:admins@example.com
    • Untuk akun layanan: serviceAccount:test123@example.domain.com

Terraform

Anda dapat menggunakan resource Terraform untuk membuat izin SSH IAP bagi instance pengujian Anda.

resource "google_project_iam_member" "project" {
  project = var.project_id
  role    = "roles/iap.tunnelResourceAccessor"
  member  = "serviceAccount:test123@example.domain.com"
}

Langkah 5: Login ke nat-test-1 dan konfirmasi bahwa perangkat tidak dapat terhubung ke internet

Konsol

  1. Di konsol Google Cloud , buka halaman VM instances.

    Buka halaman Instance VM

  2. Untuk nat-test-1, di kolom Connect, klik panah drop-down SSH, lalu pilih Open in browser window.

  3. Di command prompt VM, masukkan curl example.com, lalu tekan Enter.

    Anda tidak akan mendapatkan hasil apa pun. Jika ya, Anda mungkin telah membuat nat-test-1 dengan alamat IP eksternal, atau mungkin ada masalah lain. Untuk memecahkan masalah, lihat VM dapat terhubung ke internet secara tidak terduga tanpa Cloud NAT.

    Untuk mengakhiri perintah, Anda mungkin harus memasukkan Ctrl+C.

gcloud

  1. Tambahkan kunci SSH Compute Engine ke host lokal Anda:

    ssh-add ~/.ssh/google_compute_engine
    
  2. Hubungkan ke nat-test-1 dan jalankan perintah:

    gcloud compute ssh nat-test-1 \
        --zone us-east4-c \
        --command "curl example.com" \
        --tunnel-through-iap

    Anda tidak akan mendapatkan hasil apa pun. Jika ya, Anda mungkin telah membuat nat-test-1 dengan alamat IP eksternal, atau mungkin ada masalah lain. Untuk memecahkan masalah, lihat VM dapat terhubung ke internet secara tidak terduga tanpa Cloud NAT.

    Untuk mengakhiri perintah, Anda mungkin harus memasukkan Ctrl+C.

Langkah 6: Buat konfigurasi NAT menggunakan Cloud Router

Anda harus membuat Cloud Router di region yang sama dengan instance yang menggunakan NAT Publik. Cloud Router hanya digunakan untuk menempatkan informasi NAT ke VM. Alamat ini tidak digunakan sebagai bagian dari gateway NAT yang sebenarnya.

Dengan konfigurasi ini, semua instance di region tersebut dapat menggunakan NAT Publik untuk semua rentang IP primer dan alias. Cloud Router juga otomatis mengalokasikan alamat IP eksternal untuk gateway NAT. Untuk mengetahui opsi lainnya, lihat dokumentasi Google Cloud CLI.

Konsol

  1. Di konsol Google Cloud , buka halaman Cloud NAT.

    Buka halaman Cloud NAT

  2. Klik Mulai atau Create Cloud NAT gateway.

  3. Masukkan Nama gateway nat-config.

  4. Tetapkan VPC network ke custom-network1.

  5. Tetapkan Region ke us-east4.

  6. Di bagian Cloud Router, pilih Create new router.

    1. Masukkan Nama nat-router.
    2. Klik Create.
  7. Klik Create.

gcloud

  1. Membuat cloud router

    gcloud compute routers create nat-router \
        --network custom-network1 \
        --region us-east4
  2. Tambahkan konfigurasi ke router:

    gcloud compute routers nats create nat-config \
        --router-region us-east4 \
        --router nat-router \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips

Terraform

Anda dapat menggunakan resource Terraform untuk membuat Cloud Router.

resource "google_compute_router" "router" {
  project = var.project_id
  name    = "nat-router"
  network = var.network
  region  = "us-east4"
}

Anda dapat menggunakan modul Terraform untuk membuat konfigurasi NAT.

module "cloud-nat" {
  source  = "terraform-google-modules/cloud-nat/google"
  version = "~> 5.0"

  project_id                         = var.project_id
  region                             = "us-east4"
  router                             = google_compute_router.router.name
  name                               = "nat-config"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}

Langkah 7: Coba hubungkan ke internet lagi

Mungkin perlu waktu hingga tiga menit agar konfigurasi NAT diterapkan ke VM, jadi tunggu minimal satu menit sebelum mencoba mengakses internet lagi.

Konsol

  1. Di konsol Google Cloud , buka halaman VM instances.

    Buka halaman Instance VM

  2. Untuk nat-test-1, di kolom Connect, klik panah drop-down SSH, lalu pilih Open in browser window.

  3. Di command prompt VM, masukkan curl example.com, lalu tekan Enter.

gcloud

Hubungkan ke nat-test-1 dan jalankan perintah:

gcloud compute ssh nat-test-1 \
    --zone us-east4-c \
    --command "curl example.com" \
    --tunnel-through-iap

Anda akan melihat output yang berisi konten berikut:


<html>
<head>
<title>Example Domain</title>
...
...
...
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is established to be used for illustrative examples in documents. You can use this
    domain in examples without prior coordination or asking for permission.</p>
    <p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

Langkah berikutnya