Perkraukite serverį, kai niekas nėra prisijungęs, tada prisijunkite iš tinklo, kurio nekontroliuojate. Šis vienas testas atsako, ar atkūrimas tikras, nes tunelis, kuris veikia tik po to, kai kas nors rankiniu būdu paleidžia komandą, nėra atkūrimas, o remontas. Dauguma patikrinimų sustoja per anksti: tarnyba rodoma kaip aktyvi, sąsaja pakyla, o puslapis vis tiek nesikrauna. Spraga beveik visada yra dalių aplink tunelį išliekamume, o ne pačioje tunelio komandoje.

Keturi savininkai, keturi skirtingi testai

Prieš perkrovimą įvardykite, kas turi sugrąžinti tunelį. Testas, kurį atliekate, ir pataisa, kurią taikote, abu priklauso nuo to atsakymo, o yra keturi įprasti savininkai: systemd unit VPN tarnybai, wg-quick egzemplioriaus unit WireGuard sąsajai, konteinerių runtime arba tinklo tvarkyklės profilis. Jei negalite įvardyti savininko, sustokite ir suraskite jį, nes perkrovimo testas be numatyto paleidimo kelio tik pasako, kad kažkas įvyko.

Kiekvienas savininkas savo konfigūraciją laiko kitoje vietoje. systemd valdomas OpenVPN serveris konfigūraciją skaito paleidimo metu, todėl paleidimo metu faile esantis turinys ir vykdomas. wg-quick sąsaja adresus, maršrutus ir DNS ima iš to paties failo, o tai reiškia, kad sąsaja, rankiniu būdu pakelta iš apvalkalo ir niekada neįjungta kaip unit, nebegrįš. Konteineris grąžina savo įėjimo tašką, bet ne ugniasienės pakeitimus pagrindiniame kompiuteryje, nebent jie yra už konteinerio ribų.

Pirmiausia bazinė būsena, kitaip rezultatas nieko nereiškia

Užfiksuokite veikiančią būseną, kol ji veikia: adresai tunelyje, maršrutai klientų potinkiui, NAT arba persiuntimo taisyklės, klausantis socket ir persiuntimo sysctl. ip addr show wg0, ip route, nft list ruleset arba iptables-save, ss -lunp ir sysctl net.ipv4.ip_forward daugumoje kompiuterių pakanka.

Užrašykite, kaip tarnyba sukonfigūruota paleidimui, o ne tik kad ji veikia. systemctl is-enabled wg-quick@wg0 ir systemctl is-active wg-quick@wg0 atsako į skirtingus klausimus, o paleidimo metu svarbi būtent įjungta būsena, kaip aprašyta systemctl(1). Dėl OpenVPN patikrinkite, kokį šabloną naudoja kompiuteris, nes openvpn@server ir openvpn-server@server yra skirtingi unit su skirtingomis numatytosiomis reikšmėmis.

Atlikite perkrovimą ir perskaitykite pirmąją klaidą

Perkraukite tyčia, pasirinktu laiko intervalu, su atidaryta konsolė arba nejuostiniu keliu. Stebėkite įvykių tvarką, o ne galutinę būseną: kompiuteris pasiekiamas, unit suaktyvintas, sąsaja yra, maršrutai įdiegti, ugniasienės taisyklės yra, klausytojas susietas, klientas priimtas. Pirmas neįvykęs žingsnis yra radinys; viskas po jo yra triukšmas.

Tarnyba gali būti aktyvi, kai tunelis netinkamas naudoti, ir tai yra dažniausias klaidingas praėjimas. Paleidimas gali baigtis anksčiau, nei tinklas bus prisijungęs, jei unit laukia tik network.target, o ne network-online.target. Nurodyti failai, pavyzdžiui, sertifikatai, raktai ar CRL, tuo metu gali būti neperskaitomi, nes prijungimas ar slaptųjų kelių dar nesiruošę. Nė viena problema nerodoma systemctl status, kol neperskaitysite unit žurnalo.

Testuokite už kompiuterio ribų. Klientas tame pačiame LAN gali pasisekti maršrutu, kurio joks nuotolinis klientas niekada nenaudotų, o SSH sesija į mašiną nieko neįrodo apie tunelį. Prisijunkite, išspręskite vidinį pavadinimą, pasiekite privatų išteklių, tada prisijunkite dar kartą, kad patvirtintumėte, jog atšaukimo būsena ir raktai vis dar galioja.

Trys sąlygos, lemiančios jūsų pataisą

Jei tunelis grįžta, bet klientai nieko nepasiekia, gedimas yra maršrutizavime arba NAT išliekamume. Jei klientai net negali užbaigti rankos paspaudimo, gedimas yra sąsajoje arba autentifikavimo medžiagoje. Jei tarnyba niekada neprasideda, gedimas yra unit faile arba jo priklausomybėse. Šios trys šakos veda prie skirtingų pataisų, todėl aklas perkrovimas be bazinės būsenos kainuoja daugiau laiko, nei sutaupo.

Atlikite pataisą ten, kur nustatymas priklauso. Įdėkite persiuntimą į sysctl drop-in, įdėkite NAT taisykles į taisyklių rinkinį, kuris įkeliamas paleidimo metu, įjunkite unit, o ne paleiskite jį, ir laikykite slaptąsias reikšmes kelyje, kuris egzistuoja prieš unit paleidimą. Miego pridėjimas prie unit paslepia priklausomybę, o ne ją deklaruoja.

Užrašykite rezultatą runbook

Užrašykite, kas grįžo savaime, ką turėjote paleisti ir kiek truko spraga. Įtraukite tikslias komandas, kuriomis tikrinote, kad kitas žmogus pakartotų testą, o ne sugalvotų naują. Jei kuriam nors žingsniui prireikė rankinės komandos, ta komanda priklauso konfigūracijai, o ne runbook kaip nuolatinis žingsnis.

Tada suplanuokite kitą testą po kito kompiuterio tinklo kamino pakeitimo, o ne kalendorinei datai po šešių mėnesių. Gedimo režimas, nuo kurio saugotės, yra laikina komanda, kuri atrodė nuolatinė, ir jos pasirodo būtent tada, kai kas nors redaguoja ugniasienės taisykles arba perkelia tarnybą į naują unit.

Susiję straipsniai