Kodėl wg-quick perrašo wg0.conf, kai sustabdote sąsają
SaveConfig yra išsaugojimas išjungiant, o ne foninė sinchronizacija. Redaguokite failą, kol tunelis aktyvus, ir perkrovimas gali užrašyti seną būseną ant jo.
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ą.
| Action | What it writes | When it surprises you |
|---|---|---|
wg set on a live interface | Kernel state only | After reboot, when the file was never updated |
wg-quick down with SaveConfig | Live state into the file | Right after you edited the file |
wg syncconf | Kernel state only | Never; it does not touch the file |
wg-quick up | Kernel state from the file | If 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ą.