Ping melalui VPN: mengapa aturan balasan echo melewatkan jalur pulang
Balasan echo mengubah tipe ICMP, bukan port layanan. Telusuri paket dalam melewati penerusan, NAT, dan filter stateful sebelum membuka port.
Ping sebuah host melalui VPN dan permintaan keluar dengan satu tipe ICMP lalu kembali dengan tipe lain, yang cukup untuk membingungkan aturan apa pun yang ditulis dalam istilah port. Tidak ada port layanan tujuan dalam pertukaran echo yang bisa disalin ke aturan pulang, dan filter yang mengharapkan simetri akan menjatuhkan balasan sementara permintaan lewat tanpa hambatan. Perbaikan dimulai dengan membaca paket sebagaimana adanya, lalu memutuskan batas mana di jalur yang mengambil keputusan. Biasanya dua lapisan bekerja sementara lapisan ketiga diam-diam menjatuhkan balasan. Bagian-bagian di bawah memisahkannya dalam urutan paket menemuinya.
Paket berganti tipe, bukan port
Permintaan echo adalah ICMP tipe 8, kode 0, dan membawa pengenal serta nomor urut. Balasannya adalah tipe 0, kode 0, dengan pengenal dan urutan yang sama, dan ujung IP ditukar. RFC 792 mendefinisikan bidang-bidang itu, dan pengenal itulah yang memungkinkan pengirim mencocokkan balasan dengan permintaannya sendiri.
Yang tidak ada sama pentingnya: tidak ada header TCP atau UDP, jadi tidak ada port untuk diizinkan. Aturan yang menyebut port untuk balasan echo menjelaskan paket yang tidak akan pernah ada. Ini kesalahan paling umum dalam tiket ping VPN. Aturannya tampak spesifik, tidak berlaku untuk apa pun, dan membiarkan kegagalan tepat di tempatnya.
Tiga konteks menentukan paket
Jika ping menargetkan host di LAN jauh, permintaan harus diteruskan oleh gateway. Jika menargetkan alamat milik gateway itu sendiri, ia berakhir di jalur masukan lokal. Jika gateway yang memulai ping, paket dimulai di jalur keluarannya sendiri dan sama sekali tidak melewati keputusan penerusan.
Ketiga konteks itu punya rantai aturan dan penghitung berbeda, dan memperlakukannya sebagai satu adalah alasan «firewall mengizinkan ICMP» masih bisa menghasilkan ping gagal. Tunnel luar adalah konteks keempat: mengizinkan listener VPN tidak otomatis mengizinkan permintaan dalam yang telah didekapsulasi, dan izin dalam tidak mengatakan apa pun tentang apakah tunnel luar menyala.
Filter stateful dan stateless menangani balasan secara berbeda
Firewall stateful yang melihat permintaan keluar dapat mengaitkan balasan dengan aliran itu dan meloloskannya tanpa aturan kedua. Filter stateless tidak punya memori semacam itu, jadi arah pulang butuh izin eksplisitnya sendiri, dengan sumber dan tujuan dibalik.
Periksa model mana yang benar-benar diterapkan produk sebelum menulis apa pun. Aturan untuk permintaan echo belum tentu mencakup balasan echo, dan produk yang melacak kueri ICMP masih bisa menerapkan kebijakan berbeda pada balasan yang tiba di antarmuka lain.
Batasi apa yang Anda izinkan. Mengizinkan setiap balasan echo dari mana saja tidak sama dengan menyelesaikan asosiasi stateful, dan nomor tipe tidak mengautentikasi pengirim.
Terjemahan juga mengubah pengenal
Jika terjemahan sumber memang disengaja, tuple di ujung jauh tidak cocok dengan yang dikirim klien. NAT dapat menerjemahkan pengenal kueri ICMP bersama alamatnya, jadi memaksa nomor yang sama muncul di kedua sisi menghasilkan ketidakcocokan palsu.
Sebaliknya korelasikan pemetaan yang dilaporkan penerjemah. Penerjemah yang menulis ulang pengenal tidak akan mempertahankan nomor yang dicatat klien Anda, jadi perlakukan pemetaan sebagai identitas, bukan nomornya. Lalu telusuri satu permintaan yang dapat dikenali sepanjang jalur: pastikan ia mencapai tujuan dengan sumber yang diharapkan, pastikan tujuan mengirim balasan, telusuri rute balasan itu kembali, dan pastikan klien menerimanya alih-alih hanya melihat penghitung gateway naik.
Jangan melipat galat ICMP ke dalam kebijakan echo
Pesan «perlu fragmentasi» yang dipakai penemuan MTU jalur bukan balasan echo, dan muatannya mengutip paket yang memicunya. Izin khusus echo yang diam-diam membuang galat itu mengubah masalah ukuran menjadi koneksi menggantung, yang merupakan kebalikan dari membantu.
Kewaspadaan yang sama berlaku untuk keluarga alamat. ICMPv6 memakai tipe pesan berbeda dan membawa fungsi penting yang tidak dimiliki IPv4, jadi menyalin nomor ini ke aturan IPv6 jelas salah.
Ketika pertukaran echo berfungsi, uji aplikasi sebenarnya secara terpisah. Ping yang berhasil membuktikan perjalanan pulang-pergi satu protokol pada satu ukuran ke satu tujuan, dan itu bukan lisensi untuk menganggap HTTPS, SMB, atau aliran lain diizinkan.