Menyambungkan ulang klien OpenVPN: tiga kendali, tiga cakupan
Menjatuhkan satu sesi, memberi tahu setiap klien UDP, dan memulai ulang daemon adalah operasi berbeda. Tentukan cakupan lebih dulu, lalu verifikasi sesi baru.
Seseorang meminta klien VPN disambungkan ulang, dan permintaan itu bisa berarti tiga hal berbeda. Bisa berarti menjatuhkan satu sesi yang terautentikasi, memberi tahu setiap klien bahwa server UDP akan pergi, atau memulai ulang daemon itu sendiri. Masing-masing punya radius dampak berbeda, dan pilihan yang salah mengubah perbaikan untuk satu pengguna menjadi gangguan layanan. Cakupannya adalah keputusan, dan perintahnya mengikuti dari itu.
Tanyakan siapa yang harus terdampak sebelum menanyakan kendali mana yang dipakai.
Satu instans: antarmuka manajemen
Antarmuka manajemen yang dikonfigurasi dapat mendaftar instans yang terhubung dan menjatuhkan tepat satu di antaranya. Setiap sesi membawa pengenal klien, dan client-kill CID menyasar pengenal itu alih-alih nama umum. Baca pengenal yang hidup dari keluaran status saat ini, karena nilai yang disalin dari log lama merujuk sesi yang sudah tidak ada. Menjatuhkan instans mengakhiri koneksi itu dan tidak yang lain.
Itu tidak menjamin koneksi baru. Apakah klien kembali bergantung pada pengaturan percobaan ulangnya, entri jarak jauh yang tersisa, persyaratan autentikasinya, dan apakah aplikasi pengawas masih berjalan. Klien yang kembali mendapat pengenal baru, dan karena itulah membandingkan pengenal adalah satu-satunya cara andal membedakan lama dari baru.
Pemberitahuan keluar UDP bukan perintah per klien
explicit-exit-notify adalah direktif konfigurasi tentang peristiwa keluar dan mulai ulang. Pada klien UDP, ia memberi tahu pihak lawan bahwa sesi berakhir, dan argumen numerik mengatur berapa kali pemberitahuan diulang. Saat server berjalan lewat UDP, ia mengirim pesan kendali mulai ulang ke klien yang terhubung, dan nilai yang didokumentasikan membedakan menyambung ulang ke server yang sama dari berpindah ke entri jarak jauh lain. Itu sinyal siklus hidup dengan audiens luas.
Tidak ada apa pun di dalamnya yang memilih klien sembarangan pada saat sembarangan. Memperlakukannya sebagai tombol sambung ulang menjangkau setiap sesi terhubung sekaligus.
Sinyal bekerja pada proses, bukan pada sesi
SIGUSR1 meminta proses yang berjalan memulai ulang koneksinya tanpa membaca ulang konfigurasi, dan opsi persistensi menentukan apa yang bertahan dari mulai ulang itu. SIGHUP melangkah lebih jauh: ia membaca ulang berkas konfigurasi dan membuka kembali sumber dayanya. SIGTERM dan SIGINT meminta penghentian yang tertib. Itu operasi tingkat proses: pada server banyak klien, itu memengaruhi setiap sesi yang dibawa proses, bukan yang disebut di tiket.
Saat proses berjalan di bawah manajer layanan, gunakan kendali milik manajer itu alih-alih mengirim sinyal ke PID yang Anda temukan di daftar proses. Baca unit untuk melihat sinyal apa yang dikirim manajer, karena mulai ulang dan muat ulang melakukan hal berbeda pada daemon yang sama.
Tentukan cakupan sebelum memilih kendali
Tiga pertanyaan menyelesaikannya. Siapa yang harus terdampak: satu pengguna, setiap klien satu server, atau daemon dan semua yang dibawanya. Apa yang harus bertahan: konfigurasi, keadaan terowongan, atau keduanya tidak. Siapa yang berwenang: integrasi manajemen, pemilik layanan, atau operator jaringan yang mengendalikan pemberitahuan keluar. Jawab itu dan hanya satu kendali yang cocok.
Menambahkan pendengar kendali tanpa autentikasi untuk mendapat tombol sambung ulang menyerahkan jauh lebih banyak daripada tombol itu kepada siapa pun yang dapat mencapai porta.
Verifikasi sesi baru, bukan pemutusannya
Peristiwa pemutusan membuktikan sesi lama berakhir. Itu tidak mengatakan apa pun tentang sesi baru yang mengautentikasi, menerima alamat, memasang rute, atau mencapai sumber daya yang dibutuhkan pengguna. Periksa pengenal baru, lalu keadaan terowongan, lalu satu sumber daya nyata. Ketiga langkah itu adalah perbedaan antara sambung ulang dan koneksi yang bekerja.
Tulis cakupan ke catatan perubahan. 'Saya menyambungkan ulang klien' bukan deskripsi ketika klien itu salah satu dari empat puluh di server bersama.