Cara mengukur waktu aktif klien OpenVPN dengan kait up dan down
OpenVPN tidak punya penghitung waktu aktif. Simpan stempel epoch dari kait up, hapus saat down, kurangkan, dan jaga tetap jujur di antara mulai ulang dan instans.
Sebuah dasbor meminta angka berapa lama koneksi sudah aktif, dan OpenVPN tidak menyediakannya. Klien tahu kapan terowongannya naik, tetapi hanya jika sesuatu mencatat momen itu sebelum status sesi hilang. Tempat yang didukung adalah kait up, dan nilai yang layak disimpan adalah detik epoch mentah alih-alih string terformat. Semua setelah itu adalah aritmetika, ditambah beberapa aturan urutan yang menentukan apakah angkanya tetap jujur.
Pastikan kaitnya benar-benar berjalan
Buktikan kaitnya terpicu sebelum merancang apa pun di sekitarnya. Konfigurasi klien minimal membutuhkan script-security 2 ditambah jalur eksplisit up dan down; tanpa baris keamanan OpenVPN menolak menjalankan skrip dan mengatakannya dengan jelas. Tambahkan up-restart dan down-pre sekaligus agar jalur mulai ulang dan pembongkaran berperilaku dapat diprediksi.
Buat versi pertama kait itu menambahkan lingkungannya ke sebuah berkas dan tidak melakukan hal lain. Itu memberi tahu Anda nama variabel yang benar-benar diekspor build Anda, seperti dev dan script_type, alih-alih yang Anda ingat dari versi lain. Jalankan satu koneksi dan satu pemutusan, lalu baca berkasnya. Jika tidak ada yang muncul, berhentilah di sini, karena rancangan stempel waktu di atas kait yang tidak pernah berjalan akan tampak seperti kegagalan pemantauan selama berminggu-minggu.
Periksa sebagai pengguna mana kait itu berjalan. Dengan user dan group disetel, OpenVPN melepas hak istimewa sebelum menjalankan skrip, sehingga direktori yang bisa ditulis root mungkin tertutup bagi kait. Pilih jalurnya dari sudut pandang layanan, bukan dari shell Anda.
Catat satu nilai epoch dan hapus dengan sengaja
Kait up membutuhkan satu baris, date +%s > /run/openvpn-client.started, dengan jalur disesuaikan per instans. Nilai epoch menghindari pertanyaan bahasa, zona waktu, dan format di kemudian hari, dan itu angka yang sama yang bisa dibandingkan agen pemantauan dengan jamnya sendiri.
Menghapus sama pentingnya dengan menulis. Kait down sebaiknya mengosongkan atau menghapus berkasnya, dan down-pre membuatnya terjadi sebelum antarmuka ditutup, yang menghilangkan jendela ketika berkas menggambarkan terowongan yang sudah pergi. up-restart lalu menyegarkan stempel pada mulai ulang internal alih-alih membiarkan nilai aslinya di tempatnya. Tanpa pasangan itu, mulai ulang setelah batas waktu ping menghasilkan angka yang terus naik saat terowongan dibangun ulang.
Pilih lokasi dengan masa hidup yang tepat. Berkas di bawah /run hilang saat boot ulang, yang sesuai kenyataan, sedangkan berkas di bawah /tmp bisa dibersihkan secara tak terduga dan yang di direktori konfigurasi bertahan dengan cara yang menyesatkan. Atur izin agar hanya pengguna layanan dan pembaca pemantauan yang bisa membacanya.
Hitung waktu aktif tanpa memercayai baris log
Baca detik tersimpan, baca detik sekarang, kurangkan. Saat berkas tidak ada atau kosong, jawaban jujurnya adalah tidak ada terowongan aktif, bukan bahwa waktu aktifnya nol, karena kedua keadaan itu seharusnya memicu peringatan berbeda. Simpan detik mentah di muatan pemantauan dan format hari serta jam di lapisan tampilan. Pemformat yang membulatkan di dalam pengekspor membuang presisi yang akan diinginkan seseorang saat insiden.
Mengurai stempel waktu log adalah jalan pintas yang menggoda, dan gagal dalam tiga hal: formatnya mengikuti opsi apa pun yang disetel, rotasi menghapus riwayat, dan sambungan ulang tampil sebagai sesi terpisah alih-alih satu terowongan berkelanjutan. Kait mencatat peristiwa itu sekali, pada saat terjadinya.
Saat pemeriksaan berjalan di host lain, kirim stempel waktunya alih-alih durasinya agar pembaca menerapkan jamnya sendiri. Hasil negatif kecil kemudian terbaca sebagai selisih jam, bukan kait rusak.
Cakup sambungan ulang, mulai ulang, dan banyak instans
Dua terowongan pada satu host membutuhkan dua berkas, dikunci dengan nama instans yang sudah dipakai layanan. Jalur bersama berarti koneksi terbaru menimpa waktu mulai setiap profil, dan gejalanya adalah angka yang melompat mundur saat terowongan kedua mulai.
Perilaku sambungan ulang layak diuji sendiri, karena di situlah rancangan yang tampak masuk akal diam-diam melaporkan hal yang salah. Paksa mulai ulang dengan menjatuhkan peer atau mengirim sinyal ke proses, lalu bandingkan status antarmuka dengan berkasnya. Stempel waktunya seharusnya maju pada saat terowongan kembali.
Di sisi server, berkas status membawa nilai connected-since per klien, yang menjawab pertanyaan berbeda: kapan server terakhir melihat peer itu. Gunakan untuk pemeriksaan silang, bukan sebagai pengganti, karena ia hilang bersama sesi yang digambarkannya. Tidak satu pun pengukuran itu mengatakan apa pun tentang kesehatan aplikasi di balik terowongan.
Jalankan tiga pemeriksaan yang menangkap bug urutan
Uji koneksi normal, sambungan ulang paksa, dan penghentian bersih, sambil membaca daftar antarmuka dan berkasnya bersama setelah masing-masing. Stempel yang masih ada setelah penghentian bersih, atau berkas yang menyatakan terowongan yang tidak ada dalam daftar antarmuka, menunjuk langsung ke urutan kait. Jalankan pemeriksaannya sebagai pengguna layanan dan dengan jalur layanan, karena shell root bisa melihat berkas lain dan memberi jawaban salah dengan yakin. Lalu biarkan poller lambat membaca berkasnya dan pastikan ia tidak pernah menulis ke sana.
Jajak pendapat setiap enam puluh detik mencakup peringatan, dan tidak ada kait yang seharusnya bergantung pada poller itu tetap hidup. Jaga kedua tanggung jawab itu terpisah dan angkanya tetap bisa dipercaya saat sisi mana pun dipasang ulang.