Zakaj wg-quick prepiše wg0.conf, ko ustaviš vmesnik
SaveConfig je shranjevanje ob izklopu, ne sinhronizacija v ozadju. Uredi datoteko, medtem ko je tunel aktiven, in ponovni zagon lahko staro stanje zapiše čeznjo.
Dodaš peer v /etc/wireguard/wg0.conf, zaženeš systemctl restart wg-quick@wg0, in ob naslednjem pogledu peera ni več v datoteki. Nič ni ničesar poškodovalo. Ponovni zagon je ustavitev, ki ji sledi zagon, in korak ustavitve lahko zapiše trenutno stanje izvajanja čez datoteko, ki si jo pravkar uredil. Odgovorna nastavitev živi v isti datoteki, ki si jo urejal, in prav zato je zanka prvič tako zmedena.
Dve stanji, ena datoteka in shranjevanje ob izklopu
Stanje izvajanja WireGuarda in konfiguracijska datoteka wg-quick sta povezana, a različna. Datoteka je vhod: wg-quick jo prebere, ustvari vmesnik, nastavi naslove in poti ter konfigurira peere. Naprava jedra je živi objekt, in spremembe na nizki ravni, narejene z wg, se nikoli ne zapišejo same nazaj.
Razen v eno smer. Ko se v razdelku vmesnika pojavi SaveConfig = true, wg-quick shrani živo konfiguracijo v datoteko kot del spuščanja vmesnika. Priročnik wg-quick opozarja natanko pred tem: spremembe v datoteki, medtem ko je vmesnik aktiven, so lahko prepisane, ko ga odstraniš. To je shranjevanje ob izklopu, ne časovnik v ozadju, zato se sproži le, ko nekaj ustavi vmesnik.
| 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 |
Tabelo beri kot opozorilo o vrstnem redu. Vsaka naključna izguba na tem področju izhaja iz urejanja, ki se je zgodilo pred shranjevanjem, ne po njem.
Najprej ustavi, drugič uredi, nazadnje zaženi
Če je datoteka tvoj vir resnice, naredi datoteko avtoritativno z zgradbo, ne z upanjem. Spusti vmesnik, potrdi, da ga ni več, nato uredi in nato ga znova dvigni. Pravilo je preprosto: nobeno urejanje ne obstaja, dokler lahko shranjevanje še teče.
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
Vrstica za varnostno kopijo ni ceremonial. Če je tunel tvoja pot do tega stroja, lahko korak spusta konča tvojo sejo, in kopija na disku skupaj s konzolo ali zunajpasovno potjo je edina vrnitev, ki deluje. Preveri tisto drugo vrstico, preden ji zaupaš: zastarelo ime vmesnika v skriptu, ki tiho ne uspe, je način, kako ljudje urejajo datoteko, ki je še živa.
Nastavitev SaveConfig = false pred običajnim spustom je druga sprejemljiva pot in mora biti narejena v datoteki, ki jo wg-quick zares bere. To prepreči tisto eno samodejno shranjevanje. Ne povzroči, da bi ločen profil NetworkManagerja, izvoz usmerjevalnika ali vstopna točka vsebnika znova naložili tvoje spremembe, ker ti upravitelji te datoteke sploh ne berejo.
Uporabi spremembe peerov, ne da bi raztrgal vmesnik
Vsako urejanje ne potrebuje prekinitve. Spremembe na ravni peera je mogoče uporabiti na delujočem vmesniku s pretvorbo datoteke v konfiguracijo in njeno sinhronizacijo, kar se popolnoma izogne koraku spusta in zato tudi shranjevanju:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
Korak strip je pomemben. Izpiše datoteko z odstranjenimi ključi, ki pripadajo samo wg-quick, tako da naslovi, DNS in usmerjevalne direktive ne pridejo v orodje, ki jih ne razume. Sinhronizacija nato uporabi peere in ključe na živi napravi, ne da bi znova ustvarila vmesnik, zato obstoječe seje in poti preživijo.
Bodi natančen glede omejitev. Sinhronizacija peerov ne spremeni naslova vmesnika, poti, ki jih je dodal wg-quick, ali konfiguracije razreševalnika, ker nič od tega ne pripada napravi WireGuard. Dodajanje podomrežja v AllowedIPs in pričakovanje, da ga bo jedro usmerilo, je klasično napačno branje; pot mora dodati wg-quick ob dvigu ali ti.
Preveri, kdo ima vmesnik, preden karkoli urediš
Na namizju ali strežniku, ki ga upravlja konfiguracijski sistem, je datoteka lahko izhod in ne vhod. Povezava NetworkManagerja, profil, ki ga ustvari usmerjevalnik, ali zagonska skripta vsebnika lahko vsi imajo isto ime vmesnika, in v tem primeru brezhibno zaporedje wg-quick še vedno ureja napačen artefakt.
systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5
Tretji ukaz izpiše živo konfiguracijo v enaki obliki kot datoteka, vključno z zasebnim ključem, kar je uporabno za primerjavo in nevarno v zahtevku. Pred lepljenjem jo prekrij; zasebni ključ v niti za podporo je trajna ogroženost, ne tipkarska napaka.
Če je storitvena enota neaktivna, vmesnik pa obstaja, ga je ustvarilo nekaj drugega in datoteka ni avtoritativna. To eno opažanje prihrani uro urejanja datoteke, ki je nič ne bere.
Preveri naslednji ponovni zagon in nato obdrži vrnitev
Test, ki resnično dokaže popravek, je drugi ponovni zagon, ker je to zaporedje prvič spodletelo. Potrdi, da peer to preživi in da se živa konfiguracija še vedno ujema s tisto na disku:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
Zaženi ponovni zagon dvakrat. En sam čist prehod je lahko sreča: prvi ponovni zagon lahko porabi spremembo izvajanja, ki še ni bila shranjena, zato je drugi tisti, ki ti pove, da sta se datoteka in izvajanje ob koncu prvega strinjala.
Obdrži varnostno kopijo od začetka postopka, dokler ne opraviš dvojnega ponovnega zagona, nato jo izbriši ali premakni iz konfiguracijske mape. Zablodel wg0.conf.bak ob pravi datoteki je za wg-quick neškodljiv in za naslednjo osebo zmeden, ki bo na koncu uredila napačno.