Znova zaženite strežnik, ko ni nihče prijavljen, nato se povežite iz omrežja, ki ga ne nadzorujete. Ta en sam preizkus odgovori, ali je obnovitev resnična, ker tunel, ki deluje šele potem, ko nekdo ročno zažene ukaz, ni obnovitev, ampak popravilo. Večina preverjanj se ustavi prehitro: storitev se prikaže kot aktivna, vmesnik se dvigne, stran pa se vseeno ne naloži. Vrzel je skoraj vedno v trajnosti delov okoli tunela, ne v samem ukazu tunela.

Štirje lastniki, štirje različni preizkusi

Pred ponovnim zagonom poimenujte, kaj naj vrne tunel. Preizkus, ki ga izvajate, in popravek, ki ga uporabite, sta oba odvisna od tega odgovora, in obstajajo štirje običajni lastniki: enota systemd za storitev VPN, enota primerka wg-quick za vmesnik WireGuard, izvajalno okolje vsebnikov ali profil upravitelja omrežja. Če lastnika ne morete poimenovati, se ustavite in ga poiščite, ker preizkus ponovnega zagona brez pričakovane zagonske poti pove le, da se je nekaj zgodilo.

Vsak lastnik hrani svojo konfiguracijo drugje. Strežnik OpenVPN, ki ga upravlja systemd, prebere konfiguracijo ob zagonu, zato se izvaja tisto, kar je v datoteki ob zagonu. Vmesnik wg-quick pridobi naslove, poti in DNS iz iste datoteke, kar pomeni, da se vmesnik, dvignjen ročno iz lupine in nikoli omogočen kot enota, ne bo vrnil. Vsebnik vrne svojo vstopno točko, ne pa tudi sprememb požarnega zidu gostitelja, razen če te živijo zunaj vsebnika.

Najprej osnovno stanje, sicer rezultat ne pomeni nič

Zabeležite delujoče stanje, dokler deluje: naslove na tunelu, poti za odjemalsko podomrežje, pravila NAT ali posredovanja, vtičnico, ki posluša, in sysctl posredovanja. ip addr show wg0, ip route, nft list ruleset ali iptables-save, ss -lunp in sysctl net.ipv4.ip_forward zadostujejo na večini gostiteljev.

Zabeležite, kako je storitev konfigurirana za zagon, ne le da deluje. systemctl is-enabled wg-quick@wg0 in systemctl is-active wg-quick@wg0 odgovarjata na različni vprašanji, pri zagonu pa je pomembno omogočeno stanje, kot je opisano v systemctl(1). Pri OpenVPN preverite, katero predlogo uporablja gostitelj, saj sta openvpn@server in openvpn-server@server različni enoti z različnimi privzetimi vrednostmi.

Izvedite ponovni zagon in preberite prvo napako

Znova zaženite namenoma, v oknu, ki ste ga izbrali, z odprto konzolo ali zunajpasovno potjo. Opazujte vrstni red dogodkov, ne končnega stanja: gostitelj dosegljiv, enota aktivirana, vmesnik prisoten, poti nameščene, pravila požarnega zidu prisotna, poslušalec vezan, odjemalec sprejet. Prvi korak, ki se ne zgodi, je ugotovitev; vse za njim je šum.

Storitev je lahko aktivna, medtem ko je tunel neuporaben, in to je najpogostejši lažni prehod. Zagon se lahko konča, preden je omrežje povezano, če enota čaka le na network.target namesto na network-online.target. Referenčne datoteke, kot so potrdila, ključi ali CRL, so lahko v tistem trenutku neberljive, ker priklop ali pot do skrivnosti še ni pripravljena. Nobena od obeh težav se ne pokaže v systemctl status, dokler ne preberete dnevnika enote.

Preizkusite zunaj gostitelja. Odjemalec v istem LAN lahko uspe po poti, ki je noben oddaljeni odjemalec nikoli ne bi uporabil, in seja SSH na stroj ne dokaže ničesar o tunelu. Povežite se, razrešite interno ime, dosezite zasebni vir, nato se še enkrat povežite, da potrdite, da stanje preklica in ključi še vedno veljajo.

Trije pogoji, ki odločijo o vašem popravku

Če se tunel vrne, a odjemalci ne dosežejo ničesar, je napaka v usmerjanju ali trajnosti NAT. Če odjemalci ne morejo niti dokončati rokovanja, je napaka v vmesniku ali v gradivu za preverjanje pristnosti. Če se storitev nikoli ne zažene, je napaka v datoteki enote ali v njenih odvisnostih. Te tri veje vodijo do različnih popravkov, zato slepi ponovni zagon brez osnovnega stanja stane več časa, kot ga prihrani.

Popravek izvedite tam, kjer je nastavitev v lasti. Posredovanje dajte v sysctl drop-in, pravila NAT v nabor pravil, ki se naloži ob zagonu, omogočite enoto, namesto da bi jo zagnali, in skrivnosti hranite na poti, ki obstaja, preden se enota zažene. Dodajanje spanja enoti skrije odvisnost, namesto da bi jo razkrilo.

Zabeležite rezultat v runbook

Zapišite, kaj se je vrnilo samo, kaj ste morali zagnati in kako dolgo je vrzel trajala. Vključite točne ukaze, s katerimi ste preverjali, da naslednja oseba ponovi preizkus, namesto da bi izumila novega. Če je kateri korak potreboval ročni ukaz, ta ukaz sodi v konfiguracijo, ne v runbook kot trajni korak.

Nato načrtujte naslednji preizkus po naslednji spremembi omrežnega sklada gostitelja, ne za koledarski datum čez šest mesecev. Način odpovedi, pred katerim se varujete, je začasen ukaz, ki se je zdel trajen, in ti se pojavijo točno takrat, ko nekdo ureja pravila požarnega zidu ali premakne storitev v novo enoto.

Sorodni članki