Упозорење OpenVPN-а о више --up скрипти: извршава се само једна
Преуређивање два реда up неће покренути обе. OpenVPN чува једну команду по фази, зато пронађите обе дефиниције и дајте послу једну улазну тачку.
Упозорење о више скрипти звучи као жалба на распоређивање, зато је очигледно решење преуређивати редове док не нестане. Али то није жалба на распоређивање. Каснија дефиниција --up замењује команду већ сачувану за ту фазу, и парсер то каже, што значи да је од ваше две скрипте некад радила тачно једна. Друга не чека у реду иза ње; ње нема.
Зато упозорење заслужује пажњу иако није фатално: оно предвиђа ажурирање DNS-а или промену руте која је тихо престала да се дешава.
Упозорење није о редоследу
OpenVPN чува једну команду корисничке скрипте за фазу up. Када парсер наиђе на другу дефиницију, из профила, укључене датотеке или командне линије, он замењује оно што је већ држао и издаје упозорење. Ништа се не спаја, ништа се не извршава двапут и питање редоследа не постоји. Преживљава команда коју је парсер видео последњу, зато премештање реда може променити победника, а друга скрипта остаје мртва.
Исти образац важи и за остале фазе скрипти: по једна команда за сваку. Ако два посла треба да се догоде оба, потребна им је једна улазна тачка, а не две директиве које личе на списак.
Пронађите обе дефиниције у стварном покретању
Почните од онога што је демон заиста примио, а не од профила који сте уредили. ps -ef и ExecStart јединице показују командну линију, у коју контејнерска улазна тачка или омотач могу додати --up; init датотека дистрибуције може учинити исто. systemctl cat openvpn-server@server открива шта сама услуга доприноси, а рекурзивни grep кроз конфигурациону фасциклу проналази дефиниције на нивоу датотеке. Дубликати обично долазе из различитих слојева и управо зато уређивање једне датотеке ништа не мења.
Копирање скрипте у другу фасциклу или преименовање такође не уклања директиву. Парсер броји дефиниције, не датотеке.
Нека једна hook поседује посао
Трајно решење је један диспечер који извршава обе радње у промишљеном редоследу. Кратка shell скрипта са set -eu која позива потребну интеграцију, затим локалну радњу и прослеђује "$@" да границе аргумената опстану, држи понашање на једном месту које се може проверити. Прослеђивање аргумената их само чува; оно не доказује да два помоћника очекују исти интерфејс, зато прочитајте уговор свакога. Одлучите шта грешка треба да уради и да ли делимичне промене треба поништити.
Ако покретач нуди подржан hook за проширење, дајте му предност у односу на ручно састављени ланац. Контејнерска слика или пакет добављача често има документовано место за додатни рад, а његово коришћење спречава надоградњу да препише ваш диспечер.
Чишћење припада одговарајућој down фази. Up радња која преписује DNS или додаје руте захтева документовано враћање, а диспечер који се бави само покретањем је пола дизајна.
Потврдите интеграцију, не само тишину
Уклањање упозорења о дупликату је лакши део; интеграција ипак мора да ради. Проверите стање резолвера после повезивања помоћу resolvectl status или читањем /etc/resolv.conf, и потврдите руте помоћу ip route. Затим се искључите и поново повежите, јер на брзину повезан hook обично остави нешто од претходне сесије. journalctl -u openvpn-server@server -b показује да ли је ваш диспечер радио и шта је исписао.
Држите привилегије hook-а тамо где им је место. Подизање script-security или покретање демона са више права није поправка за замењен hook; то проширује шта свака будућа скрипта може да уради, укључујући ону коју нападач именује.
Знак да је поправка стварна није тишина у дневнику. То су DNS одговор, запис руте и чишћење који сви раде после два поновна повезивања.