Kill switch dan peraturan larangan pertindihan menunjuk ke arah bertentangan, yang menjelaskan mengapa tetapan VPN biasa tidak pernah menyatakan yang kedua. Kill switch bertindak balas terhadap terowong yang jatuh, manakala keperluan ini bertindak balas terhadap terowong yang naik dan mengekalkan aplikasi di luar gambar. Satu keputusan reka bentuk menyelesaikan sebahagian besarnya: sama ada aplikasi dihentikan, dihalang daripada bermula, atau hanya dilucutkan akses rangkaian. Pilih lapisan itu sebelum mencapai peraturan firewall atau gelung pembunuh proses, kerana peraturan yang dikuatkuasakan melalui pemerhatian membocorkan tetingkap pada setiap pelancaran.

Mitos: kill switch menghalang program daripada bermula

Kill switch ialah kawalan trafik, dan mereka jujur tentangnya: mereka membenarkan atau menolak paket mengikut keadaan terowong. Tiada satu pun daripada mereka enggan memulakan program, dan tiada satu pun memeriksa fail boleh laku mana yang membuka soket. Pintasan desktop, tugas berjadual dan pembantu latar belakang semuanya mencapai rangkaian tanpa melalui apa-apa yang mengetahui nama aplikasi. Jarak antara kedua-dua mekanisme itu ialah tempat kebanyakan kekeliruan tinggal.

Susunan yang benar-benar menentukan sama ada program boleh bermula ialah kawalan aplikasi. Pada Windows itu bermaksud AppLocker atau WDAC, dan pada macOS terurus ia bermaksud senarai permit yang dikuatkuasakan oleh profil peranti. Kedua-duanya bebas daripada terowong, itulah sebabnya kedua-dua keperluan digabungkan dalam tiket yang sama dan kemudian tidak dipenuhi oleh mana-mana.

Namakan mod sebelum menamakan alat

Tulis peraturan sebagai mesin keadaan dengan tiga keadaan: penggunaan biasa, sesi kerja VPN dan keluar. Pertindihan terlarang milik keadaan tengah, bukan perisian klien.

Sesiapa yang menukar keadaan memiliki tiga tindakan mengikut urutan: menyelesaikan kerja aplikasi, meminta penutupan normalnya, dan mengesahkan contoh itu telah pergi sebelum terowong naik. Urutan juga penting di hujung yang lain, kerana VPN yang bersambung dahulu dan menghentikan program kemudian sudah membenarkan pertindihan. Jika keperluan merangkumi pembentukan sambungan, menunggu penunjuk bersambung terlalu lewat.

Apa yang sebenarnya dilakukan konflik dua hala

Untuk dua perkhidmatan yang benar-benar diurus oleh systemd, Conflicts= adalah simetri: memulakan satu menghentikan yang lain. Rujukan unit mendokumentasikan tingkah laku itu dan secara berasingan menuntut urutan eksplisit apabila satu mesti menamatkan hentian sebelum yang lain bermula. Tanpa entri urutan itu, hentian dan permulaan berlumba, dan hasilnya bergantung pada masa.

Itu bukan senarai larangan. Sambungkan kebergantungan secara terbalik dan memulakan aplikasi akan menghentikan VPN sebaliknya, yang merupakan kegagalan yang patut disyaki apabila terowong memutuskan sendiri pada saat yang boleh diramal. Aplikasi desktop bukan unit systemd, dan sambungan NetworkManager juga bukan unit, jadi corak ini hanya berfungsi untuk perkhidmatan yang anda balut sendiri.

Uji peralihan, bukan hanya pelancaran pertama

Empat peralihan menentukan sama ada keperluan bertahan: masuk sesi dengan aplikasi berjalan, melancarkannya semula di tengah sesi, permulaan VPN yang gagal dan pemutusan yang disengajakan. Uji setiap satu dan simpan hasilnya di sebelah fail unit. Arahan di bawah membaca hubungan semasa dan kemudian melatih peralihan yang paling penting.

systemctl show work-vpn.service -p Conflicts -p After
systemctl start work-vpn.service
systemctl is-active office-sync.service
nmcli connection show --active

Arahan ketiga harus membiarkan aplikasi tidak aktif, dan arahan keempat harus menyenaraikan hanya sambungan terowong semasa sesi berjalan. Hasil yang berbeza bermaksud peralihan itu tidak dikuatkuasakan sama sekali.

Pelancaran semula semasa sesi ialah kes yang mendedahkan reka bentuk berasaskan pembalut, kerana pintasan yang dimulakan dari desktop tidak pernah berunding dengan skrip pelancar. Jika pengelakan itu penting, penguatkuasaan tergolong dalam kawalan aplikasi dan bukan klien VPN. Dokumentasikan juga penghujung sesi, dan utamakan penyambungan semula yang disengajakan daripada membuka semula setiap proses yang dihentikan semasa masuk. Catat hasil setiap peralihan dalam nota yang sama yang menyimpan fail unit.

Artikel berkaitan