Miks wg-quick kirjutab liidese peatamisel wg0.confi üle
SaveConfig on väljalülitamisel salvestamine, mitte taustal sünkroonimine. Muutke faili, kui tunnel töötab, ja taaskäivitus võib kirjutada vana oleku selle peale.
Lisate peeri faili /etc/wireguard/wg0.conf, käivitate systemctl restart wg-quick@wg0 ja järgmisel pilgul on peer failist kadunud. Miski ei rikkunud midagi. Taaskäivitus on peatamine, millele järgneb käivitamine, ja peatamise samm võib kirjutada praeguse tööoleku üle faili, mida just muutsite. Vastutav säte asub samas failis, mida muutsite, ja just see teeb tsükli esimesel kohtamisel nii segaseks.
Kaks olekut, üks fail ja salvestamine väljalülitamisel
WireGuardi tööolek ja wg-quicki konfiguratsioonifail on seotud, kuid erinevad. Fail on sisend: wg-quick loeb selle, loob liidese, määrab aadressid ja marsruudid ning seadistab peerid. Kerneli seade on elav objekt ja wg-ga tehtud madala taseme muudatused ei kirjuta end kunagi tagasi.
Välja arvatud ühes suunas. Kui liidese jaotises on SaveConfig = true, salvestab wg-quick liidese alla laskmise osana elava konfiguratsiooni faili. wg-quicki käsiraamat hoiatab täpselt selle eest: liidese töötamise ajal faili tehtud muudatused võidakse selle eemaldamisel üle kirjutada. See on väljalülitamisel salvestamine, mitte taustataimer, seega käivitub see ainult siis, kui miski liidese peatab.
| 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 |
Lugege tabelit hoiatuseks järjekorra kohta. Iga juhuslik kaotus selles valdkonnas tuleb muudatusest, mis tehti enne salvestamist, mitte pärast seda.
Peatage kõigepealt, muutke teiseks, käivitage viimasena
Kui fail on teie tõe allikas, tehke fail konstruktsiooni järgi autoriteetseks, mitte lootuse järgi. Laske liides alla, kinnitage, et see on kadunud, seejärel muutke ja seejärel tõstke see uuesti üles. Reegel on lihtne: ühtegi muudatust ei ole olemas, kuni salvestamine võib veel käivituda.
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
Varundusrida ei ole tseremoonia. Kui tunnel on tee sellesse masinasse, võib allalaskmise samm teie seansi lõpetada, ja koopia kettal pluss konsool või ribaväline tee on ainus tagasipööramine, mis töötab. Kontrollige seda teist rida, enne kui seda usaldate: aegunud liidese nimi skriptis, mis ebaõnnestub vaikselt, on viis, kuidas inimesed muudavad faili, mis on veel elus.
SaveConfig = false seadmine enne tavalist allalaskmist on teine vastuvõetav tee ja see tuleb teha failis, mida wg-quick tegelikult loeb. See takistab seda ühte automaatset salvestamist. See ei pane eraldi NetworkManageri profiili, ruuteri eksporti ega konteineri sisenemispunkti teie muudatusi uuesti laadima, sest need haldurid ei loe seda faili üldse.
Rakendage peeri muudatusi liidest lõhkumata
Iga muudatus ei vaja katkestust. Peeritasandi muudatusi saab töötavale liidesele rakendada, muutes faili konfiguratsiooniks ja seda sünkroonides, mis väldib täielikult allalaskmise sammu ja seega ka salvestamise:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
strip samm on oluline. See trükib faili ilma ainult wg-quickile kuuluvate võtmeteta, nii et aadressid, DNS ja marsruutimisdirektiivid ei lähe tööriista, mis neid ei mõista. Seejärel rakendab sünkroonimine peerid ja võtmed elavale seadmele liidest uuesti loomata, nii et olemasolevad seansid ja marsruudid jäävad alles.
Olge piiride suhtes täpne. Peeride sünkroonimine ei muuda liidese aadressi, wg-quicki lisatud marsruute ega resolveri konfiguratsiooni, sest ükski neist ei kuulu WireGuardi seadmele. Alamvõrgu lisamine AllowedIPs-le ja ootus, et kernel selle marsruudib, on klassikaline vale lugemine; marsruudi peab lisama wg-quick ülestõstmise ajal või teie ise.
Kontrollige, kellele liides kuulub, enne kui midagi muudate
Konfiguratsioonisüsteemi hallataval töölaual või serveril võib fail olla väljund, mitte sisend. NetworkManageri ühendus, ruuteri loodud profiil või konteineri käivituskript võivad kõik omada sama liidese nime, ja sel juhul muudab laitmatu wg-quicki jada ikkagi vale artefakti.
systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5
Kolmas käsk trükib elava konfiguratsiooni failiga samas vormingus, sealhulgas privaatvõti, mis on võrdlemiseks kasulik ja piletil ohtlik. Redigeerige see enne kleepimist välja; privaatvõti tugilõimes on püsiv kompromiss, mitte trükiviga.
Kui teenuseüksus on passiivne, kuid liides on olemas, lõi selle miski muu ja fail ei ole autoriteetne. See üks tähelepanek säästab tunni aega faili muutmiselt, mida miski ei loe.
Kontrollige järgmist taaskäivitust ja hoidke siis tagasipööramist
Test, mis paranduse tõesti tõestab, on teine taaskäivitus, sest just see jada ebaõnnestus esimesel korral. Kinnitage, et peer jääb sellest alles ja et elav konfiguratsioon vastab endiselt sellele, mis on kettal:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
Käivitage taaskäivitus kaks korda. Üks puhas läbiminek võib olla õnn: esimene taaskäivitus võib ära kasutada tööaja muudatuse, mida veel ei olnud salvestatud, nii et teine on see, mis ütleb teile, et fail ja tööaeg olid esimese lõpus ühel meelel.
Hoidke varukoopiat protsessi algusest, kuni olete teinud kahekordse taaskäivituse, seejärel kustutage see või viige see konfiguratsioonikataloogist välja. Eksinud wg0.conf.bak tõelise faili kõrval on wg-quickile kahjutu ja järgmisele inimesele segane, kes muudab lõpuks vale faili.