Dua mesin Ubuntu dari image yang sama, satu profil VPN, hasil berlawanan saat login: di satu mesin terowongan sudah naik sebelum desktop muncul, di mesin lain terowongan tidak pernah naik. Profil bukan variabelnya di sini. Yang berbeda adalah komponen mana dari tiga komponen yang diperintahkan menyalakannya, dan ketiganya tidak berbagi satu sakelar.

Membandingkannya berdampingan lebih cepat daripada menebak. Masing-masing gagal dengan cara yang bisa dikenali, dan itulah yang membuat perbandingan ini layak dilakukan.

Tiga starter dengan tiga pemicu berbeda

Layanan openvpn terpaket adalah jalur tertua. Skrip init-nya membaca daftar autostart dari /etc/default/openvpn. Jika daftar itu dikomentari atau dibiarkan kosong, skrip menyalakan setiap konfigurasi yang ditemukannya di direktori itu, bukan satu konfigurasi yang Anda tambahkan. Satu berkas yang ditambahkan untuk satu terowongan bisa diam-diam menaikkan beberapa.

StarterWhat triggers itTypical failure
Init script and templated unitsBoot, plus anything in the autostart listStarts every config, not the one you meant
NetworkManager secondaryActivation of the base Wi-Fi or Ethernet profileNothing happens until that base link comes up
Hand-written unit or wrapperWhatever its WantedBy and ExecStart sayRuns a different binary or environment than your shell

Baris kedua adalah yang salah dikonfigurasi orang. NetworkManager memegang profil yang diimpor dan akan menyalakannya, tetapi hanya sebagai sekunder dari koneksi lain, artinya pemicunya milik tautan jaringan, bukan milik VPN.

Bandingkan biaya penyiapan dan cakupannya

Jalur skrip init memakan satu baris dan mencakup setiap konfigurasi di mesin. Itu tepat untuk router dan salah untuk laptop yang bergabung ke jaringan berbeda. Jalur NetworkManager memakan satu pencarian UUID dan mengikat terowongan ke satu koneksi dasar. Ia naik di SSID kantor dan tetap turun di jaringan hotel.

Unit yang ditulis tangan memakan biaya paling besar dan memberi kendali paling besar, termasuk urutan terhadap layanan lain. Cakupan adalah faktor penentunya. Jika mesin memiliki satu jaringan dan satu terowongan, layanan terpaket itu jujur dan bisa diprediksi. Jika terowongan harus mengikuti jaringan Wi-Fi tertentu, sekunder adalah satu-satunya dari ketiganya yang menyatakan syarat itu tanpa skrip tambahan.

Pilih satu pemilik dan hapus yang lain

Profil yang dinyalakan oleh dua pemilik menghasilkan waktu yang berubah antar boot, yang lebih buruk daripada salah satu mekanisme sendirian. Pilih pemiliknya, lalu matikan jalur pesaing dengan sengaja, bukan karena kecelakaan.

# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'

# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"

Jika jalur terpaket yang dipensiunkan, lakukan dengan urutan yang benar: setel AUTOSTART ke none, jalankan systemctl daemon-reload agar unit hasil generasi mengambil daftar baru, lalu nonaktifkan instans templat yang tidak Anda inginkan lagi. Melewati pemuatan ulang membuat unit lama tetap aktif, sehingga tampak seolah perubahannya tidak berpengaruh.

Penghentian yang menggantung adalah masalah terpisah dengan jawaban yang terbatas. TimeoutStopSec membatasi berapa lama systemd menunggu sebelum mengirim SIGKILL. Berkas drop-in adalah tempat yang tepat untuk menyetelnya, karena menyunting unit terpaket menghilangkan perubahan itu pada peningkatan berikutnya.

Verifikasi apa yang benar-benar menyala

Boot ulang dan baca buktinya alih-alih memercayai berkas konfigurasi. Unit yang memiliki terowongan akan menunjukkan status aktif dan stempel waktu mulai yang cocok dengan boot, dan antarmuka VPN sudah ada sebelum Anda login.

systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0

Satu pemeriksaan lagi pantas ada di sini: pastikan ExecStart unit menunjuk ke biner yang Anda kira. Klien yang dikompilasi lokal atau paket snap sering memerlukan jalur eksplisit atau pembungkus snap run, karena systemd tidak mewarisi urutan pencarian shell Anda. Membandingkan command -v openvpn dengan berkas unit menyelesaikannya dalam hitungan detik.

Tuliskan pemilik yang dipilih ke catatan mesin, di samping nama profil. Orang berikutnya yang men-debug terowongan yang hilang akan mulai dari baris itu alih-alih mengulang perbandingan.

Artikel terkait