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

Чатыры ўладальнікі, чатыры розныя тэсты

Перад перазагрузкай назавіце тое, што павінна вярнуць тунель. Тэст, які вы запускаеце, і выпраўленне, якое ўжываеце, абодва залежаць ад гэтага адказу, і ёсць чатыры тыповыя ўладальнікі: unit systemd для дэмана VPN, unit экзэмпляра wg-quick для інтэрфейса WireGuard, runtime кантэйнераў або профіль менеджэра сеткі. Калі вы не можаце назваць уладальніка, спыніцеся і знайдзіце яго, бо тэст перазагрузкі без чаканага шляху запуску паведамляе толькі пра тое, што нешта адбылося.

Кожны ўладальнік трымае сваю канфігурацыю ў розным месцы. Сервер OpenVPN пад кіраваннем systemd чытае канфігурацыю пры запуску, таму выконваецца тое, што знаходзіцца ў файле на момант загрузкі. Інтэрфейс wg-quick атрымлівае адрасы, маршруты і DNS з таго ж файла, а значыць, інтэрфейс, падняты ўручную з абалонкі і ніколі не ўключаны як unit, не вернецца. Кантэйнер вяртае сваю кропку ўваходу, але не змены фаервала хоста, калі тыя не знаходзяцца па-за кантэйнерам.

Спачатку базавы стан, інакш вынік нічога не значыць

Зафіксуйце працоўны стан, пакуль ён працуе: адрасы на тунелі, маршруты для кліенцкай падсеткі, правілы NAT або перасылкі, слухаючы сокет і sysctl перасылкі. ip addr show wg0, ip route, nft list ruleset або iptables-save, ss -lunp і sysctl net.ipv4.ip_forward дастатковыя на большасці хастоў.

Запішыце, як сэрвіс сканфігураваны для запуску, а не проста што ён працуе. systemctl is-enabled wg-quick@wg0 і systemctl is-active wg-quick@wg0 адказваюць на розныя пытанні, і менавіта ўключаны стан важны пры загрузцы, як апісана ў systemctl(1). Для OpenVPN праверце, які шаблон выкарыстоўвае хост, бо openvpn@server і openvpn-server@server — розныя unit з рознымі прадвызначанымі значэннямі.

Выканайце перазагрузку і прачытайце першы збой

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

Дэман можа быць актыўным, пакуль тунель непрыдатны, і гэта найчасцейшы ілжывы поспех. Запуск можа завяршыцца раней, чым сетка стане анлайн, калі unit чакае толькі network.target замест network-online.target. Файлы, на якія спасылаюцца, такія як сертыфікаты, ключы або CRL, могуць быць нечытэльнымі ў гэты момант, бо кропка мантавання або шлях да сакрэтаў яшчэ не гатовы. Ні адна з дзвюх праблем не паказваецца ў systemctl status, пакуль вы не прачытаеце журнал unit.

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

Тры ўмовы, якія вызначаюць вашае выпраўленне

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

Рабіце выпраўленне там, дзе належыць налада. Змесціце перасылку ў drop-in sysctl, змесціце правілы NAT у набор правіл, які загружаецца пры загрузцы, уключыце unit замест яго запуску і трымайце сакрэты на шляху, які існуе да запуску unit. Даданне паўзы ў unit хавае залежнасць замест таго, каб яе абвясціць.

Запішыце вынік у runbook

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

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

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