Systemd lawan NetworkManager: siapa yang memulakan VPN semasa boot?
Tiga mekanisme boleh menaikkan profil Ubuntu yang sama, masing-masing dengan pencetus berbeza. Bandingkan ketiganya, kekalkan satu pemilik dan persarakan pertindihan.
Dua mesin Ubuntu daripada imej yang sama, satu profil VPN, hasil bertentangan semasa log masuk: pada satu mesin terowong sudah naik sebelum desktop muncul, pada mesin lain ia tidak pernah naik. Profil bukan pemboleh ubah di sini. Yang berbeza ialah komponen mana antara tiga yang diarahkan memulakannya, dan ketiga-tiganya tidak berkongsi satu suis.
Membandingkannya bersebelahan lebih cepat daripada meneka. Setiap satunya gagal dengan cara yang boleh dikenali, dan itulah yang menjadikan perbandingan ini berbaloi.
Tiga pemula dengan tiga pencetus berbeza
Perkhidmatan openvpn berpeket ialah laluan paling lama. Skrip initnya membaca senarai autostart daripada /etc/default/openvpn. Jika senarai itu dikomentari atau dibiarkan kosong, skrip memulakan setiap konfigurasi yang ditemuinya dalam direktori itu dan bukan satu-satunya yang anda tambah. Satu fail yang ditambah untuk satu terowong boleh menaikkan beberapa tanpa disedari.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
Baris kedua ialah yang orang salah konfigurasi. NetworkManager memegang profil yang diimport dan akan memulakannya, tetapi hanya sebagai sekunder kepada sambungan lain, bermakna pencetus itu milik pautan rangkaian dan bukan VPN.
Bandingkan kos persediaan dan skopnya
Laluan skrip init berharga satu baris dan meliputi setiap konfigurasi pada mesin. Itu sesuai untuk penghala dan salah untuk komputer riba yang menyertai rangkaian berbeza. Laluan NetworkManager berharga satu carian UUID dan mengikat terowong kepada satu sambungan asas. Ia naik pada SSID pejabat dan kekal turun pada rangkaian hotel.
Unit yang ditulis tangan paling mahal dan memberi kawalan paling banyak, termasuk susunan berbanding perkhidmatan lain. Skop ialah faktor penentu. Jika mesin mempunyai satu rangkaian dan satu terowong, perkhidmatan berpeket itu jujur dan boleh dijangka. Jika terowong perlu mengikut rangkaian Wi-Fi tertentu, sekunder ialah satu-satunya daripada tiga yang menyatakan syarat itu tanpa skrip tambahan.
Pilih satu pemilik dan buang yang lain
Profil yang dimulakan oleh dua pemilik menghasilkan masa yang berubah antara boot, yang lebih buruk daripada mana-mana mekanisme itu sahaja. Pilih pemiliknya, kemudian lumpuhkan laluan pesaing dengan sengaja, bukan secara tidak sengaja.
# 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 laluan berpeket yang dipersarakan, lakukan dalam urutan yang betul: tetapkan AUTOSTART kepada none, jalankan systemctl daemon-reload supaya unit yang dijana mengambil senarai baharu, kemudian lumpuhkan instans templat yang anda tidak mahu lagi. Melangkau muat semula membiarkan unit lama kekal aktif, dan ia kelihatan seolah-olah perubahan itu tidak memberi kesan.
Hentian yang tergantung ialah masalah berasingan dengan jawapan terbatas. TimeoutStopSec mengehadkan berapa lama systemd menunggu sebelum menghantar SIGKILL. Fail drop-in ialah tempat yang betul untuk menetapkannya, kerana menyunting unit berpeket akan kehilangan perubahan itu pada peningkatan seterusnya.
Sahkan apa yang benar-benar dimulakan
But semula dan baca buktinya dan bukannya mempercayai fail konfigurasi. Unit yang memiliki terowong akan menunjukkan keadaan aktif dan cap masa mula yang sepadan dengan boot, dan antara muka VPN akan wujud sebelum anda log masuk.
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 lagi pemeriksaan wajar di sini: pastikan ExecStart unit menunjuk kepada binari yang anda fikirkan. Klien yang dikompilasi secara setempat atau pakej snap selalunya memerlukan laluan eksplisit atau pembalut snap run, kerana systemd tidak mewarisi susunan carian shell anda. Membandingkan command -v openvpn dengan fail unit menyelesaikannya dalam beberapa saat.
Tulis pemilik yang dipilih dalam nota mesin, di sebelah nama profil. Orang seterusnya yang menyahpepijat terowong yang hilang akan bermula dari baris itu dan bukan mengulangi perbandingan.