Anda membuka tabel perutean setelah terhubung dan menemukan satu alamat dirutekan lewat terowongan sementara subnet di sekitarnya tetap menuju gateway lokal. Entri itu adalah rute host: satu alamat, dicocokkan oleh prefiks yang semuanya satu. Ini penting karena keputusan perutean memakai prefiks cocok terpanjang, sehingga /32 dapat mengalahkan /24 atau rute default tanpa mengubah keduanya. Apakah itu pengecualian yang hati-hati atau gangguan di masa depan bergantung pada alamat mana yang disebutnya dan siapa yang merawatnya.

Satu alamat, satu entri di tabel

Rute host IPv4 membawa prefiks /32 dan rute host IPv6 membawa /128, yang berarti entri itu dapat cocok dengan tepat satu alamat tujuan. Tidak ada hal lain di tabel yang bergerak: subnet yang menutupinya dan rute default tetap di tempatnya. Entri sempit menang untuk alamat itu karena prefiksnya lebih panjang, bukan karena ditambahkan belakangan.

Sifat itu membuat rute host menjadi pengecualian yang baik dan kebiasaan yang buruk. Dua entri /32 yang menyebut pintu depan sebuah layanan tidak mencakup alamat keduanya, alamat IPv6-nya, atau alamat yang dituju bulan depan. Tabel penuh entri satu alamat tanpa penjelasan biasanya berarti seseorang terus menambal di sekitar keputusan subnet alih-alih mengambilnya. Baca dulu panjang prefiks, lalu tanyakan apa yang seharusnya dilindungi entri itu.

Baca entri dari klien ke luar

Mulailah dari mesin yang bermasalah, karena alamat yang sama dapat dirutekan berbeda di laptop dan di gateway di depannya. Tanyakan ke kernel jalur mana yang akan dipilihnya untuk alamat persis yang dipakai aplikasi, alih-alih membaca tabel dari atas. Jawabannya mencakup antarmuka dan hop berikutnya, yang bersama-sama merupakan keputusannya.

ip route get 203.0.113.25
ip -6 route get 2001:db8:4::25
ip route show | grep -F 203.0.113.25
Find-NetRoute -RemoteIPAddress 203.0.113.25

Ulangi kueri untuk keluarga alamat yang benar-benar dipilih aplikasi, karena klien bisa memilih IPv6 dan diam-diam melewati pengecualian IPv4. Bandingkan hasilnya sebelum dan sesudah terowongan menyala, dan simpan kedua keluaran. Perbandingan itu menunjukkan apakah klien menambahkan entri saat terhubung atau entri itu sudah ada.

Entri permanen dan entri runtime gagal dengan cara berbeda. Entri runtime hilang bersama sesi, sedangkan yang permanen bertahan setelah reboot dan terus mengirim lalu lintas ke gateway yang sudah tidak ada.

Pengecualian endpoint dan jebakan rekursi

Klien VPN biasanya memasang rute host ke alamat luar server melalui gateway asli sebelum mengalihkan rute default. Tanpa entri itu, paket terenkripsi akan dikirim ke dalam terowongan yang sedang mereka coba bangun, dan koneksi akan berputar sampai waktu habis.

Jebakan muncul ketika subnet yang diterima terowongan kebetulan mencakup alamat endpoint itu, atau ketika profil kedua menambahkan rute yang lebih lebar sesudahnya. Entri endpoint lalu kalah dari prefiks yang lebih panjang dan sesi runtuh begitu mulai melewatkan lalu lintas. Menuliskan alamat endpoint di samping subnet yang diterima adalah cara termurah untuk menyadari benturan sebelum pengguna. Itu juga menjelaskan mengapa profil yang sama bekerja dari satu jaringan dan gagal dari jaringan lain.

Verifikasi jalur yang benar-benar dipakai aplikasi

Ping yang berhasil ke nama host adalah bukti lemah ketika aplikasi terhubung ke alamat lain atau keluarga lain. Verifikasi kombinasi persis alamat, keluarga, port, dan antarmuka, dari mesin yang menjalankan klien.

ip route get 203.0.113.25
sudo nft list ruleset | grep -A 4 'chain output'
curl -sS --max-time 8 -o /dev/null -w '%{remote_ip}
' https://app.example.net

Jika jalurnya salah, putuskan apakah kebutuhannya jaringan atau satu alamat sebelum menyunting apa pun. Kebutuhan satu alamat membenarkan rute host dengan komentar dan pemilik; layanan dengan alamat berputar membutuhkan perutean berbasis domain atau keputusan subnet yang jujur.

Hapus entri yang tidak lagi memetakan ke tujuan nyata dan catat yang Anda pertahankan. /32 tanpa penjelasan tidak bisa dibedakan dari bug tiga bulan kemudian, dan orang berikutnya akan menghapusnya tanpa tahu apa yang bergantung padanya.

Artikel terkait