OpenVPN terus mencuba semula selepas ralat TLS: cara menghentikannya
Kegagalan TLS dicuba semula secara lalai, jadi klien berputar dan ralat pertama hilang dari pandangan. tls-exit memaksanya keluar; semak apa yang memulakannya semula.
Klien menyambung, gagal semasa rundingan TLS, menunggu dan mencuba pelayan yang sama semula dengan hasil yang sama. Di bawah penyelia yang memulakan semula proses yang gagal, cubaan itu menjadi gelung tanpa henti dalam jurnal, dan baris diagnostik pertama hilang dari jangkauan. OpenVPN menyediakan pilihan yang menukar kegagalan rundingan itu kepada keluar yang kelihatan dan bukannya satu lagi cubaan. Ini tetapan diagnostik dan penyeliaan, bukan pembaikan, jadi pasangkannya dengan dasar yang benar-benar membiarkan proses itu kekal berhenti.
Kitaran yang menyembunyikan ralat pertama
Apa yang anda lihat ialah blok berulang dan bukan satu kegagalan: cubaan sambungan, ralat TLS, jeda dan kemudian urutan yang sama. Setiap ulangan menolak baris asal lebih tinggi dalam jurnal. Jika unit dimulakan semula apabila gagal, kitaran boleh berterusan berjam-jam tanpa sesiapa membaca puncanya. Gejalanya ialah gelung itu, walaupun kecacatan asasnya ialah satu masalah rundingan.
Sesi interaktif bertolak ansur dengan ini kerana kegagalan sementara mungkin hilang pada cubaan seterusnya. Sambungan automatik tidak boleh menanggung optimisme yang sama: proses mesti berhenti supaya manusia atau pemantau dapat melihat statusnya.
Sebelum mengubah apa-apa, tangkap satu kitaran penuh. Catat alamat jauh, peringkat TLS yang dinamakan dalam ralat dan sama ada proses itu keluar sama sekali.
Jentera cubaan semula di sebalik gelung
Cubaan semula ialah lalai kerana beberapa tamat masa yang tidak berkaitan berkongsi jentera yang sama. connect-retry menetapkan jurang antara cubaan sambungan, connect-retry-max boleh mengehadkan berapa kerap setiap entri jauh dicuba, dan resolv-retry mengawal carian nama berulang. Kegagalan rundingan TLS sampai ke jentera itu sebagai peristiwa pengangkutan, jadi klien menjadualkan cubaan lain dan bukannya melaporkan. Nilai lalai membantu pada pautan yang tidak stabil dan memudaratkan pada kecacatan yang tidak boleh sembuh.
Pilihan --tls-exit hanya mengubah kes rundingan. Manual menerangkannya sebagai keluar apabila rundingan TLS gagal, yang lebih sempit daripada keluar pada setiap ralat. Tamat masa, kegagalan penyelesai dan penolakan pengesahan mengekalkan tingkah laku mereka sendiri.
Membuat klien keluar apabila gagal TLS
Letakkan tls-exit dalam profil yang benar-benar dimuatkan oleh klien, atau berikan --tls-exit semasa memulakannya, dan jalankannya sekali di latar hadapan. Baca status keluar dan baris log terakhir, kerana status itulah yang ditindakbalas oleh penyelia. Keluar bukan sifar selepas kegagalan rundingan ialah hasil yang dimaksudkan. Jika proses terus mencuba semula dan bukan berakhir, pilihan itu tiada dalam profil yang benar-benar dimuatkan oleh klien.
Penyelia menentukan sama ada keluar itu kelihatan. Unit systemd dengan Restart=always atau Restart=on-failure memulakan klien semula, jadi gelung berterusan dan pilihan itu kelihatan tidak melakukan apa-apa. Semak dasar sebelum menyalahkan klien:
systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager
Restart=no membiarkan proses kekal berhenti, dan Restart=on-failure masih memulakan semula selepas status bukan sifar. Jika anda mahu kegagalan itu kelihatan tetapi perkhidmatan pulih daripada ranap yang tidak berkaitan, tetapkan Restart=on-failure dan gunakan StartLimitBurst dan StartLimitIntervalSec untuk menghentikan badai permulaan semula. Kemudian baca status unit untuk mengesahkan kod keluar terakhir: systemctl status melaporkannya, dan jurnal menyimpan ralat pertama di atas permulaan semula.
Tulis keputusan itu dalam unit atau dalam nota profil. Profil yang keluar apabila gagal TLS kelihatan seperti kemalangan kepada orang seterusnya kecuali sebabnya direkodkan. Nyatakan kegagalan mana yang harus menghentikan proses dan mana yang harus dicuba semula.
Membuktikannya dengan titik akhir sekali guna
Untuk melihat tingkah laku sebelum mempercayainya, salin profil dan halakan salinan itu ke titik akhir yang menerima sambungan TCP tetapi tidak pernah bercakap OpenVPN. Pendengar yang menjawab dan kemudian berdiam sudah cukup. Dengan tls-exit, klien sepatutnya berakhir apabila jabat tangan gagal; tanpanya, profil yang sama sepatutnya terus berputar. Gunakan salinan itu, jangan sekali-kali profil yang berfungsi.
Bandingkan kedua-dua larian melalui status keluar dan baris ralat pertama, bukan melalui berapa lama setiap satu bertahan. Status memberitahu sama ada pilihan itu tercetus, dan baris pertama memberitahu peringkat mana yang gagal.
Buang profil ujian apabila selesai. Salinan dengan titik akhir yang sengaja salah ialah perangkap bagi sesiapa yang kemudiannya memulakan setiap profil dalam direktori.
Peringkat yang tidak pernah dicapai oleh pilihan ini
Penolakan pengesahan ialah peringkat yang lebih lewat. Jika pelayan menilai akaun itu dan menolaknya, TLS sudah dirundingkan, jadi tls-exit tidak tercetus. Tetapan cubaan semula pengesahan ialah tempat seterusnya untuk dilihat, dan sebab pelayan lebih penting daripada baris terakhir klien. Kata laluan yang salah dan sijil yang hilang boleh menghasilkan mesej serupa di sebelah klien.
Laluan yang hilang, penyelesai yang salah atau get laluan yang tidak dapat dicapai juga di luar pilihan ini, kerana ia bukan kegagalan rundingan. Kehilangan paket senyap ialah kes yang paling tidak jelas: bergantung pada sejauh mana pertukaran itu berjalan, klien mungkin melaporkan kegagalan rundingan atau hanya tamat masa.
Kekalkan perbezaan itu dalam nota anda. Tetapan ini untuk diagnosis dan penyeliaan dan bukan pembaikan, jadi ia tidak membaiki ketidakpadanan sifer, masalah sijil atau port yang salah. Baiki dahulu punca rundingan yang gagal, kemudian tentukan sama ada keluar segera masih sesuai untuk penggunaan.