OpenVPN ішінде persist-tun мен persist-key шын мәнінде нені бастан өткізеді
Екі параметр де тірі процестің ішіндегі жұмсақ қайта іске қосуды қамтиды. Олар тоқтатқаннан кейін интерфейсті сақтамайды және трафикті блоктау саясаты емес.
Қызметті тоқтату persist-tun орнатылған күннің өзінде интерфейсті жояды. Бұл параметрдің құжатталғандай жұмыс істеуі, сәтсіздік емес. Параметр жұмыс істеп тұрған процесс ішіндегі бір қайта іске қосу жолын сипаттайды, және systemctl stop ол жол емес.
Екі атауды бірге оқыңыз, дизайн айқын болады. Біреуі дескрипторды ұстайды, екіншісі кілт материалын ұстайды, және екеуі де артықшылықтардан бас тартқаннан кейін болатын жағдайға байланысты өмір сүреді.
Екі ресурс және олар жататын қайта іске қосу
OpenVPN өзінің қайта іске қосылуын екі қарапайым жағдайда хабарлайды. Айқын SIGUSR1 мұны жасайды, ал өлі серіктес тудырған ping-restart дәл солай жасайды. Екеуі де процесті тірі қалдырып, қосылымды орнатуды қайта іске қосады, және дәл осы жерде параметрлер өз орнын алады.
| 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 |
Тек жұмсақ қайта іске қосу жолы ғана осы екі параметр өзгертетін нәрсе, ал олар өткізіп жіберетін жұмыс — бос емес байланыста қымбат бөлік. Құрылғыны қайта ашу оған тіркелген мекенжайлар мен маршруттарды бұзады, ал оларды қайта құру қайта іске қосу басталғанда жолда болған пакеттерді жоғалтуы мүмкін. Тоқтату сол нысандарды сақтаудың ешбір параметрінсіз жояды.
Бұл параметрлер неліктен мүлдем бар
Қатайтылған OpenVPN сервері әдетте root ретінде басталады, кілттері мен құрылғысын ашады, содан кейін артықшылығы жоқ пайдаланушыға ауысады. Сол ауысудан кейін кейбір операциялар жай ғана жоғалады. 0600 режимі бар кілт файлын оқу, желілік интерфейс жасау немесе маршруттарды өзгерту түгелдей қабылданбауы мүмкін.
persist параметрлері жоқ болса, ping-restart тудыру үшін жеткілікті ұзақ үнсіз қалған серіктес дәл сол операцияларды мәжбүрлер еді. Конфигурацияда ештеңе өзгермесе де қайта қосылу сәтсіз аяқталар еді. Процесс себепсіз өліп жатқандай көрінер еді, ал журнал желілік қатенің орнына рұқсат қатесін көрсетер еді.
Олармен жұмсақ қайта іске қосу артықшылығы бар кезең әлдеқашан алған нәрсені қайта пайдаланады. Ешбір сиқыр жоқ және процесс ештеңеден аман қалмайды. Ресурстарды алу жай ғана кейінге қалдырылады.
Соңғы емес, бірінші қатені оқыңыз
Қайта іске қосу сәтсіз болса, соңғының орнына бірінші қатені оқыңыз. Қорғалған кілт, auth файлы, интерфейстің ioctl және сыртқы ілмек — төрт түрлі ресурс. Біреуін сақтау қалғандарына қол жеткізу туралы ештеңе айтпайды. Firewall құралын шақыратын ілмек әлі де сол құрал талап ететін артықшылықтарды қажет етеді.
Ілмектердің өз ажыратқышы бар. OpenVPN нұсқаулығы persist параметрлерін up-restart-мен жұптайды, ол қайта іске қосудан кейін up және down скрипттерінің қайта орындалатынын шешеді. Сондықтан жоғарыда қалған интерфейс resolver интеграцияңыздың жаңарғаны туралы ештеңе айтпайды.
# 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
Бұл екі команда екі істен шығу режимін секундтар ішінде ажыратады. Бар болғанымен маршруттары жоқ интерфейс — ілмек немесе маршрут мәселесі. Жоғалып кеткен интерфейс процесс шынымен аяқталғанын білдіреді.
Сақталған интерфейс kill switch емес
Егер талап трафиктің тоннельден ешқашан шықпауы болса, сақталған құрылғы мұны бермейді. Басқа мекенжай тобының маршруттары, екінші әдепкі маршрут және процесс толығымен шығатын жағдай — бәрі параметр ауқымынан тыс қалады.
Екі талапты бөлек қарастырыңыз. Тоннель нысанын қайта қосылулар арасында сақтау — демон үшін қолайлылық. Тоннель өшіп тұрғанда шығысты блоктау — өз ережелері мен өз тесті бар firewall саясаты. Оларды шатастыру қорғанышты көрінетін, бірақ барынша күш салынған қайта қосылу сияқты әрекет ететін конфигурация жасайды.
Диагностикалау алдында оқиғаны атаңыз. Жұмсақ қайта іске қосу, сәтсіз қосылу әрекеті және қызметті тоқтату — үш тәртібі бар үш оқиға, және тек біріншісі ғана осы параметрлер сипаттайтын нәрсе.