Тестирајте опоравак VPN сервера након поновног покретања: шта прво проверити
Поново покрените док нико није пријављен, затим се повежите споља. Проверите јединицу, интерфејс, руте и правила заштитног зида која морају сама да се врате.
Поново покрените сервер док нико није пријављен, затим се повежите из мреже коју не контролишете. Овај једини тест одговара да ли је опоравак стваран, јер тунел који ради само након што неко ручно изврши команду није опоравак, већ поправка. Већина провера зауставља се превише рано: сервис изгледа активан, интерфејс се подиже, а страница се ипак не учитава. Јаз је готово увек у трајности делова око тунела, не у самој команди тунела.
Четири власника, четири различита теста
Пре поновног покретања именујте шта треба да врати тунел. Тест који изводите и поправка коју примењујете зависе обоје од тог одговора, а постоје четири уобичајена власника: systemd јединица за VPN сервис, јединица инстанце wg-quick за WireGuard интерфејс, runtime контејнера или профил менаџера мреже. Ако не можете да именујете власника, зауставите се и пронађите га, јер тест поновног покретања без очекиване путање покретања само вам каже да се нешто догодило.
Сваки власник држи своју конфигурацију на другом месту. OpenVPN сервер којим управља systemd чита конфигурацију при покретању, тако да се извршава оно што је у датотеци при подизању. wg-quick интерфејс изводи адресе, руте и DNS из исте датотеке, што значи да се интерфејс подигнут ручно из љуске и никада омогућен као јединица неће вратити. Контејнер враћа своју улазну тачку, али не и промене заштитног зида домаћина, осим ако оне живе изван контејнера.
Прво основно стање, иначе резултат не значи ништа
Забележите радно стање док ради: адресе на тунелу, руте за клијентску подмрежу, 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 су различите јединице са различитим подразумеваним вредностима.
Извршите поновно покретање и прочитајте први неуспех
Поново покрените намерно, у прозору који сте сами изабрали, са отвореном конзолом или ванпојасном путањом. Посматрајте редослед догађаја, а не крајње стање: домаћин доступан, јединица активирана, интерфејс присутан, руте инсталиране, правила заштитног зида присутна, слушалац повезан, клијент прихваћен. Први корак који се не догоди је налаз; све после њега је шум.
Сервис може бити активан док је тунел неупотребљив, и то је најчешћи лажни пролаз. Покретање може да се заврши пре него што мрежа буде онлајн ако јединица чека само network.target уместо network-online.target. Референце датотека као што су сертификати, кључеви или CRL могу бити нечитљиве у том тренутку јер монтирање или путања тајни још није спремна. Ниједан од два проблема не појављује се у systemctl status док не прочитате дневник јединице.
Тестирајте изван домаћина. Клијент на истом LAN-у може успети путањом коју ниједан удаљени клијент никада не би користио, а SSH сесија ка машини ништа не доказује о тунелу. Повежите се, разрешите интерно име, дођите до приватног ресурса, затим се још једном повежите да потврдите да стање опозива и кључеви још важе.
Три услова која одређују вашу поправку
Ако се тунел врати али клијенти не достижу ништа, неуспех је у рутирању или трајности NAT-а. Ако клијенти не могу ни да заврше руковање, неуспех је у интерфејсу или материјалу за аутентификацију. Ако се сервис никада не покрене, неуспех је у датотеци јединице или њеним зависностима. Ове три гране воде ка различитим поправкама, зато слепо поновно покретање без основног стања кошта више времена него што штеди.
Извршите поправку тамо где је подешавање у власништву. Ставите прослеђивање у sysctl drop-in, ставите NAT правила у скуп правила који се учитава при подизању, омогућите јединицу уместо да је покрећете, и држите тајне на путањи која постоји пре него што се јединица покрене. Додавање сна јединици скрива зависност уместо да је објави.
Забележите резултат у runbook
Запишите шта се вратило само, шта сте морали да покренете и колико је јаз трајао. Укључите тачне команде које сте користили за проверу, да следећа особа понови тест уместо да измишља нови. Ако је неки корак захтевао ручну команду, та команда припада конфигурацији, не runbook-у као трајни корак.
Затим закажите следећи тест после следеће промене мрежног стека домаћина, не за календарски датум шест месеци касније. Режим неуспеха од којег се штитите је привремена команда која се осећала трајном, и оне се појављују тачно када неко уређује правила заштитног зида или премешта сервис у нову јединицу.