OpenVPN terus mencoba ulang setelah kesalahan TLS: cara menghentikannya
Kegagalan TLS diulang secara default, sehingga klien berputar dan kesalahan pertama hilang dari pandangan. tls-exit membuatnya keluar; periksa apa yang memulainya kembali.
Klien terhubung, gagal selama negosiasi TLS, menunggu, lalu mencoba server yang sama lagi dengan hasil yang sama. Di bawah pengawas yang memulai ulang proses gagal, percobaan itu menjadi putaran tanpa akhir di jurnal, dan baris diagnostik pertama hilang dari jangkauan. OpenVPN menyediakan opsi yang mengubah kegagalan negosiasi itu menjadi keluar yang terlihat alih-alih percobaan lain. Ini pengaturan diagnostik dan pengawasan, bukan perbaikan, jadi pasangkan dengan kebijakan yang benar-benar membiarkan proses tetap berhenti.
Siklus yang menyembunyikan kesalahan pertama
Yang Anda lihat adalah blok berulang, bukan satu kegagalan: percobaan koneksi, kesalahan TLS, jeda, lalu urutan yang sama. Setiap pengulangan mendorong baris asli makin ke atas di jurnal. Jika unit memulai ulang saat gagal, siklus dapat berlangsung berjam-jam tanpa ada yang membaca penyebabnya. Gejalanya adalah putaran itu, meski cacat dasarnya adalah satu masalah negosiasi.
Sesi interaktif menoleransi ini karena kegagalan sementara bisa hilang pada percobaan berikutnya. Koneksi otomatis tidak bisa menanggung optimisme yang sama: proses harus berhenti agar manusia atau monitor dapat melihat statusnya.
Sebelum mengubah apa pun, tangkap satu siklus penuh. Catat alamat jarak jauh, tahap TLS yang disebut dalam kesalahan, dan apakah proses itu keluar sama sekali.
Mesin percobaan ulang di balik putaran
Mencoba ulang adalah default karena beberapa batas waktu yang tidak terkait berbagi mesin yang sama. connect-retry mengatur jeda antar percobaan koneksi, connect-retry-max dapat membatasi seberapa sering setiap entri jarak jauh dicoba, dan resolv-retry mengatur pencarian nama berulang. Kegagalan negosiasi TLS mencapai mesin itu sebagai peristiwa transport, jadi klien menjadwalkan percobaan lain alih-alih melapor. Nilai default membantu pada tautan yang tidak stabil dan merugikan pada cacat yang tidak bisa pulih.
Opsi --tls-exit hanya mengubah kasus negosiasi. Manual menjelaskannya sebagai keluar saat negosiasi TLS gagal, yang lebih sempit daripada keluar pada setiap kesalahan. Batas waktu, kegagalan resolver, dan penolakan autentikasi mempertahankan perilakunya sendiri.
Membuat klien keluar saat gagal TLS
Letakkan tls-exit di profil yang benar-benar dimuat klien, atau berikan --tls-exit saat memulainya, lalu jalankan sekali di latar depan. Baca status keluar dan baris log terakhir, karena status itulah yang ditindaklanjuti pengawas. Keluar bukan nol setelah kegagalan negosiasi adalah hasil yang dimaksud. Jika proses terus mencoba ulang alih-alih berakhir, opsi itu tidak ada di profil yang benar-benar dimuat klien.
Pengawas menentukan apakah keluar itu terlihat. Unit systemd dengan Restart=always atau Restart=on-failure memulai klien lagi, sehingga putaran berlanjut dan opsi tampak tidak melakukan apa pun. Periksa kebijakannya 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 tetap berhenti, dan Restart=on-failure tetap memulai ulang setelah status bukan nol. Jika Anda ingin kegagalan terlihat tetapi layanan pulih dari kerusakan yang tidak terkait, setel Restart=on-failure dan gunakan StartLimitBurst dan StartLimitIntervalSec untuk menghentikan badai mulai ulang. Lalu baca status unit untuk memastikan kode keluar terakhir: systemctl status melaporkannya, dan jurnal menyimpan kesalahan pertama di atas mulai ulang.
Tuliskan keputusan itu di unit atau di catatan profil. Profil yang keluar saat gagal TLS tampak seperti kecelakaan bagi orang berikutnya kecuali alasannya dicatat. Nyatakan kegagalan mana yang harus menghentikan proses dan mana yang harus dicoba ulang.
Membuktikannya dengan titik akhir sekali pakai
Untuk melihat perilakunya sebelum memercayainya, salin profil dan arahkan salinannya ke titik akhir yang menerima koneksi TCP tetapi tidak pernah berbicara OpenVPN. Pendengar yang menjawab lalu diam sudah cukup. Dengan tls-exit, klien seharusnya berakhir saat jabat tangan gagal; tanpanya, profil yang sama seharusnya terus berputar. Gunakan salinannya, jangan pernah profil yang berfungsi.
Bandingkan kedua eksekusi berdasarkan status keluar dan baris kesalahan pertama, bukan berdasarkan berapa lama masing-masing berlangsung. Status memberi tahu apakah opsi terpicu, dan baris pertama memberi tahu tahap mana yang gagal.
Hapus profil uji setelah selesai. Salinan dengan titik akhir yang sengaja salah adalah jebakan bagi siapa pun yang nanti menjalankan setiap profil di direktori.
Tahap yang tidak pernah dijangkau opsi ini
Penolakan autentikasi adalah tahap yang lebih akhir. Jika server mengevaluasi akun dan menolaknya, TLS sudah dinegosiasikan, jadi tls-exit tidak terpicu. Pengaturan percobaan ulang autentikasi adalah tempat berikutnya untuk dilihat, dan alasan server lebih penting daripada baris terakhir klien. Kata sandi yang salah dan sertifikat yang hilang dapat menghasilkan pesan serupa di sisi klien.
Rute yang hilang, resolver yang salah, atau gateway yang tidak terjangkau juga di luar opsi ini, karena bukan kegagalan negosiasi. Kehilangan paket diam-diam adalah kasus yang paling tidak jelas: tergantung seberapa jauh pertukaran berlangsung, klien dapat melaporkan kegagalan negosiasi atau sekadar kehabisan waktu.
Pertahankan perbedaan itu di catatan Anda. Pengaturan ini untuk diagnosis dan pengawasan, bukan perbaikan, jadi tidak memperbaiki ketidakcocokan cipher, masalah sertifikat, atau port yang salah. Perbaiki dulu penyebab negosiasi yang gagal, lalu putuskan apakah keluar segera masih cocok untuk penerapan.