Lewati VPN Rumah dengan systemd ExecCondition
Melewati dengan sengaja dan perintah persiapan yang rusak adalah hasil yang berbeda. Tetapkan kode keluar helper, lalu uji perpindahan antarjaringan.
VPN jaringan rumah Anda tidak ada gunanya ketika laptop sudah berada di jaringan itu. Jalan pintas yang menggoda adalah perintah persiapan yang keluar dengan kode bukan nol; itu menggagalkan unit dan membuat setiap dasbor tampak rusak. systemd punya direktif untuk tepat jenis keputusan ini, dan direktif itu memisahkan pelewatan yang disengaja dari kesalahan nyata. Melakukannya dengan benar terutama berarti menuliskan apa arti setiap kode keluar.
Mengapa prasyarat yang gagal adalah bentuk yang salah
ExecStartPre memperlakukan keluar bukan nol sebagai kegagalan start, yang benar untuk perintah yang menyiapkan layanan. Menggunakannya sebagai syarat membuat keputusan kebijakan tidak bisa dibedakan dari dependensi yang rusak. ExecCondition ada agar unit dapat menolak start tanpa ditandai gagal.
Pembeda itu penting pada pukul tiga pagi, ketika tidak ada yang ingin menelusuri unit merah yang berperilaku sesuai desain. Unit yang gagal juga menyembunyikan kegagalan nyata di antara yang disengaja.
Tulis kontrak kode keluar lebih dulu
Tulis kontrak sebelum skrip. Keluar nol berarti lanjut, keluar satu berarti lewati perintah start yang tersisa, dan keluar 255 berarti kondisinya sendiri tidak dapat berjalan. Kode antara dua dan 254 biasanya juga berarti lewati, yang mudah dilupakan ketika helper mengembalikan kode galat acak. Drop-in di bawah ini memasang helper ke nama unit yang sebenarnya.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnPeriksa unit efektif untuk pengaturan SuccessExitStatus atau stop-post warisan sebelum mengasumsikan semantik bawaan. Lalu uji masing-masing dari tiga hasil dengan sengaja.
Petunjuk jaringan bukan bukti lokasi
Alamat router yang dapat dijangkau atau MAC yang dikenal dapat menyarankan jaringan yang benar, dan keduanya tidak membuktikannya. Jaringan lain dapat memakai ulang alamat yang sama, data ARP bisa kedaluwarsa, dan pengenal dapat ditiru. Perlakukan pemeriksaan sebagai optimasi yang konsisten dengan kebijakan, bukan sebagai hasil autentikasi.
Putuskan lebih dulu apa arti ketidakpastian. Menyalakan VPN saat ragu aman bagi klien yang sekadar akan gagal terhubung; melewatinya saat ragu tidak aman. Buat pemeriksaan terbatas, dan baca antarmuka aktif alih-alih mengasumsikan yang pertama dalam daftar. Pemeriksaan yang menggantung lebih buruk daripada yang menjawab tidak, karena unit menunggunya.
Catat asumsi itu di samping berkas unit agar orang berikutnya tahu apa yang diyakini helper. Komentar di bagian atas skrip adalah tempat termurah untuk menyimpannya.
Tangani perpindahan antarjaringan
Kondisi berjalan saat layanan dimulai, dan tidak dievaluasi ulang nanti. Unit yang dilewati tetap dilewati setelah laptop pindah ke kedai kopi, dan terowongan yang berjalan tetap aktif setelah laptop kembali ke rumah. Hubungkan siklus hidup perubahan jaringan dengan keputusan start dan stop melalui mekanisme terpisah.
systemctl cat home-vpn.serviceUji empat kasus: start di rumah, start di luar, pemeriksaan yang tidak dapat berjalan, dan perpindahan antarjaringan saat unit aktif. Pertahankan alasan pelewatan terlihat di jurnal agar keputusan yang disengaja tidak pernah tampak seperti kegagalan autentikasi. Referensi layanan mendokumentasikan semantik keluar dan versi minimum.