Прыпынак службы выдаляе інтэрфейс нават пры ўсталяваным persist-tun. Гэта праца параметра так, як апісана ў дакументацыі, а не збой. Параметр апісвае адзін шлях перазапуску ўнутры працуючага працэсу, і systemctl stop не з’яўляецца гэтым шляхам.

Прачытайце два імёны разам, і дызайн становіцца зразумелым. Адно трымае дэскрыптар, другое — матэрыял ключа, і абодва існуюць з-за таго, што адбываецца пасля скіду прывілеяў.

Два рэсурсы і перазапуск, да якога яны належаць

OpenVPN паведамляе пра ўласны перазапуск у двух звычайных сітуацыях. Яўны SIGUSR1 робіць гэта, і ping-restart, выкліканы мёртвым партнёрам, робіць тое ж самае. Абодва пакідаюць працэс жывым і паўторна выконваюць наладжванне злучэння, і менавіта тут параметры апраўдваюць сябе.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun 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

Гэтая пара каманд раздзяляе два рэжымы збою за секунды. Інтэрфейс, які прысутнічае, але без маршрутаў, — гэта праблема хука або маршруту. Інтэрфейс, які знік, азначае, што працэс сапраўды скончыўся.

Захаваны інтэрфейс — не аварыйны выключальнік

Калі патрабаванне ў тым, каб трафік ніколі не выходзіў па-за тунель, захаваная прылада гэтага не забяспечвае. Маршруты для іншага сямейства адрасоў, другі маршрут па змаўчанні і выпадак, калі працэс цалкам выходзіць, застаюцца па-за межамі дзеяння параметра.

Разглядайце два патрабаванні асобна. Захаванне аб’екта тунелю паміж перападключэннямі — гэта зручнасць для дэмана. Блакаванне выхаду, калі тунель не працуе, — палітыка міжсеткавага экрана са сваімі правіламі і сваім тэстам. Змешванне іх дае канфігурацыю, якая выглядае абарончай, а паводзіць сябе як перападключэнне па меры магчымасцей.

Назавіце падзею перад дыягностыкай. Мяккі перазапуск, няўдалая спроба злучэння і прыпынак службы — гэта тры падзеі з трыма паводзінамі, і толькі першая — гэта тое, што апісваюць гэтыя параметры.

Падобныя артыкулы