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-vpn

Periksa 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.service

Uji 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.

Artikel terkait