Tambahkan rute default melalui tunnel, dan paket tunnel itu sendiri akan mengikutinya. Tabel kemudian berisi aturan yang mengalahkan dirinya sendiri. Koneksi terenkripsi ke server mencoba berjalan di dalam koneksi yang sedang ia coba bangun.

Dua mekanisme mencegah perulangan itu. Satu terlihat di tabel routing, yang lain hidup di dalam aplikasi.

Lalu lintas dalam dan luar adalah keputusan yang berbeda

Paket aplikasi masuk ke antarmuka virtual dan dienkapsulasi. Hasilnya paket baru yang dialamatkan ke alamat publik server. Paket itu membutuhkan rute di jaringan fisik, karena tidak ada bagian darinya yang boleh masuk ke tunnel.

Keduanya keputusan routing, dan hanya yang pertama milik tunnel. Ketika klien memasang rute default yang juga mencakup server, paket luar ikut tertangkap.

Gejalanya seketika dan total. Handshake selesai lalu tidak ada yang mengalir, atau koneksi putus pada saat rute dipasang. Pada kedua kasus keepalive tidak bisa keluar lagi.

Opsi satu: rute host untuk endpoint

Pendekatan langsung menambahkan rute untuk alamat server melalui gateway asli. Hanya perlu satu baris. Rute itu terlihat oleh siapa pun yang membaca tabel. Juga mudah dijelaskan dalam catatan perubahan.

Kelemahannya muncul ketika jalur yang mendasari berubah. Rute yang tersimpan menyebut gateway dan antarmuka dari jaringan lama. Setelah pergantian Wi-Fi gateway itu mungkin tidak ada, dan rute tertinggal, tampak benar dan tidak melakukan apa pun.

# before the tunnel: which path reaches the endpoint?
ip route get 198.51.100.7

# pin it through the current gateway
ip route add 198.51.100.7/32 via 192.168.1.1 dev wlan0

# after the tunnel is up, confirm the pin survived
ip route get 198.51.100.7

Nama host membuat ini lebih sulit. Jika endpoint adalah nama yang diselesaikan ke beberapa alamat, pengecualian harus mencakup alamat yang benar-benar dipakai. Pencarian berikutnya bisa mengembalikan sesuatu yang tidak pernah dicakup rute.

Opsi dua: lindungi soket

Pendekatan lain tidak pernah menyentuh tabel routing. Klien menandai atau melindungi soket yang membawa tunnel, sehingga sistem operasi mengirim lalu lintas soket itu ke luar tunnel berdasarkan kebijakan. Android menyediakan mekanisme ini langsung kepada aplikasi VPN. Klien desktop menerapkan padanannya dengan tanda firewall atau panggilan ikat-ke-perangkat.

Keuntungannya adalah pengecualian mengikuti koneksi alih-alih gateway tersimpan. Perubahan jaringan menulis ulang jalur yang mendasari, dan soket yang dilindungi ikut berpindah karena tidak pernah dipatok ke alamat. Tabel rute tetap bersih.

Harganya adalah visibilitas. Tidak ada yang di tabel routing menunjukkan pengecualian, jadi peninjau yang mencari rute host tidak menemukan apa pun dan bisa menyimpulkan desainnya tidak aman. Perlindungan hidup di kode klien dan di aturan kebijakan yang dipasang kode itu.

Memilih di antara keduanya

Pilih mekanisme tingkat soket ketika klien mendukungnya, karena ia bertahan terhadap perubahan jaringan yang merusak rute terpatok. Pilih rute host ketika pengecualian harus terlihat oleh alat lain, atau ketika klien tidak menawarkan yang lebih baik.

Tidak ada mekanisme yang menghapus kebutuhan agar alamat server dapat dijangkau sama sekali. Gateway privat memiliki alamat pendengar publik, dan alamat itulah yang harus tetap di luar tunnel. Jaringan internal di belakangnya baru dapat dijangkau setelah tunnel ada.

Mana pun yang Anda pilih, simpan bersama komponen yang memiliki tunnel. Rute host liar yang ditambahkan dengan tangan bekerja sampai jaringan berikutnya, lalu menjadi gangguan misterius besok.

Artikel terkait