OpenVPN-da persist-tun va persist-key aslida nimani saqlab qoladi
Ikkala parametr ham tirik jarayon ichidagi yumshoq qayta ishga tushirishni qamrab oladi. Ular to'xtatilgandan keyin interfeysni saqlamaydi va trafikni bloklash siyosati emas.
Xizmatni to'xtatish persist-tun o'rnatilgan bo'lsa ham interfeysni olib tashlaydi. Bu parametr hujjatlashtirilganidek ishlayotgani, nosozlik emas. Parametr ishlab turgan jarayon ichidagi bitta qayta ishga tushirish yo'lini tavsiflaydi, va systemctl stop bu yo'l emas.
Ikki nomni birga o'qing, dizayn aniq bo'ladi. Biri deskriptorni saqlaydi, ikkinchisi kalit materialini saqlaydi, va ikkisi ham imtiyozlar tashlab yuborilgandan keyin sodir bo'ladigan narsa tufayli mavjud.
Ikki resurs va ular tegishli bo'lgan qayta ishga tushirish
OpenVPN ikkita oddiy holatda o'zining qayta ishga tushishini bildiradi. Aniq SIGUSR1 buni qiladi, va o'lik hamkor keltirib chiqargan ping-restart ham xuddi shunday qiladi. Ikkisi ham jarayonni tirik qoldiradi va ulanish sozlamasini qayta bajaradi, va aynan shu yerda parametrlar o'z o'rnini topadi.
| 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 |
Bu ikki parametr o'zgartiradigan narsa faqat yumshoq qayta ishga tushirish qatoridir, va ular o'tkazib yuboradigan ish band havolada qimmat qismdir. Qurilmani qayta ochish unga bog'langan manzillar va marshrutlarni buzadi, ularni qayta qurish esa qayta ishga tushirish boshlanganda yo'lda bo'lgan paketlarni tushirib yuborishi mumkin. To'xtatish xuddi shu obyektlarni ularni saqlashning hech qanday parametrisiz yo'q qiladi.
Bu parametrlar umuman nima uchun mavjud
Qattiqlashtirilgan OpenVPN serveri odatda root sifatida boshlanadi, kalitlari va qurilmasini ochadi, so'ng imtiyozsiz foydalanuvchiga tushadi. Bu tushishdan keyin ba'zi operatsiyalar shunchaki yo'qoladi. 0600 rejimidagi kalit faylini o'qish, tarmoq interfeysi yaratish yoki marshrutlarni o'zgartirish rad etilishi mumkin.
persist parametrlarisiz, ping-restart keltirib chiqarish uchun yetarlicha uzoq jim turadigan hamkor aynan shu operatsiyalarni majburlaydi. Konfiguratsiyada hech narsa o'zgarmagan bo'lsa ham qayta ulanish muvaffaqiyatsiz bo'ladi. Jarayon sababsiz o'layotgandek ko'rinadi, jurnal esa tarmoq xatosi o'rniga ruxsat xatosini ko'rsatadi.
Ular bilan yumshoq qayta ishga tushirish imtiyozli bosqich allaqachon olgan narsani qayta ishlatadi. Hech qanday sehr yo'q va jarayon hech narsadan omon qolmaydi. Resurslarni olish shunchaki kechiktiriladi.
Oxirgi emas, birinchi xatoni o'qing
Qayta ishga tushirish muvaffaqiyatsiz bo'lsa, oxirgi o'rniga birinchi xatoni o'qing. Himoyalangan kalit, auth fayli, interfeys ioctl va tashqi ilgak to'rt xil resursdir. Birini saqlash qolganlariga kirish haqida hech narsa demaydi. Firewall vositasini chaqiradigan ilgak hali ham o'sha vosita talab qiladigan imtiyozlarni talab qiladi.
Ilgaklarning o'z kaliti bor. OpenVPN qo'llanmasi persist parametrlarini up-restart bilan juftlaydi, u qayta ishga tushirishdan keyin up va down skriptlari qayta ishlashini hal qiladi. Shuning uchun yuqorida qolgan interfeys resolver integratsiyangiz yangilangan-yangilanmaganligi haqida hech narsa demaydi.
# 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
Bu ikki buyruq ikki nosozlik rejimini soniyalarda ajratadi. Mavjud bo'lib marshrutlari yetishmayotgan interfeys ilgak yoki marshrut muammosidir. Yo'qolgan interfeys jarayon haqiqatan tugaganini bildiradi.
Saqlangan interfeys kill switch emas
Agar talab trafik hech qachon tunneldan tashqariga chiqmasligi bo'lsa, saqlangan qurilma buni bermaydi. Boshqa manzil oilasi uchun marshrutlar, ikkinchi standart marshrut va jarayon butunlay chiqib ketadigan holat parametr doirasidan tashqarida qoladi.
Ikki talabni alohida ko'rib chiqing. Tunnel obyektini qayta ulanishlar orasida saqlash demon uchun qulaylikdir. Tunnel ishlamay turganda chiqishni bloklash o'z qoidalari va o'z sinoviga ega firewall siyosatidir. Ularni aralashtirish himoyaviy ko'rinadigan, ammo eng yaxshi harakat bilan qayta ulanish kabi ishlaydigan konfiguratsiya hosil qiladi.
Tashxislashdan oldin hodisani nomlang. Yumshoq qayta ishga tushirish, muvaffaqiyatsiz ulanish urinishi va xizmatni to'xtatish uch xatti-harakatga ega uch hodisadir, va faqat birinchisi bu parametrlar tavsiflaydigan narsadir.