Memecahkan masalah konfigurasi
Panduan ini dapat membantu Anda memecahkan masalah umum terkait Cloud NAT.
Masalah umum
VM dapat menjangkau internet secara tidak terduga, tanpa Cloud NAT
Jika instance virtual machine (VM) atau instance penampung dapat menjangkau internet tanpa Cloud NAT, tetapi Anda tidak menginginkannya, periksa masalah berikut:
Tentukan apakah antarmuka jaringan VM memiliki alamat IP eksternal. Jika antarmuka jaringan memiliki alamat IP eksternal yang ditetapkan, Google Cloud akan otomatis melakukan NAT satu-ke-satu untuk paket yang sumbernya cocok dengan alamat IP internal utama antarmuka. Untuk mengetahui informasi selengkapnya, lihat Spesifikasi Cloud NAT.
Untuk menentukan apakah VM memiliki alamat IP eksternal, lihat mengubah atau menetapkan alamat IP eksternal ke instance yang ada.
Pastikan cluster Google Kubernetes Engine (GKE) Anda adalah cluster pribadi. Setiap VM node di cluster non-pribadi memiliki alamat IP eksternal, sehingga setiap node dapat menggunakan rute di jaringan Virtual Private Cloud (VPC) Anda yang next hop-nya adalah gateway internet default tanpa mengandalkan Cloud NAT. Untuk mengetahui informasi selengkapnya, termasuk cara cluster non-pribadi berinteraksi dengan gateway Cloud NAT, lihat Interaksi Compute Engine.
Cantumkan rute di jaringan Virtual Private Cloud Anda, cari rute yang dapat menyediakan konektivitas internet melalui next hop yang berbeda dari gateway internet default. Sebagai contoh:
Rute statis yang next hop-nya adalah VM, Load Balancer Jaringan passthrough internal, atau tunnel Cloud VPN mungkin secara tidak langsung menyediakan konektivitas internet. Misalnya, VM next hop atau VM backend untuk Load Balancer Jaringan passthrough internal mungkin memiliki alamat IP eksternal, atau tunnel Cloud VPN dapat terhubung ke jaringan yang menawarkan akses internet.
Rute dinamis yang dipelajari dari jaringan lokal oleh Cloud Router di jaringan VPC Anda mungkin terhubung ke jaringan yang menawarkan akses internet.
Perhatikan bahwa rute kustom lainnya di jaringan VPC Anda mungkin memiliki prioritas yang lebih tinggi daripada rute yang next hop-nya adalah gateway internet default. Untuk mengetahui informasi tentang cara Google Cloud mengevaluasi rute, lihat ketersediaan dan urutan pemilihan rute.
Tidak ada log yang dihasilkan
- Pastikan logging NAT diaktifkan.
Periksa kembali apakah tampilan log Anda tidak memfilter log yang Anda cari. Untuk mengetahui petunjuknya, lihat Melihat log.
Pastikan aturan firewall tidak memblokir traffic. Aturan firewall yang memblokir traffic keluar (eksternal) diterapkan sebelum traffic dikirim ke gateway NAT. Anda dapat menggunakan Firewall Rules Logging untuk melihat apakah aturan keluar kustom Anda memblokir traffic keluar.
Tinjau Jenis Cloud NAT. Tujuan traffic Anda mungkin tidak ditangani oleh NAT.
Log tertentu dikecualikan
Pastikan logging NAT diaktifkan dan filter log Anda tidak mengecualikan log yang ingin Anda simpan. Anda dapat menghapus filter log sehingga tidak ada yang dikecualikan.
Cloud NAT tidak mencatat setiap peristiwa. Selama periode traffic keluar yang berat, logging NAT akan dibatasi, sebanding dengan jenis VM mesin. Log terjemahan atau error mungkin dihapus, dan tidak mungkin untuk menentukan apa yang dihilangkan selama throttling.
Paket tidak terkirim dengan alasan: kehabisan resource
Jika Anda melihat kehilangan paket dari VM yang menggunakan Cloud NAT, hal ini mungkin karena tidak ada cukup tuple alamat IP sumber NAT dan port sumber yang tersedia untuk digunakan VM pada saat kehilangan paket (kehabisan port). Lima tuple (alamat IP sumber NAT, port sumber, dan 3 tuple tujuan) tidak dapat digunakan kembali dalam waktu tunggu TCP TIME_WAIT.
Jika tidak ada tuple NAT yang tersedia, alasan dropped_sent_packets_count
adalah OUT_OF_RESOURCES
. Untuk mengetahui informasi selengkapnya tentang metrik, lihat Menggunakan metrik instance VM.
Lihat Mengurangi penggunaan port untuk mengetahui cara mengurangi penggunaan port.
Jika Anda menggunakan alokasi port dinamis, lihat bagian berikut untuk mengetahui cara mengurangi hilangnya paket saat alokasi port dinamis digunakan.
Paket dihapus saat alokasi port dinamis dikonfigurasi
Alokasi port dinamis mendeteksi saat VM hampir kehabisan port, dan melipatgandakan jumlah port yang dialokasikan ke VM. Hal ini membantu memastikan bahwa port tidak terbuang, tetapi dapat menyebabkan paket terputus saat jumlah port yang dialokasikan meningkat.
Untuk mengurangi jumlah paket yang terputus, pertimbangkan hal berikut:
Jika Anda dapat meningkatkan koneksi secara lebih lambat, Cloud NAT memiliki lebih banyak waktu untuk mengalokasikan lebih banyak port.
Jika VM membuat koneksi TCP, Anda dapat mengonfigurasi VM dengan nilai yang lebih besar untuk
tcp_syn_retries
, yang memberi sistem lebih banyak waktu untuk membuat koneksi dan meningkatkan peluang koneksi berhasil.Misalnya, untuk VM Linux, Anda dapat melihat setelan saat ini:
sysctl net.ipv4.tcp_syn_retries
Jika perlu, Anda dapat meningkatkan setelan:
sudo sysctl -w net.ipv4.tcp_syn_retries=NUM
Jika memiliki beban kerja yang berfluktuasi dan perlu mengalokasikan lebih banyak port dengan cepat, Anda mungkin perlu menyesuaikan jumlah minimum port per VM. Lihat penggunaan port Anda dan tentukan jumlah minimum port yang sesuai per VM.
Paket dihapus dengan alasan: konflik independen endpoint
Jika Anda melihat paket hilang dari VM yang menggunakan NAT Publik, dan Anda telah mengaktifkan Pemetaan Independen Endpoint, paket hilang mungkin disebabkan oleh konflik independen endpoint. Jika ya, alasan
dropped_sent_packets_count
adalah
ENDPOINT_INDEPENDENT_CONFLICT
. Untuk mengetahui informasi selengkapnya tentang metrik, lihat Menggunakan metrik instance VM.
Anda dapat mengurangi kemungkinan konflik independen endpoint dengan menggunakan teknik berikut:
Nonaktifkan Pemetaan Independen Endpoint. Hal ini memungkinkan koneksi baru dari alamat IP dan port sumber tertentu untuk menggunakan alamat IP dan port sumber NAT yang berbeda dari yang digunakan sebelumnya. Menonaktifkan atau mengaktifkan Pemetaan Independen Endpoint tidak akan mengganggu koneksi yang sudah dibuat.
Meningkatkan jumlah default minimum port NAT per instance VM, sehingga prosedur reservasi port dapat menetapkan lebih banyak alamat IP sumber NAT dan tuple port sumber ke setiap VM klien. Hal ini mengurangi kemungkinan dua atau beberapa alamat IP klien dan tuple port sumber sementara diberi alamat IP sumber NAT dan tuple port sumber yang sama.
Periksa jumlah port sumber sementara yang digunakan:
Untuk VM Linux:
netstat -an | egrep 'ESTABLISHED|TIME_WAIT|CLOSE_WAIT' | wc -l
Untuk VM Windows:
netstat -tan | findstr "ESTABLISHED TIME_WAIT CLOSE_WAIT" | find /c /v ""
Konfigurasikan instance VM Anda untuk menggunakan kumpulan port sumber efemeral yang lebih besar:
Untuk VM Linux:
Anda dapat melihat rentang port yang dikonfigurasi dengan perintah ini:
cat /proc/sys/net/ipv4/ip_local_port_range
Anda dapat menetapkan
ip_local_port_range
ke jumlah maksimum port sumber sementara (64.512) dengan perintah ini:echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
Untuk VM Windows:
Anda dapat melihat rentang port yang dikonfigurasi dengan perintah ini:
netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp
Anda dapat menetapkan jumlah port TCP dan UDP sumber sementara ke jumlah maksimum yang memungkinkan (64.512) dengan perintah ini:
netsh int ipv4 set dynamicport tcp start=1024 num=64512 netsh int ipv4 set dynamicport udp start=1024 num=64512
Di node Google Kubernetes Engine, Anda dapat mengotomatiskan konfigurasi ini dengan menggunakan
DaemonSet
dengan hak istimewa.
Untuk cluster GKE, nonaktifkan NAT sumber yang dilakukan di setiap node untuk paket yang dikirim ke tujuan yang diinginkan. Anda dapat melakukannya dengan salah satu dari dua cara berikut:
Dengan men-deploy
ip-masq-agent
dan menambahkan tujuan yang diinginkan ke daftarnonMasqueradeCIDRs
.Dengan menonaktifkan SNAT untuk tujuan non-masquerade default dengan flag
--disable-default-snat
saat Anda membuat cluster.
Paket yang diterima tidak terkirim
Gateway Cloud NAT mengelola tabel pelacakan koneksi untuk menyimpan detail koneksi aktif serta pemetaan alamat IP dan port—cara alamat IP dan port VM diterjemahkan ke alamat IP dan port NAT. Gateway Cloud NAT akan menghapus paket data masuk jika tabel pelacakan koneksi tidak berisi entri apa pun untuk koneksi tersebut.
Tidak adanya entri koneksi dalam tabel dapat disebabkan oleh salah satu alasan berikut:
- Koneksi TCP yang dibuat habis waktu tunggunya karena Waktu Tunggu Tidak Ada Aktivitas Koneksi TCP berakhir karena tidak ada aktivitas.
- Endpoint eksternal gagal membuat koneksi baru sebelum Waktu Tunggu Tidak Ada Aktivitas Koneksi Transitori TCP berakhir. Misalnya, resource Google Cloud
memulai koneksi dengan
TCP SYN
, tetapi endpoint eksternal gagal merespons denganSYN ACK
. - Endpoint eksternal, seperti penguji, mencoba terhubung ke alamat IP dan port NAT. Cloud NAT tidak menerima koneksi masuk yang tidak diminta. Entri untuk jenis koneksi ini tidak akan ada di tabel koneksi. Jadi, setiap paket yang diterima akan dihapus.
- Jika Anda menghapus IP NAT dari gateway saat koneksi NAT masih aktif, Pemetaan NAT akan menjadi tidak valid, dan koneksi ini akan segera dihapus dari tabel pelacakan koneksi—semua traffic return akan dihapus.
Sebelum Anda mengatasi penurunan paket masuk, pastikan apakah penurunan tersebut benar-benar memengaruhi aplikasi Anda. Untuk mengonfirmasi, periksa error pada aplikasi Anda setiap kali terjadi lonjakan paket masuk yang dihapus.
Jika penurunan paket masuk memengaruhi aplikasi Anda, coba gunakan teknik berikut untuk mengatasi masalah tersebut:
- Gunakan mekanisme keepalive di aplikasi Anda, sehingga koneksi yang berjalan lama dapat tetap terbuka untuk jangka waktu yang lebih lama.
- Tingkatkan nilai untuk TCP Transitory Connection Idle Timeout, sehingga endpoint eksternal yang menerima traffic (dimulai oleh resource Google Cloud) melalui gateway Cloud NAT mendapatkan lebih banyak waktu untuk merespons dan membuat koneksi.
- Tingkatkan nilai untuk TCP Established Connection Idle Timeout jika Anda telah menurunkan nilai default secara signifikan.
Perlu mengalokasikan lebih banyak alamat IP
Terkadang VM Anda tidak dapat menjangkau internet karena Anda tidak memiliki cukup alamat IP NAT. Ada beberapa faktor yang dapat menyebabkan masalah ini. Untuk informasi selengkapnya, lihat tabel berikut.
Akar masalah | Gejala | Solusi |
---|---|---|
Anda telah mengalokasikan alamat secara manual, tetapi belum mengalokasikannya secara memadai, mengingat penggunaan port Anda saat ini. |
|
Lakukan salah satu hal berikut:
|
Anda telah melampaui batas keras untuk alamat IP NAT. |
|
|
Untuk memantau kegagalan yang disebabkan oleh jumlah alamat IP yang tidak memadai,
buat pemberitahuan untuk metrik
nat_allocation_failed
. Metrik ini ditetapkan ke true
jika Google Cloud tidak dapat
mengaloksir alamat IP yang memadai untuk VM apa pun di gateway NAT Anda. Untuk
mengetahui informasi tentang kebijakan pemberitahuan, lihat
Menentukan kebijakan pemberitahuan.
Mengurangi penggunaan port
Anda dapat meminimalkan jumlah port yang digunakan setiap VM dalam situasi saat alokasi lebih banyak alamat IP NAT tidak memungkinkan atau tidak diinginkan.
Untuk mengurangi penggunaan port, selesaikan langkah-langkah berikut:
Nonaktifkan Pemetaan Independen Endpoint.
Aktifkan alokasi port dinamis. Untuk menggunakan alokasi port dinamis, Anda menetapkan jumlah minimum port per VM dan jumlah maksimum port per VM. Cloud NAT secara otomatis mengalokasikan sejumlah alamat IP sumber NAT dan tuple port sumber antara jumlah port minimum dan maksimum, inklusif. Menggunakan angka rendah untuk jumlah minimum port akan mengurangi pemborosan alamat IP sumber NAT dan tuple port sumber di VM dengan lebih sedikit koneksi aktif. Jika Anda mengalami waktu tunggu koneksi habis saat port dialokasikan, lihat Mengurangi hilangnya paket dengan alokasi port dinamis.
Tentukan jumlah minimum port yang serendah mungkin untuk memenuhi kebutuhan Anda. Ada beberapa metode untuk melakukannya, dan sebagian besar mengandalkan peninjauan jumlah port yang digunakan (
compute.googleapis.com/nat/port_usage
) sebagai input untuk proses pengambilan keputusan. Untuk mengetahui informasi tentang cara menemukan penggunaan port, lihat Melihat penggunaan port. Berikut adalah dua contoh metode untuk menentukan jumlah minimum port:- Pertimbangkan nilai rata-rata
compute.googleapis.com/nat/port_usage
selama periode waktu yang representatif untuk jumlah VM yang representatif. - Pertimbangkan nilai
compute.googleapis.com/nat/port_usage
yang paling sering terjadi selama jangka waktu yang representatif untuk jumlah VM yang representatif.
- Pertimbangkan nilai rata-rata
Tentukan jumlah maksimum port yang serendah mungkin untuk memenuhi kebutuhan Anda. Sekali lagi, tinjau
compute.googleapis.com/nat/port_usage
sebagai input untuk proses pengambilan keputusan Anda. Pertimbangkan nilai maksimumcompute.googleapis.com/nat/port_usage
selama jangka waktu yang representatif untuk jumlah VM yang representatif sebagai titik awal untuk jumlah maksimum port. Perlu diingat bahwa menetapkan jumlah maksimum terlalu tinggi dapat mencegah VM lain menerima tuple port sumber dan alamat IP sumber NAT.Menemukan nilai yang tepat untuk port minimum dan maksimum memerlukan pengujian iteratif. Untuk mengetahui langkah-langkah mengubah nomor port minimum dan maksimum, lihat Mengubah port minimum atau maksimum saat alokasi port dinamis dikonfigurasi.
Tinjau waktu tunggu NAT, maknanya, dan nilai defaultnya. Jika Anda perlu membuat serangkaian koneksi TCP dengan cepat ke 3-tuple tujuan yang sama, pertimbangkan untuk mengurangi waktu tunggu TCP sehingga Cloud NAT dapat menggunakan kembali alamat IP sumber NAT dan tupel port sumber dengan lebih cepat. Hal ini memungkinkan Cloud NAT menggunakan 5-tuple yang sama dengan lebih cepat, bukan menggunakan 5-tuple unik, yang mungkin memerlukan alokasi alamat IP sumber NAT dan tuple port sumber tambahan untuk setiap VM pengirim. Untuk mengetahui langkah-langkah mengubah waktu tunggu NAT, lihat Mengubah waktu tunggu NAT.
Pertanyaan umum (FAQ)
Pembatasan regional untuk Cloud NAT
Dapatkah saya menggunakan gateway Cloud NAT yang sama di lebih dari satu region?
Tidak. Gateway Cloud NAT tidak dapat dikaitkan dengan lebih dari satu region, jaringan VPC, atau Cloud Router.
Jika Anda perlu menyediakan konektivitas untuk region atau jaringan VPC lain, buat gateway Cloud NAT tambahan untuk region atau jaringan VPC tersebut.
Apakah alamat IP NAT eksternal yang digunakan oleh gateway Cloud NAT bersifat global atau regional?
Gateway Cloud NAT menggunakan alamat IP eksternal regional sebagai alamat IP NAT. Meskipun bersifat regional, alamat ini dapat dirutekan secara publik. Untuk mengetahui informasi tentang berbagai cara alamat IP NAT dapat dialokasikan atau ditetapkan, lihat Alamat IP NAT.
Kapan Cloud NAT dapat dan tidak dapat digunakan
Apakah Cloud NAT berlaku untuk instance, termasuk VM node GKE, yang memiliki alamat IP eksternal?
Umumnya, tidak. Jika antarmuka jaringan VM memiliki alamat IP eksternal, Google Cloud selalu melakukan NAT 1-ke-1 untuk paket yang dikirim dari alamat IP internal utama antarmuka jaringan tanpa menggunakan Cloud NAT. Namun, Cloud NAT masih dapat menyediakan layanan NAT untuk paket yang dikirim dari rentang alamat IP alias antarmuka jaringan yang sama. Untuk mengetahui detail tambahan, lihat spesifikasi Cloud NAT dan interaksi Compute Engine.
Apakah NAT Publik memungkinkan VM sumber yang antarmuka jaringannya tidak memiliki alamat IP eksternal mengirim traffic ke VM tujuan atau load balancer yang memiliki alamat IP eksternal, meskipun sumber dan tujuan berada di jaringan VPC yang sama?
Ya. Jalur jaringan melibatkan pengiriman traffic keluar dari jaringan VPC melalui gateway internet default, lalu menerimanya di jaringan yang sama.
Saat VM sumber mengirim paket ke tujuan, Public NAT akan melakukan NAT sumber (SNAT) sebelum mengirimkan paket ke instance kedua. NAT publik menjalankan NAT tujuan (DNAT) untuk respons dari instance kedua ke instance pertama. Untuk contoh langkah demi langkah, lihat Konfigurasi dan alur kerja Public NAT dasar.
Dapatkah saya menggunakan Private NAT untuk komunikasi antar-VM di jaringan VPC yang sama?
Tidak, Private NAT tidak melakukan NAT pada traffic antara VM dalam jaringan VPC yang sama.
Koneksi masuk yang tidak diminta tidak didukung
Apakah Cloud NAT mengizinkan koneksi masuk (misalnya, SSH) ke instance tanpa alamat IP eksternal?
Tidak, Cloud NAT tidak mendukung koneksi masuk yang tidak diminta.
Untuk mengetahui informasi selengkapnya, lihat
Spesifikasi Cloud NAT.
Namun, edge jaringan Google Cloud mungkin merespons ping jika alamat IP tujuan adalah alamat IP eksternal gateway Cloud NAT yang memiliki pemetaan port aktif ke setidaknya satu instance VM. Untuk melihat alamat IP
yang ditetapkan ke gateway Cloud NAT, gunakan
perintah gcloud compute routers get-nat-ip-info.
Alamat IP eksternal yang ditandai sebagai IN_USE
mungkin merespons ping.
Jika Anda perlu terhubung ke VM yang tidak memiliki alamat IP eksternal, lihat Memilih opsi koneksi untuk VM khusus internal. Misalnya, sebagai bagian dari contoh penyiapan Compute Engine Cloud NAT, Anda terhubung ke VM tanpa alamat IP eksternal menggunakan Identity-Aware Proxy.
Cloud NAT dan port
Mengapa VM memiliki jumlah port tetap (64
secara default)?
Saat gateway Cloud NAT menyediakan NAT untuk VM, gateway tersebut akan mencadangkan alamat sumber dan tupel port sumber sesuai dengan prosedur reservasi port.
Untuk informasi selengkapnya, lihat contoh reservasi port.
Dapatkah saya mengubah jumlah minimum port yang direservasi untuk VM?
Ya. Anda dapat meningkatkan atau menurunkan jumlah minimum port per VM saat membuat gateway Cloud NAT baru atau dengan mengeditnya nanti. Setiap gateway Cloud NAT mencadangkan alamat sumber dan tupel port sumber sesuai dengan prosedur reservasi port.
Untuk informasi tambahan tentang cara mengurangi jumlah minimum port, lihat pertanyaan berikutnya.
Dapatkah saya mengurangi jumlah minimum port per VM setelah membuat gateway Cloud NAT?
Ya; namun, mengurangi jumlah minimum port dapat menyebabkan prosedur pemesanan port memesan jumlah port yang lebih kecil per VM. Jika hal ini terjadi, koneksi TCP yang ada mungkin direset dan, jika demikian, harus dibuat ulang.
Saat beralih pemetaan NAT dari rentang Primer dan Sekunder ke rentang Primer saja, apakah port tambahan yang dialokasikan ke setiap instance akan segera dirilis?
Tidak. Port tambahan yang digunakan oleh rentang sekunder akan dipertahankan oleh instance hingga setelan port minimum per VM dikurangi. Saat Cloud NAT dikonfigurasi untuk memetakan rentang Sekunder (alias) untuk subnet, Cloud NAT menetapkan minimal 1.024 port per instance, berdasarkan prosedur reservasi port.
Dengan beralih ke rentang Utama saja, Cloud NAT akan menghemat port tambahan yang dialokasikan untuk instance yang telah menetapkan port tersebut. Setelah mengubah rentang yang diterapkan Cloud NAT hanya ke VM Utama, jumlah sebenarnya port yang ditetapkan ke instance tersebut tidak akan berubah hingga setelan port minimum per VM juga dikurangi.
Untuk mengurangi jumlah port yang dialokasikan ke instance tersebut, setelah beralih ke rentang utama, setelan port minimum per VM harus dikurangi. Setelah nilai tersebut dikurangi, Cloud NAT akan otomatis menyesuaikan jumlah port yang dialokasikan per instance, sehingga mengurangi konsumsi port.
Cloud NAT dan layanan Google lainnya
Apakah Cloud NAT mengaktifkan akses ke Google API dan layanan Google?
Saat Anda mengaktifkan Cloud NAT untuk rentang IP utama subnet, Google Cloud akan otomatis mengaktifkan Akses Google Pribadi. Untuk informasi selengkapnya, lihat Interaksi Akses Google Pribadi.