Hook tidur sahaja tidak akan mengembalikan VPN
Hook yang keluar dengan sifar hanya membuktikan bahawa skrip telah dijalankan. Letakkan selepas rangkaian, gunakan identiti yang betul dan semak sama ada profil itu layak.
Letakkan arahan sambung semula dalam hook tidur dan masalahnya kelihatan selesai. Ia hanya selesai jika hook berjalan selepas rangkaian wujud, sebagai identiti yang dikenali klien, melalui laluan yang benar-benar dilaksanakan klien. Kebanyakan kegagalan selepas bangun ialah salah satu daripada tiga itu, dan tiada satu pun muncul sebagai ralat dalam hook itu sendiri. Hook tetap memulangkan kejayaan.
Skrip yang keluar dengan sifar tidak memberitahu anda apa-apa tentang sama ada terowong kembali.
Hook berjalan, kemudian apa?
#!/bin/sh
case "$1" in
pre)
vpn-client disconnect
;;
post)
vpn-client connect
;;
esac
Setiap peristiwa memanggil hook dua kali, sebelum dan selepas peralihan, memberikan fasa dan nama peristiwa. Ia berjalan sebagai root dengan persekitaran minimum, jadi laluan mutlak diperlukan dan tiada pemboleh ubah sesi desktop patut dijangka. Kedua-dua panggilan yang kembali cepat hanya mengatakan skrip telah dijalankan. Sama ada profil naik selepas itu ialah pemerhatian berasingan dan memerlukan buktinya sendiri dalam log.
Anggap argumen fasa sebagai bahagian reka bentuk. Percubaan sambung semula dalam fasa pre berlaku ketika mesin hampir kehilangan segala-galanya, dan ia tidak boleh berjaya.
Root, persekitaran minimum, pengguna salah
Jika klien menyimpan token log masuk bagi setiap pengguna, menjalankan hook sebagai root meninggalkannya tanpa apa-apa untuk dibentangkan. Periksa keadaan di bawah identiti yang benar-benar digunakan hook, bukan yang anda uji dari terminal desktop. Sesetengah binaan juga meninggalkan daemon yang memegang antara muka selepas pemutusan, jadi sambung semula mendarat dalam keadaan lapuk, dan membersihkan proses terlebih dahulu memulihkannya dengan kos penutupan yang tidak bersih. Tiada satu pun tingkah laku kelihatan jika anda hanya menguji laluan bahagia.
Tulis hook dengan laluan mutlak, kekalkan ia milik root dan boleh laku, dan log apa yang dilakukannya. Tanpa log itu siasatan seterusnya bermula dari sifar.
Sambung automatik bukan laluan VPN
NetworkManager menawarkan dua mekanisme pengaktifan: bendera sambung automatik pada profil, dan sambungan sekunder yang bermula apabila profil primer diaktifkan. Jenis peranti asli melaksanakan yang pertama; pemalam VPN secara sejarah hanya melaksanakan yang kedua, jadi menandakan sambung automatik pada profil OpenVPN mungkin tidak memberi kesan sama sekali. Periksa kedua-dua sifat, kemudian lampirkan VPN sebagai sekunder profil Wi-Fi atau Ethernet.
[Unit] PartOf=NetworkManager.service Requires=NetworkManager-wait-online.service After=NetworkManager-wait-online.service
Antara muka WireGuard yang diuruskan oleh unit systemd memerlukan drop-in itu dan bukan hook, disusun selepas rangkaian dalam talian.
Tunggu rangkaian, dengan had
timer=1 while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do sleep 1; timer=$((timer+1)) [ $timer -ge 300 ] && exit 0 done nmcli connection up "work-vpn"
Semasa bangun, terowong mungkin diminta ketika Wi-Fi masih menyambung semula, yang menjadikan sebarang tidur tetap satu tekaan. Tunggu alamat yang boleh dicapai, kemudian naikkan profil, dan hadkan tunggu supaya hook tidak dapat menahan laluan bangun terbuka tanpa had. Utamakan nama profil daripada indeks berangka, dan jika profil yang betul berbeza mengikut rangkaian, biarkan terowong yang sihat merekod pilihannya ke fail terlebih dahulu.
Lindungi diri daripada ribut mula semula juga, dengan mengira percubaan dan berhenti. Pemantau yang bertindak balas pada setiap siasatan gagal menjadikan satu gangguan sebagai gelung.
Gantung sekali, kemudian baca jurnal untuk output hook itu sendiri. Itulah satu-satunya ujian yang membuktikan susunan.