Taruh perintah sambung ulang di hook tidur dan masalahnya tampak selesai. Ini hanya selesai jika hook berjalan setelah jaringan ada, sebagai identitas yang dikenali klien, melalui jalur yang benar-benar diterapkan klien. Sebagian besar kegagalan setelah bangun adalah salah satu dari ketiganya, dan tidak satu pun muncul sebagai kesalahan di hook itu sendiri. Hook tetap mengembalikan sukses.

Skrip yang keluar dengan nol tidak memberi tahu Anda apa pun tentang apakah terowongan kembali.

Hook berjalan, lalu apa?

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

Setiap peristiwa memanggil hook dua kali, sebelum dan sesudah transisi, memberikan fase dan nama peristiwa kepadanya. Ini berjalan sebagai root dengan lingkungan minimal, jadi jalur absolut diperlukan dan tidak ada variabel sesi desktop yang boleh diharapkan. Kedua pemanggilan yang kembali cepat hanya mengatakan bahwa skrip dijalankan. Apakah profil naik setelahnya adalah pengamatan terpisah dan butuh buktinya sendiri di log.

Perlakukan argumen fase sebagai bagian dari desain. Upaya sambung ulang pada fase pre terjadi saat mesin akan kehilangan segalanya, dan itu tidak mungkin berhasil.

Root, lingkungan minimal, pengguna salah

Jika klien menyimpan token login per pengguna, menjalankan hook sebagai root membuatnya tidak punya apa pun untuk ditunjukkan. Periksa keadaan di bawah identitas yang benar-benar dipakai hook, bukan yang Anda uji dari terminal desktop. Beberapa build juga meninggalkan daemon yang memegang antarmuka setelah pemutusan, sehingga sambung ulang mendarat di keadaan usang, dan membersihkan prosesnya lebih dulu memulihkannya dengan biaya penutupan yang tidak bersih. Tidak satu pun perilaku terlihat jika Anda hanya menguji jalur bahagia.

Tulis hook dengan jalur absolut, pertahankan milik root dan dapat dieksekusi, dan catat apa yang dilakukannya. Tanpa log itu penyelidikan berikutnya mulai dari nol.

Sambung otomatis bukan jalur VPN

NetworkManager menawarkan dua mekanisme aktivasi: bendera sambung otomatis pada profil, dan koneksi sekunder yang mulai saat profil primer diaktifkan. Jenis perangkat asli menerapkan yang pertama; plugin VPN secara historis hanya menerapkan yang kedua, sehingga mencentang sambung otomatis pada profil OpenVPN bisa sama sekali tidak berpengaruh. Periksa kedua properti, lalu lampirkan VPN sebagai sekunder dari profil Wi-Fi atau Ethernet.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

Antarmuka WireGuard yang dikelola unit systemd memerlukan drop-in itu alih-alih hook, diurutkan setelah jaringan online.

Tunggu jaringan, dengan batas

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"

Saat bangun, terowongan bisa diminta sementara Wi-Fi masih menyambung ulang, yang membuat tidur tetap apa pun menjadi tebakan. Tunggu alamat yang dapat dijangkau, lalu naikkan profil, dan batasi tunggu agar hook tidak dapat menahan jalur bangun tetap terbuka tanpa batas. Utamakan nama profil daripada indeks numerik, dan jika profil yang benar berbeda menurut jaringan, biarkan terowongan yang sehat mencatat pilihannya ke berkas terlebih dahulu.

Lindungi juga dari badai restart, dengan menghitung percobaan dan berhenti. Pengawas yang bereaksi pada setiap pemeriksaan gagal mengubah satu gangguan menjadi lingkaran.

Tangguhkan sekali, lalu baca jurnal untuk keluaran hook itu sendiri. Itu satu-satunya uji yang membuktikan urutannya.

Artikel terkait