Anda menambahkan satu baris untuk mempertahankan rute default lokal, dan setelah itu terowongan tidak lagi mencapai server DNS internal. Baris itu adalah pull-filter ignore "route", yang bukan berarti "abaikan rute ini". Artinya "buang setiap opsi yang didorong yang teksnya dimulai dengan lima huruf itu", dan pada server normal itu mencakup route-gateway, route-metric, dan route-ipv6 bersama rutenya sendiri. Daftar periksa di bawah ini adalah yang saya jalankan sebelum menyentuh profil yang harus digunakan orang lain.

Filter hanya berlaku untuk opsi yang didorong

pull-filter hanya bekerja pada baris opsi yang dikirim server setelah terowongan terbentuk, dan tidak pada hal lain. Opsi yang ditulis di file lokal Anda tidak terpengaruh olehnya, begitu juga lalu lintas aplikasi. Jika Anda berharap mencegah proses menggunakan terowongan, ini alat yang sepenuhnya salah dan tidak ada kombinasi filter yang akan melakukannya.

Cakupan itu berguna, karena berarti Anda dapat membiarkan konfigurasi server dan tetap menolak sebagiannya secara lokal. Ini juga batasan yang layak dicatat di tiket: filter mengubah apa yang diterima klien ini, bukan apa yang ditawarkan server. Tidak ada efeknya pada pengguna lain dari profil yang sama. Ia juga tidak bertahan saat beralih ke klien lain yang tidak menerapkan opsi itu, yang layak diketahui sebelum Anda membangun alur kerja di atasnya.

Pastikan apa yang sebenarnya dikirim server sebelum menulis pola. Pada verbositas tinggi klien mencetak string opsi yang didorong yang diterimanya, dan itu satu-satunya sumber jujur untuk teks persis yang Anda cocokkan:

sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn

Baca baris yang didorong sebagai daftar opsi yang dipisahkan koma, dan perhatikan bahwa nama opsi dan argumennya dipisahkan oleh spasi. Teks filter Anda dibandingkan dengan aliran itu, itulah sebabnya spasi sangat penting pada langkah berikutnya.

Pencocokan adalah prefiks, jadi spasi adalah segalanya

Perbandingan adalah prefiks string, bukan nama opsi yang diurai. Karena itu "route" cocok dengan route-gateway 10.8.0.1, route-ipv6 2001:db8::/32, dan route-metric 100. Satu spasi di akhir mempersempitnya ke keluarga yang mungkin Anda maksud, dan prefiks lengkap mempersempitnya lebih jauh ke tujuan tertentu.

Filter textWhat it actually matchesTypical outcome
"route"Every option beginning with those lettersRoutes, gateway, metric and IPv6 routes all dropped
"route "Route entries only, not the hyphenated siblingsThe routes go, the rest survives
"route 10.60."A single destination rangeThe narrowest rule, and the easiest to audit
"dhcp-option DNS"Pushed DNS settingsResolver stays local, internal names stop resolving

Baris terakhir adalah yang menangkap orang saat bekerja dengan terowongan terpisah. Mempertahankan resolver Anda sendiri adalah pilihan yang sah, dan itu berarti setiap nama internal kini bergantung pada resolver yang tidak dapat melihat zona privat. Itu konsekuensi yang diterima dengan sengaja, bukan efek samping yang ditemukan di produksi.

Pencocokan prefiks juga berarti suatu aturan dapat melebar diam-diam nanti. Ketika server menambahkan opsi baru yang dimulai dengan teks Anda, filter Anda mulai berlaku padanya tanpa ada yang mengedit profil Anda. Itu mode kegagalan yang harus dirancang, dan mitigasinya adalah mencocokkan sebanyak mungkin bagian opsi, bukan sesedikit mungkin.

Tiga kata kerja dengan tiga hasil berbeda

accept, ignore, dan reject bukan tiga ejaan dari ide yang sama. Mereka berbeda dalam apa yang dilakukan klien dengan kecocokan dan apakah ada yang mengetahuinya.

ignore membuang opsi yang cocok secara diam-diam, yang Anda inginkan untuk pengaturan yang sengaja Anda ganti. reject membuangnya dan membuat klien mengeluh, yang Anda inginkan ketika ketiadaannya harus terlihat di log alih-alih ditemukan nanti. accept adalah bentuk positif, digunakan saat Anda membangun daftar izin alih-alih menghapus opsi individual.

Apa pun kata kerja yang Anda gunakan, filter diterapkan dalam urutan kemunculannya, sehingga dua aturan yang tumpang tindih menghasilkan hasil yang bergantung pada urutan dan sangat sulit ditinjau. Pertahankan satu aturan per maksud dan taruh teks paling spesifik di masing-masing. Jika Anda memerlukan daftar izin, pilih beberapa aturan accept daripada setumpuk aturan ignore yang berjumlah sama. Dengan begitu peninjau dapat membaca file dari atas ke bawah dan memprediksi hasilnya, dan itulah satu-satunya uji yang berskala.

Verifikasi rute dan resolver yang diterapkan, bukan profilnya

Filter yang terlihat benar di file masih dapat meninggalkan Anda dengan terowongan yang tidak merutekan apa pun yang berguna. Verifikasi efeknya pada sistem yang berjalan, tempat opsi yang didorong sudah diterapkan atau dibuang:

ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/

Dua baris pertama memberi tahu Anda apakah rute default yang didorong tiba dan berapa banyak entri statis yang bertahan. Kueri resolver menunjukkan server mana yang sebenarnya digunakan antarmuka terowongan, dan biasanya di situlah kejutan DNS muncul. Baris terakhir menjawab satu-satunya pertanyaan yang penting bagi pengguna.

Uji kedua arah saat Anda di sana. Aturan yang menjaga internet lokal Anda tetap berfungsi tetapi diam-diam merusak resolusi nama internal lolos pemeriksaan dangkal dan gagal pada tugas nyata pertama, jadi sertakan satu sumber daya internal dan satu situs publik dalam uji yang sama.

Catat pengecualian dan siapa pemiliknya

Filter adalah pengecualian pada desain operator, jadi tuliskan dengan alasan dan titik tinjau. "Mengabaikan rute yang didorong untuk mempertahankan default lokal" dapat ditinjau; baris telanjang di profil tidak, dan orang berikutnya akan menghapusnya atau memperluasnya dengan menebak.

Versi juga penting di sini. Perilaku pencocokan dan sintaks persis yang diterima telah disempurnakan di OpenVPN 2.4, 2.5, dan 2.6, jadi pastikan polanya terhadap manual build yang Anda kirim, bukan terhadap posting forum tentang rilis lama. Manual OpenVPN 2.6 mendokumentasikan opsi dan aturan pencocokannya.

Akhirnya, sepakati pengecualian dengan siapa pun yang menjalankan server. Filter sisi klien yang bertentangan dengan kebijakan server yang disengaja adalah insiden dukungan yang menunggu audit berikutnya, dan jauh lebih murah menyelesaikannya sebelum profil dikirim daripada setelah seseorang menyadari rutenya hilang.

Artikel terkait