Rute terpisah L2TP di Mac: mengapa alamat host tidak berfungsi
setadditionalroutes menginginkan pasangan jaringan dan mask, mengganti seluruh daftar, dan membutuhkan nama layanan yang literal. Periksa tabel sebelum menyalahkan gateway.
VPN tersambung, bilah menu menunjukkannya, dan sebuah host internal tetap kehabisan waktu. Dalam situasi itu ada tiga kemungkinan penyebab, dan mana yang berlaku bergantung pada bagaimana terowongan dikonfigurasi. Entah perintah rute memakai alamat host padahal alamat jaringan yang diperlukan, atau profil itu sendiri memasang rute default yang menelan keputusan, atau klien adalah terowongan PPP yang membutuhkan hook alih-alih kunci profil. Periksa dalam urutan itu, karena yang pertama paling murah untuk disingkirkan.
Tujuan adalah alamat jaringan, mask menjelaskan prefiks
networksetup -setadditionalroutes menerima rangkap tiga tujuan, mask subnet, dan gateway. Panggilan yang mengirim satu subnet internal melalui terowongan tampak seperti ini:
sudo networksetup -setadditionalroutes "VPN (L2TP)" 192.168.1.0 255.255.255.0 10.2.0.0
Perhatikan apa itu tujuan: alamat jaringan, bukan alamat server yang ingin Anda capai. Pada kasus yang melahirkan artikel ini, perintah identik dengan 192.168.1.20 di posisi itu tidak melakukan hal berguna, dan menggantinya dengan 192.168.1.0 langsung berhasil. Mask sama, gateway sama, satu angka berbeda. Itulah seluruh kegagalan dalam bentuk mini.
Sebabnya aritmetika, bukan kebijakan. Alamat host yang dipasangkan dengan mask /24 tidak menjelaskan 192.168.1.0/24; ia menjelaskan sesuatu yang tidak dapat ditampung tabel routing secara berguna, jadi entri ditolak atau diabaikan dan terowongan akhirnya membawa lebih sedikit dari yang Anda maksudkan.
Ketika Anda ingin tepat satu host, gunakan alamat host dengan mask 255.255.255.255. Pasangan campuran adalah tempat ini salah, bukan penggunaan alamat host sebagai demikian. /32 yang dibangun dari satu alamat adalah rute sah; /24 yang dibangun dari satu alamat adalah kesalahan.
Panggilan mengganti daftar, dan namanya literal
Dua perilaku mengejutkan orang pada percobaan pertama. Perintah menetapkan seluruh daftar rute tambahan alih-alih menambahkan, sehingga panggilan yang menambahkan satu prefiks diam-diam menghapus yang lain yang sudah ada sebelumnya. Bangun seluruh himpunan dalam satu pemanggilan.
Nama layanan juga bukan label yang Anda karang. Bacalah dari alat itu dan salin persis, termasuk akhiran jenis:
networksetup -listallnetworkservices
Nama yang berbeda satu karakter tidak menghasilkan kesalahan yang layak dibaca maupun rute. Menyalin dan menempel adalah teknik yang benar di sini, bukan mengetik ulang dari ingatan.
Ketika profil mengklaim rute default
Rute terpisah kalah dari rute default untuk tujuan apa pun yang tidak dicakupnya secara eksplisit, dan profil L2TP yang dikonfigurasi untuk terowongan penuh memasang tepat itu. Jika profil mengatakan semuanya lewat terowongan, daftar rute tambahan berubah sangat sedikit. Entri Anda bukan salah; ia sekadar tidak relevan bagi tujuan yang tidak pernah disebutnya. Kendali atas hal ini biasanya ada di pengaturan kirim semua lalu lintas pada profil, bukan di perintah rute mana pun.
Putuskan model mana yang benar-benar Anda inginkan sebelum menyunting lebih banyak entri. Terowongan penuh dengan pengecualian adalah konfigurasi berbeda dari terowongan terpisah dengan prefiks tertentu, dan mencampur keduanya menghasilkan tabel yang tidak dapat diprediksi siapa pun.
Jika organisasi mensyaratkan terowongan penuh, berhentilah mencoba memisahkannya secara lokal dan bawa persyaratan itu kepada pemilik kebijakan. Rute yang ditambahkan secara lokal dan bertentangan dengannya akan dihapus oleh pembaruan profil berikutnya.
Terowongan PPP membutuhkan hook alih-alih kunci
Untuk terowongan berbasis PPP, defaultroute adalah kunci profil yang membuat rute default; hapus dan klien berhenti mengklaim setiap tujuan. Rute lalu ditambahkan setelah antarmuka muncul, biasanya dari /etc/ppp/ip-up:
#!/bin/sh
/sbin/route add -net 192.168.1.0 -interface ppp0
Jaga skrip tetap milik root dan dapat dieksekusi, dan tambahkan penjaga pada nama antarmuka ketika ada lebih dari satu profil terowongan di mesin. Hook yang berjalan untuk setiap tautan PPP dan mengasumsikan satu nama perangkat adalah bug kecil dengan umur panjang.
Verifikasi pemisahan dengan tiga permintaan
Ambil tabel saat tersambung dan catat antarmuka mana yang melayani terowongan. Lalu periksa tujuan spesifik alih-alih memercayai status keluar perintah yang membuatnya. Kode keluar melaporkan apakah alat menerima argumennya, bukan apakah lalu lintas menempuh jalur yang Anda maksud.
Akhiri dengan tiga permintaan yang membuktikan pemisahan: satu host internal berdasarkan alamat, satu nama internal melalui resolver internal, dan satu situs publik yang seharusnya masih memakai koneksi lokal. Jika situs publik kini juga melewati terowongan, pemisahan tidak pernah terjadi, apa pun yang tampak dikatakan daftar rute.
Sambungkan sekali lagi dan ulangi permintaan internal, karena rute yang ditambahkan dengan tangan dapat hidup lebih lama daripada antarmuka yang membuatnya sah dan diam-diam mengubah lalu lintas menjadi lubang hitam setelah terowongan jatuh.