Zašto wg-quick prepisuje wg0.conf kada zaustavite interfejs
SaveConfig je spremanje pri isključivanju, a ne pozadinska sinhronizacija. Uredite datoteku dok je tunel aktivan, i ponovno pokretanje može prepisati staro stanje preko nje.
Dodate peer u /etc/wireguard/wg0.conf, pokrenete systemctl restart wg-quick@wg0, i peer nestane iz datoteke kada ponovo pogledate. Ništa ništa nije pokvarilo. Ponovno pokretanje je zaustavljanje za kojim slijedi pokretanje, a korak zaustavljanja može prepisati trenutno stanje izvršavanja preko datoteke koju ste upravo uredili. Postavka odgovorna za to živi u istoj datoteci koju ste uređivali, i upravo to čini petlju toliko zbunjujućom prvi put kada je sretnete.
Dva stanja, jedna datoteka i spremanje pri isključivanju
WireGuardovo stanje izvršavanja i konfiguracijska datoteka wg-quick povezani su ali različiti. Datoteka je ulaz: wg-quick je čita, stvara interfejs, postavlja adrese i rute i konfigurira peere. Kernel uređaj je živi objekt, a promjene na niskoj razini napravljene pomoću wg nikada se ne zapisuju natrag.
Osim u jednom smjeru. Kada se SaveConfig = true pojavi u odjeljku interfejsa, wg-quick sprema živu konfiguraciju u datoteku kao dio spuštanja interfejsa. Priručnik za wg-quick upozorava upravo na to: promjene napravljene u datoteci dok je interfejs aktivan mogu biti prepisane kada se ukloni. To je spremanje pri isključivanju, a ne pozadinski mjerač vremena, pa se aktivira samo kada nešto zaustavi interfejs.
| 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 |
Čitajte tabelu kao upozorenje o redoslijedu. Svaki slučajni gubitak u ovom području dolazi od uređivanja koje se dogodilo prije spremanja, a ne poslije njega.
Prvo zaustavite, drugo uredite, na kraju pokrenite
Ako je datoteka vaš izvor istine, učinite datoteku autoritativnom konstrukcijom, a ne nadom. Spustite interfejs, potvrdite da ga nema, zatim uredite, zatim ga vratite. Pravilo je jednostavno: nijedno uređivanje ne postoji dok spremanje još može da se izvrši.
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
Linija za sigurnosnu kopiju nije ceremonija. Ako je tunel način na koji dolazite do ovog računara, korak spuštanja može završiti vašu sesiju, a kopija na disku plus konzola ili vanpojasna putanja jedini je povratak koji funkcioniše. Provjerite tu drugu liniju prije nego joj povjerujete: zastarjelo ime interfejsa u skripti koja tiho ne uspijeva način je na koji ljudi uređuju datoteku koja je još živa.
Postavljanje SaveConfig = false prije normalnog spuštanja drugi je prihvatljivi put, i mora se uraditi u datoteci koju wg-quick zaista čita. To sprječava ono jedno automatsko spremanje. To ne čini da zaseban NetworkManager profil, izvoz rutera ili ulazna točka kontejnera ponovo učitaju vaša uređivanja, jer ti upravitelji uopće ne čitaju ovu datoteku.
Primijenite promjene peera bez kidanja interfejsa
Nije svako uređivanje potreban prekid. Promjene na razini peera mogu se primijeniti na interfejs koji radi pretvaranjem datoteke u konfiguraciju i njenom sinhronizacijom, što u potpunosti izbjegava korak spuštanja i stoga izbjegava spremanje:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
Korak strip je važan. On ispisuje datoteku s uklonjenim ključevima koji pripadaju samo wg-quicku, tako da adrese, DNS i direktive rutiranja ne idu u alat koji ih ne razumije. Sinhronizacija zatim primjenjuje peere i ključeve na živi uređaj bez ponovnog stvaranja interfejsa, pa postojeće sesije i rute preživljavaju.
Budite precizni u pogledu ograničenja. Sinhronizacija peera ne mijenja adresu interfejsa, rute koje je wg-quick dodao, ni konfiguraciju razrješivača, jer ništa od toga ne pripada WireGuard uređaju. Dodavanje podmreže u AllowedIPs i očekivanje da će je kernel rutirati klasično je pogrešno čitanje; rutu mora dodati wg-quick pri podizanju ili vi.
Provjerite ko posjeduje interfejs prije nego bilo šta uredite
Na radnoj površini ili serveru kojim upravlja konfiguracijski sistem, datoteka može biti izlaz, a ne ulaz. NetworkManager veza, profil koji generiše ruter ili početna skripta kontejnera mogu svi posjedovati isto ime interfejsa, i u tom slučaju besprijekoran slijed wg-quick još uvijek uređuje pogrešan artefakt.
systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5
Treća naredba ispisuje živu konfiguraciju u istom formatu kao datoteka, uključujući privatni ključ, što je korisno za poređenje i opasno u kartici. Uklonite ga prije lijepljenja; privatni ključ u niti podrške trajna je kompromitacija, a ne greška u kucanju.
Ako je servisna jedinica neaktivna ali interfejs postoji, stvorilo ga je nešto drugo i datoteka nije autoritativna. To jedno zapažanje štedi sat vremena uređivanja datoteke koju ništa ne čita.
Provjerite sljedeće ponovno pokretanje, pa zadržite povratak
Test koji zaista dokazuje popravku jest drugo ponovno pokretanje, jer to je slijed koji je prvi put neuspio. Potvrdite da peer to preživljava i da živa konfiguracija još uvijek odgovara onome na disku:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
Pokrenite ponovno pokretanje dvaput. Jedan čist prolaz može biti sreća: prvo ponovno pokretanje može potrošiti promjenu izvršavanja koja još nije spremljena, pa je drugo ono koje vam kaže da su se datoteka i izvršavanje složili na kraju prvog.
Čuvajte sigurnosnu kopiju od početka procesa dok ne završite dvostruko ponovno pokretanje, zatim je izbrišite ili premjestite iz konfiguracijske mape. Zalutali wg0.conf.bak pored prave datoteke bezopasan je za wg-quick i zbunjujuć za sljedeću osobu, koja će na kraju urediti pogrešnu.