Menyambungkan perkhidmatan bersandar ke tun0.device kelihatan seperti melanggan terowong, dan ia bukan begitu. Unit peranti mencerminkan bahawa antara muka wujud, yang boleh kekal benar melalui sambungan gagal dan penyambungan semula yang menyusul. Perkhidmatan kemudian bertindak pada saat yang salah, atau tidak pernah, bergantung pada sama ada antara muka itu hilang di antaranya. Cangkuk yang menerangkan peristiwa yang benar-benar anda pedulikan ialah yang dipanggil OpenVPN, bukan yang disimpulkan systemd.

Tentukan keadaan yang diperlukan perkhidmatan sebelum memilih pencetus, kerana tiga calon itu tidak boleh ditukar ganti.

Apa yang sebenarnya dijejaki unit peranti

systemd mencipta unit peranti daripada pandangan kernel terhadap antara muka rangkaian, jadi tun0.device menjadi aktif apabila antara muka muncul dan tidak aktif apabila ia dialih keluar. Dengan persist-tun, mula semula lembut mengekalkan antara muka di tempatnya, jadi unit itu tidak pernah berkelip dan tiada apa yang terikat padanya dicetuskan. Walaupun tanpa kegigihan, unit itu tidak berkata apa-apa tentang laluan, DNS atau sama ada hujung jauh menjawab.

Itu menjadikannya pengganti yang buruk untuk 'VPN sudah sedia'. Pendengar yang hanya memerlukan alamat tempatan mungkin berpuas hati dengan kewujudan antara muka, manakala perkhidmatan yang memanggil aplikasi pada rangkaian jauh memerlukan laluan dan kebolehcapaian, yang tidak dapat dinyatakan oleh unit peranti.

up, route-up dan up-restart membawa maksud berbeza

up berjalan selepas peranti TUN/TAP dibuka dan antara muka dikonfigurasikan, iaitu saat yang tepat bagi pendengar yang mengikat alamat yang diberikan. route-up berjalan selepas laluan dipasang, tertakluk kepada sebarang kelewatan laluan yang dikonfigurasikan, dan sesuai untuk kerja yang memerlukan peringkat laluan selesai. Kedua-duanya tidak membuktikan bahawa aplikasi jauh menjawab. Memilih antara keduanya ialah soal apa yang diperlukan perkhidmatan, bukan soal cangkuk mana yang kedengaran lebih siap.

Dengan persist-tun, mula semula menggunakan semula peranti, jadi up tidak berjalan semula melainkan up-restart ditetapkan. Pilihan itu mendayakan skrip up untuk kitaran hayat mula semula yang didokumenkan, dan persekitarannya dikurangkan berbanding permulaan pertama. Skrip yang menganggap persekitaran penuh berfungsi pada sambungan pertama dan gagal pada sambungan seterusnya.

Hantar tindakan tanpa menunggunya

Cangkuk yang memanggil systemctl restart secara segerak boleh menemui kebuntuan dengan unit yang urutannya menunggu terowong. systemctl --no-block try-restart vpn-dependent.service memasukkan kerja ke dalam baris gilir dan kembali, yang menghalang cangkuk daripada menyekat sambungan yang sedang ditanggapinya. try-restart bertindak hanya pada unit yang berjalan, manakala restart turut memulakan unit yang tidak aktif; pilih dengan sengaja, bukan kerana kebiasaan.

Memasukkan ke baris gilir bukan pengesahan. Cangkuk mengembalikan kejayaan sebaik sahaja kerja diterima, jadi pemeriksaan mesti berlaku dalam jurnal unit sasaran atau dalam keadaan pendengarnya yang sebenar.

Dasar mula semula tinggal dalam unit, bukan dalam cangkuk

Unit oneshot dengan RemainAfterExit=yes kekal aktif selepas perintahnya keluar, dan permintaan mula kedua tidak melakukan apa-apa kerana systemd menganggapnya sudah dimulakan. Itu sifat yang perlu direka bentuk, bukan kecacatan yang dielakkan dengan panggilan mula berulang. Jika tindakan mesti berjalan bagi setiap sambungan, unit memerlukan bentuk yang membenarkannya.

After= menyusun unit, dan BindsTo= mengikat jangka hayat, tetapi kedua-duanya tidak bermaksud 'mula semula ini setiap kali VPN menyambung semula'. Unit yang terikat pada terowong berhenti apabila terowong berhenti; ia tidak memulakan semula dirinya apabila terowong kembali melainkan sesuatu memulakannya semula.

Uji tiga penyambungan semula, bukan satu

But sejuk, mula semula klien penuh dan penyambungan semula lembut masing-masing melatih laluan berbeza. Penyambungan semula lembut ialah yang mendedahkan up-restart yang hilang, persekitaran yang dikurangkan atau unit peranti yang tidak pernah menjadi tidak aktif. Jalankan ketiga-tiganya dan sahkan kedua-dua arah: perkhidmatan bertindak apabila terowong naik, dan ia tidak dimulakan semula pada perubahan pautan tidak berkaitan seperti perayauan Wi-Fi.

Kekalkan laluan pemulihan bebas apabila perkhidmatan bersandar membawa akses pentadbiran anda sendiri. Cangkuk yang memulakan semula perkara yang anda sambungkan ialah perubahan yang boleh mengunci anda di luar.

Artikel berkaitan