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.

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

Č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.

Povezani članci