Pridedate peer prie /etc/wireguard/wg0.conf, paleidžiate systemctl restart wg-quick@wg0, ir kitą kartą pažiūrėjus peer failo nebėra. Niekas nieko nesugadino. Perkrovimas yra sustabdymas, po kurio seka paleidimas, o sustabdymo žingsnis gali užrašyti dabartinę vykdymo būseną ant failo, kurį ką tik redagavote. Už tai atsakingas nustatymas yra tame pačiame faile, kurį redagavote, ir būtent tai daro ciklą tokį painų pirmą kartą su juo susidūrus.

Dvi būsenos, vienas failas ir išsaugojimas išjungiant

WireGuard vykdymo būsena ir wg-quick konfigūracijos failas yra susiję, bet skirtingi. Failas yra įvestis: wg-quick jį skaito, sukuria sąsają, nustato adresus ir maršrutus bei konfigūruoja peer. Branduolio įrenginys yra gyvas objektas, o žemo lygio pakeitimai, atlikti su wg, niekada neįrašomi atgal.

Išskyrus viena kryptimi. Kai sąsajos skiltyje yra SaveConfig = true, wg-quick išsaugo gyvą konfigūraciją į failą kaip sąsajos nuleidimo dalį. wg-quick vadove įspėjama būtent apie tai: pakeitimai, padaryti faile, kol sąsaja aktyvi, gali būti perrašyti, kai ji pašalinama. Tai išsaugojimas išjungiant, o ne foninis laikmatis, todėl jis suveikia tik tada, kai kažkas sustabdo sąsają.

ActionWhat it writesWhen it surprises you
wg set on a live interfaceKernel state onlyAfter reboot, when the file was never updated
wg-quick down with SaveConfigLive state into the fileRight after you edited the file
wg syncconfKernel state onlyNever; it does not touch the file
wg-quick upKernel state from the fileIf the file is stale, you get the old tunnel

Skaitykite lentelę kaip įspėjimą apie tvarką. Kiekvienas atsitiktinis praradimas šioje srityje kyla iš redagavimo, įvykusio prieš išsaugojimą, o ne po jo.

Pirmiausia sustabdykite, antra redaguokite, galiausiai paleiskite

Jei failas yra jūsų tiesos šaltinis, padarykite failą autoritetingu konstrukcija, o ne viltimi. Nuleiskite sąsają, patvirtinkite, kad ji dingo, tada redaguokite, tada vėl pakelkite. Taisyklė paprasta: joks redagavimas neegzistuoja, kol išsaugojimas dar gali vykti.

sudo cp -a /etc/wireguard/wg0.conf /root/wg0.conf.$(date +%F-%H%M)
sudo wg-quick down wg0
ls /sys/class/net/wg0 2>/dev/null || echo "interface is gone"
sudoedit /etc/wireguard/wg0.conf
sudo wg-quick up wg0

Atsarginės kopijos eilutė nėra ceremonija. Jei tunelis yra jūsų kelias į šią mašiną, nuleidimo žingsnis gali užbaigti jūsų sesiją, o kopija diske ir konsolė arba ne juostos kelias yra vienintelis veikiantis atsukimas. Patikrinkite tą antrą eilutę prieš ja pasitikėdami: pasenęs sąsajos pavadinimas scenarijuje, kuris tyliai nepavyksta, yra būdas, kuriuo žmonės redaguoja dar gyvą failą.

Nustatyti SaveConfig = false prieš įprastą nuleidimą yra kitas priimtinas kelias, ir tai turi būti daroma faile, kurį wg-quick tikrai skaito. Tai užkerta kelią tam vienam automatiniam išsaugojimui. Tai nepriverčia atskiro NetworkManager profilio, maršrutizatoriaus eksporto ar konteinerio įėjimo taško iš naujo įkelti jūsų pakeitimų, nes tie tvarkykliai šio failo visiškai neskaito.

Taikykite peer pakeitimus nesuplėšydami sąsajos

Ne kiekvienam redagavimui reikia pertraukos. Peer lygio pakeitimus galima pritaikyti veikiančiai sąsajai paverčiant failą konfigūracija ir ją sinchronizuojant, o tai visiškai išvengia nuleidimo žingsnio ir todėl išvengia išsaugojimo:

sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes

strip žingsnis svarbus. Jis išspausdina failą su pašalintais raktais, priklausančiais tik wg-quick, kad adresai, DNS ir maršrutizavimo direktyvos nepatektų į įrankį, kuris jų nesupranta. Tada sinchronizavimas pritaiko peer ir raktus gyvam įrenginiui neperkurdamas sąsajos, todėl esamos sesijos ir maršrutai išlieka.

Būkite tikslūs dėl ribų. Peer sinchronizavimas nekeičia sąsajos adreso, wg-quick pridėtų maršrutų ar resolver konfigūracijos, nes nė vienas iš jų nepriklauso WireGuard įrenginiui. Pridėti potinklį prie AllowedIPs ir tikėtis, kad branduolys jį maršrutizuos, yra klasikinis neteisingas skaitymas; maršrutą turi pridėti wg-quick kėlimo metu arba jūs.

Prieš ką nors redaguodami patikrinkite, kam priklauso sąsaja

Staliniame kompiuteryje ar serveryje, valdomame konfigūracijos sistemos, failas gali būti išvestis, o ne įvestis. NetworkManager ryšys, maršrutizatoriaus sugeneruotas profilis ar konteinerio paleidimo scenarijus gali visi turėti tą patį sąsajos pavadinimą, ir tokiu atveju nepriekaištinga wg-quick seka vis tiek redaguoja ne tą artefaktą.

systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5

Trečioji komanda išspausdina gyvą konfigūraciją tokiu pačiu formatu kaip failas, įskaitant privatų raktą, o tai naudinga palyginimui ir pavojinga biliete. Užmaskuokite jį prieš įklijuodami; privatus raktas palaikymo gijoje yra nuolatinis kompromisas, o ne rašybos klaida.

Jei paslaugos vienetas neaktyvus, bet sąsaja egzistuoja, ją sukūrė kažkas kitas, ir failas nėra autoritetingas. Tas vienas pastebėjimas sutaupo valandą redaguojant failą, kurio niekas neskaito.

Patikrinkite kitą perkrovimą, tada išsaugokite atsukimą

Testas, kuris tikrai įrodo pataisą, yra antras perkrovimas, nes būtent ta seka nepavyko pirmą kartą. Patvirtinkite, kad peer tai išgyvena ir kad gyva konfigūracija vis dar atitinka tai, kas yra diske:

sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf

Paleiskite perkrovimą du kartus. Vienas švarus praėjimas gali būti sėkmė: pirmasis perkrovimas gali sunaudoti vykdymo pakeitimą, kuris dar nebuvo išsaugotas, todėl antrasis yra tas, kuris pasako, kad failas ir vykdymas sutarė pirmojo pabaigoje.

Išsaugokite atsarginę kopiją nuo proceso pradžios, kol atliksite dvigubą perkrovimą, tada ištrinkite ją arba perkelkite už konfigūracijos katalogo. Pasiklydęs wg0.conf.bak šalia tikrojo failo yra nekenksmingas wg-quick ir klaidina kitą žmogų, kuris galiausiai redaguos netinkamą.

Susiję straipsniai