Apa yang sebenarnya dipertahankan persist-tun dan persist-key dalam OpenVPN
Kedua-dua pilihan meliputi mula semula lembut di dalam proses yang hidup. Keduanya tidak mengekalkan antara muka selepas berhenti, dan bukan dasar menyekat trafik.
Menghentikan perkhidmatan membuang antara muka walaupun persist-tun ditetapkan. Itu ialah pilihan yang berfungsi seperti didokumenkan, bukan kegagalan. Pilihan ini menerangkan satu laluan mula semula di dalam proses yang berjalan, dan systemctl stop bukan laluan itu.
Baca kedua-dua nama bersama dan reka bentuk menjadi jelas. Satu menyimpan deskriptor, satu lagi menyimpan bahan kunci, dan kedua-duanya wujud kerana apa yang berlaku selepas keistimewaan dilepaskan.
Dua sumber dan mula semula yang kedua-duanya milik
OpenVPN memberi isyarat mula semula sendiri dalam dua keadaan biasa. SIGUSR1 eksplisit melakukannya, dan ping-restart yang dicetuskan oleh rakan mati melakukan perkara yang sama. Kedua-duanya membiarkan proses hidup dan menjalankan semula persediaan sambungan, dan di situlah pilihan ini mendapat tempatnya.
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
Hanya baris mula semula lembut yang diubah oleh kedua-dua pilihan ini, dan kerja yang mereka langkau ialah bahagian mahal pada pautan yang sibuk. Membuka semula peranti merobohkan alamat dan laluan yang terpasang padanya, dan membinanya semula boleh menggugurkan paket yang sedang dalam perjalanan ketika mula semula bermula. Berhenti memusnahkan objek yang sama tanpa sebarang pilihan untuk memeliharanya.
Mengapa pilihan ini wujud langsung
Pelayan OpenVPN yang dikeraskan biasanya bermula sebagai root, membuka kunci dan perantinya, kemudian turun kepada pengguna tanpa keistimewaan. Selepas penurunan itu, sesetengah operasi hilang begitu sahaja. Membaca fail kunci mod 0600, mencipta antara muka rangkaian atau menukar laluan semuanya boleh ditolak.
Tanpa pilihan persist, rakan yang berdiam cukup lama untuk mencetuskan ping-restart akan memaksa operasi itu tepat. Sambungan semula akan gagal walaupun tiada apa berubah pada konfigurasi. Proses itu akan kelihatan mati tanpa sebab, dan log akan menunjukkan ralat kebenaran dan bukannya ralat rangkaian.
Dengannya, mula semula lembut menggunakan semula apa yang telah diperoleh fasa keistimewaan. Tiada sihir dan proses itu tidak terselamat daripada apa-apa. Perolehan sumber hanya ditangguhkan.
Baca ralat pertama, bukan yang terakhir
Apabila mula semula gagal, baca ralat pertama dan bukan yang terakhir. Kunci terlindung, fail auth, ioctl antara muka dan cangkuk luaran ialah empat sumber berbeza. Mengekalkan satu tidak berkata apa-apa tentang akses kepada yang lain. Cangkuk yang memanggil alat firewall masih memerlukan keistimewaan yang dituntut alat itu.
Cangkuk mempunyai suisnya sendiri. Manual OpenVPN memasangkan pilihan persist dengan up-restart, yang menentukan sama ada skrip up dan down berjalan semula selepas mula semula. Antara muka yang kekal naik kerana itu tidak memberitahu apa-apa tentang sama ada integrasi penyelesai anda disegarkan.
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
Pasangan arahan itu memisahkan dua mod kegagalan dalam beberapa saat. Antara muka yang wujud dengan laluan yang hilang ialah masalah cangkuk atau laluan. Antara muka yang lenyap bermakna proses itu benar-benar tamat.
Antara muka yang dikekalkan bukan kill switch
Jika keperluannya ialah trafik tidak boleh sekali-kali keluar dari terowong, peranti yang dikekalkan tidak memberikannya. Laluan untuk keluarga alamat lain, laluan lalai kedua, dan kes apabila proses keluar sepenuhnya semuanya kekal di luar skop pilihan.
Tangani kedua-dua keperluan secara berasingan. Mengekalkan objek terowong antara sambungan semula ialah kemudahan untuk daemon. Menyekat keluar apabila terowong mati ialah dasar firewall dengan peraturan dan ujiannya sendiri. Mencampuradukkan keduanya menghasilkan konfigurasi yang kelihatan defensif dan berkelakuan seperti sambungan semula usaha terbaik.
Namakan peristiwa sebelum mendiagnosisnya. Mula semula lembut, cubaan sambungan yang gagal dan penghentian perkhidmatan ialah tiga peristiwa dengan tiga tingkah laku, dan hanya yang pertama ialah apa yang diterangkan pilihan ini.