OpenVPN: bind tempatan gagal semasa but — tunggu atau cuba semula
Apabila alamat tempatan belum aktif, OpenVPN tidak boleh mengikat. Bandingkan tunggu terbatas dengan dasar permulaan semula, dan lihat mengapa network-online.target bukan jaminan.
Bagi pelayan OpenVPN yang tidak bermula semasa but, dua pembetulan ditawarkan: tunggu alamat, atau biarkan perkhidmatan mencuba semula sehingga bind berjaya. Kedua-duanya menangani gejala yang sama dengan tingkah laku kegagalan yang berbeza. Menunggu mengekod prasyarat tertentu dan gagal dengan lantang apabila ia tiada; cuba semula menyembunyikan prasyarat itu dan terus mencuba. Yang mana sesuai untuk unit anda bergantung pada sama ada alamat itu kebergantungan yang direka atau kebetulan masa.
Kedua-duanya lebih baik daripada tidur tetap, yang tidak menunggu apa-apa dan tidak melaporkan apa yang ditunggunya.
Apa yang sebenarnya dituntut oleh pilihan local
local menamakan alamat yang daemon ikat soketnya, dan mengikat pada alamat yang belum wujud gagal serta-merta dengan ralat tentang alamat yang diminta. Apabila pilihan tiada, daemon mendengar pada semua alamat, sebab itu profil yang sama berfungsi pada mesin yang antara mukanya belum naik: ia mendengar di mana-mana dan bukan pada satu alamat yang anda namakan. Perbezaan itulah keseluruhan kegagalan, dan ia kekal tidak kelihatan sehingga but semula.
Keperluannya bukanlah antara muka itu naik dalam erti kata umum. Alamat mesti diberikan kepada antara muka yang betul pada saat ikatan, dan ia mesti antara muka asas dan bukan terowong yang daemon sama akan cipta kemudian. Semakan yang dijalankan beberapa minit selepas log masuk tidak membuktikan apa-apa tentang urutan but.
Menunggu alamat berbanding mencuba semula ikatan
Menunggu bermaksud ExecStartPre yang meninjau sehingga alamat muncul, dengan bilangan percubaan terbatas dan keluar bukan sifar apabila masa tamat. Cuba semula bermaksud membiarkan proses utama gagal dan meminta pengurus perkhidmatan memulakannya semula, contohnya Restart=on-failure dengan RestartSec=5. Yang pertama melaporkan prasyarat yang hilang sebagai unit gagal, manakala yang kedua melaporkannya sebagai siri permulaan semula yang akhirnya berhenti, yang lebih bising dalam jurnal tetapi bertahan menghadapi alamat yang tiba lewat atas sebab yang tidak dapat anda ramalkan.
Utamakan menunggu apabila alamat ialah kebergantungan yang direka, dan utamakan cuba semula apabila alamat biasanya muncul tetapi masanya berbeza-beza. Menggabungkan keduanya adalah wajar: tunggu terbatas meliputi kes biasa dan dasar permulaan semula meliputi pengecualian. Apa yang tidak boleh dilakukan oleh mana-mana daripadanya ialah berjalan selamanya, kerana unit yang mencuba semula tanpa henti menyembunyikan salah konfigurasi dan bukannya melaporkannya.
Mengapa network-online.target tidak mencukupi
network-online.target menjanjikan apa sahaja yang dimaksudkan oleh pelaksanaan rangkaian aktif dengan online, dan tidak lebih. Dengan systemd-networkd, systemd-networkd-wait-online menentukan bila sasaran itu dicapai, dan tanggapan lalai tentang online boleh dipenuhi sebelum alamat khusus anda wujud. Di bawah NetworkManager, perkhidmatan wait-online menggunakan peraturannya sendiri. Menyusun selepas sasaran ialah garis dasar yang kukuh, bukan jaminan bahawa satu alamat, jawapan DNS atau rakan jauh sudah sedia.
Penaakulan yang sama menyingkirkan alternatif biasa. Entri autostart desktop menunggu sesi pengguna yang mungkin tidak pernah dibuka pada pelayan, dan arahan cron tertunda menambah masa berlalu tanpa menamakan sumber yang diharapkannya muncul. Kedua-duanya boleh kelihatan berjaya selama berbulan-bulan dan kemudian gagal pada satu but yang penting.
Periksa ikatan selepas but sejuk
Sahkan dengan but sejuk sebenar dan bukan permulaan semula perkhidmatan, kerana permulaan semula mewarisi alamat yang urutan but terpaksa cipta. Selepas but, ss -lntp atau ss -lunp menunjukkan alamat tempatan yang sebenarnya diikat oleh setiap pendengar, dan journalctl -b -u openvpn-server@server menunjukkan sama ada percubaan pertama gagal. Bandingkan alamat yang diikat dengan yang ada dalam profil, kemudian ulangi perbandingan selepas sambungan semula rangkaian.
Jika profil tidak pernah memerlukan alamat tetap, membuang local ialah pemudahan yang sah, tetapi jadikannya keputusan keselamatan dan bukan tabiat penyelesaian masalah.
Melebarkan pendengar mengubah siapa yang boleh mencapainya, jadi pasangkan perubahan itu dengan dasar firewall yang sepatutnya mengehadkannya. Perkhidmatan yang bermula dengan boleh dipercayai pada setiap antara muka belum menyelesaikan masalah asal; ia telah memindahkan masalah ke tepi rangkaian.