OpenVPN: лакальная прывязка не ўдаецца пры загрузцы — чакаць ці паўтараць
Калі лакальны адрас яшчэ не падняты, OpenVPN не можа прывязацца. Параўнайце абмежаванае чаканне з палітыкай перазапуску і даведайцеся, чаму network-online.target не дае гарантыі.
Для сервера OpenVPN, які не запускаецца пры загрузцы, прапануюць два рашэнні: чакаць адрас або дазволіць службе паўтараць спробу, пакуль прывязка не ўдасца. Яны займаюцца адным і тым жа сімптомам з рознай паводзінай пры збоі. Чаканне кадыфікуе пэўную перадумову і гучна падае, калі яе няма; паўтор хавае перадумову і працягвае спрабаваць. Якое з іх месца ў вашым юніце, залежыць ад таго, ці гэты адрас — спраектаваная залежнасць, ці выпадковасць моманту.
Абодва лепш за фіксаваны сон, які нічога не чакае і не паведамляе, чаго ён чакаў.
Што насамрэч патрабуе опцыя local
local называе адрас, да якога дэман прывязвае свой сокет, і прывязка да яшчэ не існуючага адраса адразу падае з памылкай пра запытаны адрас. Калі опцыя адсутнічае, дэман слухае ўсе адрасы, таму той самы профіль працуе на машыне, чый інтэрфейс яшчэ не падняўся: ён слухае ўсюды замест аднаго названага вамі адраса. Гэтая розніца і ёсць увесь збой, і яна застаецца нябачнай да перазагрузкі.
Патрабаванне не ў тым, што інтэрфейс падняты ў нейкім агульным сэнсе. Адрас павінен быць прызначаны правільнаму інтэрфейсу ў момант прывязкі, і гэта павінен быць базавы інтэрфейс, а не тунель, які той самы дэман стварыў бы пазней. Праверка праз некалькі хвілін пасля ўваходу нічога не даказвае пра паслядоўнасць загрузкі.
Чаканне адраса супраць паўтору прывязкі
Чаканне — гэта ExecStartPre, які апытвае, пакуль адрас не з'явіцца, з абмежаванай колькасцю спроб і ненулявым выхадам, калі час скончыцца. Паўтор — гэта дазвол асноўнаму працэсу пацярпець няўдачу і просьба да кіраўніка службаў запусціць яго зноў, напрыклад Restart=on-failure з RestartSec=5. Першы паведамляе пра адсутную перадумову як пра няўдалы юніт, другі — як пра серыю перазапускаў, якая ўрэшце спыняецца; гэта шумней у журнале, але вытрымлівае адрас, што прыходзіць позна з непрадказальных прычын.
Аддавайце перавагу чаканню, калі адрас — спраектаваная залежнасць, і паўтору, калі адрас звычайна з'яўляецца, але яго час змяняецца. Іх спалучэнне разумнае: абмежаванае чаканне пакрывае звычайны выпадак, а палітыка перазапуску — выключэнне. Ні адно з іх не павінна працаваць бясконца, бо юніт, які бясконца паўтарае, хавае няправільную наладу замест таго, каб паведаміць пра яе.
Чаму network-online.target недастаткова
network-online.target абяцае тое, што дзейная рэалізацыя сеткі разумее пад online, і нічога больш. З systemd-networkd systemd-networkd-wait-online вырашае, калі мэта дасягнута, і яго тыповае паняцце online можа быць задаволена да таго, як з'явіцца ваш канкрэтны адрас. Пад NetworkManager служба wait-online прымяняе свае правілы. Замовіць пасля мэты — гэта разумная база, а не гарантыя, што пэўны адрас, адказ DNS або аддалены партнёр гатовы.
Тое ж разважанне выключае звыклыя альтэрнатывы. Запіс аўтазапуску працоўнага стала чакае сеанс карыстальніка, які на серверы можа ніколі не адкрыцца, а адкладзеная каманда cron дадае прайшоўшы час, не называючы рэсурс, на з'яўленне якога спадзявалася. Абодва могуць выглядаць паспяховымі месяцы, а потым пацярпець няўдачу пры адной важнай загрузцы.
Праверце прывязку пасля халоднай загрузкі
Правярайце сапраўднай халоднай загрузкай, а не перазапускам службы, бо перазапуск атрымлівае ў спадчыну адрас, які павінна была стварыць паслядоўнасць загрузкі. Пасля загрузкі ss -lntp або ss -lunp паказвае лакальны адрас, да якога фактычна прывязаўся кожны слухач, а journalctl -b -u openvpn-server@server паказвае, ці першая спроба пацярпела няўдачу. Параўнайце прывязаны адрас з адрасам у профілі, затым паўтарыце параўнанне пасля перападключэння да сеткі.
Калі профіль ніколі не патрабаваў фіксаванага адраса, выдаленне local — законнае спрашчэнне, але зрабіце яго рашэннем пра бяспеку, а не звычкай пошуку непаладак.
Пашырэнне слухача змяняе, хто можа да яго дабрацца, таму спалучыце гэтую змену з палітыкай фіярвола, якая мусіла яго абмяжоўваць. Служба, якая надзейна стартуе на кожным інтэрфейсе, не вырашыла зыходную праблему; яна перанесла праблему на ўскраіну сеткі.