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 саясаты. Аларды аралаштыруу коргонуучудай көрүнүп, бирок мүмкүн болушунча күч жумшалган кайра туташуудай аракет кылган конфигурация жаратат.
Диагноздоодон мурун окуяны атаңыз. Жумшак кайра иштетүү, ийгиликсиз туташуу аракети жана кызматты токтотуу — үч жүрүм-туруму бар үч окуя, жана биринчиси гана ушул параметрлер сүрөттөгөн нерсе.