Што насамрэч перажываюць persist-tun і persist-key у OpenVPN
Абодва параметры апісваюць мяккі перазапуск унутры жывога працэсу. Яны не захоўваюць інтэрфейс пасля прыпынку і не з’яўляюцца палітыкай блакавання трафіку.
Прыпынак службы выдаляе інтэрфейс нават пры ўсталяваным 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 інтэрфейсу і знешні хук — гэта чатыры розныя рэсурсы. Захаванне аднаго нічога не кажа пра доступ да іншых. Хук, які выклікае інструмент міжсеткавага экрана, па-ранейшаму патрабуе правоў, якіх гэты інструмент патрабуе.
Хукі маюць уласны пераключальнік. Дапаможнік OpenVPN спалучае параметры persist з up-restart, які вырашае, ці будуць сцэнары up і down зноў запушчаны пасля перазапуску. Таму інтэрфейс, які застаўся ўзнятым, нічога не кажа пра тое, ці абнавілася ваша інтэграцыя рэзалвера.
# 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
Гэтая пара каманд раздзяляе два рэжымы збою за секунды. Інтэрфейс, які прысутнічае, але без маршрутаў, — гэта праблема хука або маршруту. Інтэрфейс, які знік, азначае, што працэс сапраўды скончыўся.
Захаваны інтэрфейс — не аварыйны выключальнік
Калі патрабаванне ў тым, каб трафік ніколі не выходзіў па-за тунель, захаваная прылада гэтага не забяспечвае. Маршруты для іншага сямейства адрасоў, другі маршрут па змаўчанні і выпадак, калі працэс цалкам выходзіць, застаюцца па-за межамі дзеяння параметра.
Разглядайце два патрабаванні асобна. Захаванне аб’екта тунелю паміж перападключэннямі — гэта зручнасць для дэмана. Блакаванне выхаду, калі тунель не працуе, — палітыка міжсеткавага экрана са сваімі правіламі і сваім тэстам. Змешванне іх дае канфігурацыю, якая выглядае абарончай, а паводзіць сябе як перападключэнне па меры магчымасцей.
Назавіце падзею перад дыягностыкай. Мяккі перазапуск, няўдалая спроба злучэння і прыпынак службы — гэта тры падзеі з трыма паводзінамі, і толькі першая — гэта тое, што апісваюць гэтыя параметры.