GCP Classic VPN di Terraform: jadikan tunnel berbasis rute
Di Classic VPN label tidak menentukan perilaku. Berbasis rute berarti selector lokal 0.0.0.0/0, selector jarak jauh yang cocok, dan rute eksplisit.
Rencana diterapkan dengan bersih, tunnel naik, dan konsol menyebutnya berbasis kebijakan. Lalu lintas tetap tidak lewat, dan pencarian tombol berbasis rute di resource Terraform tidak menemukan apa pun karena field itu tidak ada. Di Classic VPN, perilaku berbasis rute bukan mode yang Anda pilih. Itu yang Anda dapat ketika selector lalu lintas lokal adalah 0.0.0.0/0, selector jarak jauh mencantumkan jaringan yang benar-benar Anda inginkan, dan rute menunjuk ke tunnel. Tiga hal, dan labelnya mengikuti.
Mitos: field mode tunnel
Label konsol mencerminkan apa yang dilihat API di selector. Tidak ada apa pun di resource yang menyebut berbasis rute, jadi tidak ada yang bisa disetel ke benar.
Mencari field itu menghabiskan jam pertama masalah, sedangkan membaca nilai selector memakan lima menit terakhir.
Apa arti berbasis rute di sini
Google mendokumentasikan tunnel Classic VPN berbasis rute sebagai tunnel berbasis kebijakan yang selector lokalnya 0.0.0.0/0. Hanya rentang jarak jauh yang disebutkan, dan sisi lokal diperlakukan sebagai alamat apa pun. Karena itu penanda di konfigurasi Anda adalah nilai, bukan mode. Tulis kedua selector secara eksplisit dan bacalah di keluaran rencana:
local_traffic_selector = ["0.0.0.0/0"]
remote_traffic_selector = ["10.20.0.0/16"]
Prefiks peer dalam cuplikan itu hanya ilustrasi; bentuknya yang penting.
Rute adalah objek terpisah
Objek tunnel tidak memasang rute. Paket bisa cocok dengan kebijakan tunnel dan tetap tidak punya tujuan, karena tabel perutean VPC menentukan hop berikutnya. Rute memerlukan rentang tujuan, jaringan, tunnel sebagai hop berikutnya, dan prioritas yang menang atas apa pun yang lebih luas. Jika lupa, Anda mendapat tunnel yang melaporkan terhubung dan ping yang tidak pernah keluar dari VPC.
resource "google_compute_route" "office" {
name = "office-via-vpn"
dest_range = "10.20.0.0/16"
network = google_compute_network.vpc.name
next_hop_vpn_tunnel = google_compute_vpn_tunnel.to_office.id
priority = 1000
}
Buat rute di modul yang sama dengan tunnel, agar keduanya tidak menyimpang saat tinjauan.
Cerminkan selector di peer
Perangkat jarak jauh harus dikonfigurasi dengan bayangan cermin: rentang lokalnya adalah selector jarak jauh Anda, dan rentang jarak jauhnya harus mencakup subnet GCP yang ingin Anda gunakan. Jika salah satu sisi menyempit, fase 2 gagal meskipun fase 1 berhasil. Inilah bentuk paling umum dari konfigurasi yang tampak benar di konsol dan tidak membawa lalu lintas.
Cetak selector kedua sisi berdampingan selama tinjauan perubahan.
Pisahkan alamat statis menjadi dua penerapan
Membuat alamat yang dipesan dan tunnel yang merujuknya dalam satu penerapan adalah sumber gejolak yang diketahui, karena alamat harus ada sebelum aturan penerusan dapat memakainya. Terapkan dulu hanya resource alamat, lalu tambahkan gateway, aturan penerusan, dan tunnel lalu terapkan lagi. Terraform membaca alamat yang ada dari state pada eksekusi kedua dan memakainya kembali. Jika dilewati, tunnel bisa mendapat alamat publik baru pada setiap penerapan, yang merusak konfigurasi peer setiap kali.
Dua penerapan sekarang lebih murah daripada perubahan peer pada setiap rilis.
Verifikasi negosiasi, bukan label
Setelah menerapkan, periksa tiga fakta terpisah: tunnel melaporkan terhubung, rute ada dengan hop berikutnya yang dimaksud, dan peer melaporkan fase 1 dan fase 2 sama-sama aktif.
Tunnel yang aktif dengan fase 2 mati berarti kedua sisi tidak sepakat soal selector:
- Satu sisi mencantumkan subnet yang tidak dicantumkan sisi lain.
- Satu sisi memakai agregat yang disempitkan sisi lain.
- Rute ada tetapi menunjuk ke tunnel lain.
Classic VPN adalah satu tunnel dengan SLA lebih rendah daripada HA VPN, dan HA VPN memakai dua antarmuka, dua tunnel, dan BGP dengan jenis resource berbeda. Menyalin contoh klasik ke konfigurasi HA dan berharap field selector berperilaku sama adalah kesalahan terpisah yang layak dihindari. Field tunnel sendiri didokumentasikan di referensi google_compute_vpn_tunnel.