Mengapa wg-quick menulis semula wg0.conf apabila anda menghentikan antara muka
SaveConfig ialah penyimpanan semasa mematikan, bukan penyegerakan latar belakang. Edit fail semasa terowong aktif, dan mula semula boleh menulis keadaan lama di atasnya.
Anda menambah peer ke /etc/wireguard/wg0.conf, menjalankan systemctl restart wg-quick@wg0, dan peer itu hilang daripada fail apabila anda melihat lagi. Tiada apa-apa merosakkan apa-apa. Mula semula ialah penghentian yang diikuti oleh permulaan, dan langkah penghentian boleh menulis keadaan masa jalan semasa ke atas fail yang baru anda edit. Tetapan yang bertanggungjawab tinggal dalam fail yang sama yang anda edit, dan itulah yang membuatkan gelung ini begitu mengelirukan kali pertama anda menemuinya.
Dua keadaan, satu fail, dan penyimpanan semasa mematikan
Keadaan masa jalan WireGuard dan fail konfigurasi wg-quick berkaitan tetapi berbeza. Fail ialah input: wg-quick membacanya, mencipta antara muka, menetapkan alamat dan laluan serta mengkonfigurasi peer. Peranti kernel ialah objek hidup, dan perubahan peringkat rendah yang dibuat dengan wg tidak pernah menulis semula dirinya.
Kecuali dalam satu arah. Apabila SaveConfig = true muncul dalam bahagian antara muka, wg-quick menyimpan konfigurasi hidup ke fail sebagai sebahagian daripada menurunkan antara muka. Manual wg-quick memberi amaran tepat tentang ini: perubahan yang dibuat pada fail semasa antara muka aktif mungkin ditimpa apabila ia dialihkan. Ini penyimpanan semasa mematikan, bukan pemasa latar belakang, jadi ia hanya bertindak apabila sesuatu menghentikan antara muka.
| 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 |
Baca jadual sebagai amaran tentang urutan. Setiap kehilangan tidak sengaja dalam bidang ini datang daripada suntingan yang berlaku sebelum penyimpanan dan bukan selepasnya.
Hentikan dahulu, edit kedua, mula terakhir
Jika fail ialah sumber kebenaran anda, jadikan fail berwibawa melalui pembinaan dan bukan melalui harapan. Turunkan antara muka, sahkan ia hilang, kemudian edit, kemudian naikkan semula. Peraturannya mudah: tiada suntingan wujud selagi penyimpanan masih boleh berjalan.
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
Baris sandaran bukan upacara. Jika terowong ialah cara anda mencapai mesin ini, langkah menurun boleh menamatkan sesi anda, dan salinan pada cakera serta konsol atau laluan luar jalur ialah satu-satunya pengembalian yang berfungsi. Semak baris kedua itu sebelum anda mempercayainya: nama antara muka lapuk dalam skrip yang gagal secara senyap ialah cara orang mengedit fail yang masih hidup.
Menetapkan SaveConfig = false sebelum penurunan biasa ialah laluan lain yang diterima, dan ia mesti dilakukan dalam fail yang benar-benar dibaca oleh wg-quick. Ia menghalang satu penyimpanan automatik itu. Ia tidak menyebabkan profil NetworkManager berasingan, eksport penghala atau titik masuk kontena memuat semula suntingan anda, kerana pengurus tersebut tidak membaca fail ini langsung.
Gunakan perubahan peer tanpa mengoyakkan antara muka
Bukan setiap suntingan memerlukan gangguan. Perubahan peringkat peer boleh digunakan pada antara muka yang berjalan dengan menukar fail menjadi konfigurasi dan menyegerakkannya, yang mengelakkan langkah penurunan sepenuhnya dan oleh itu mengelakkan penyimpanan:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
Langkah strip penting. Ia mencetak fail dengan kunci khusus wg-quick dialihkan, supaya alamat, DNS dan arahan penghalaan tidak masuk ke alat yang tidak memahaminya. Penyegerakan kemudian menggunakan peer dan kunci pada peranti hidup tanpa mencipta semula antara muka, jadi sesi dan laluan sedia ada terus hidup.
Bersikap tepat tentang had. Penyegerakan peer tidak mengubah alamat antara muka, laluan yang ditambah oleh wg-quick atau konfigurasi penyelesai, kerana tiada satu pun daripada itu milik peranti WireGuard. Menambah subnet ke AllowedIPs dan mengharapkan kernel menghalajukannya ialah salah baca klasik; laluan mesti ditambah oleh wg-quick semasa naik atau oleh anda.
Semak siapa yang memiliki antara muka sebelum anda mengedit apa-apa
Pada desktop atau pelayan yang diurus oleh sistem konfigurasi, fail mungkin output dan bukan input. Sambungan NetworkManager, profil yang dijana penghala atau skrip permulaan kontena semuanya boleh memiliki nama antara muka yang sama, dan dalam kes itu urutan wg-quick yang sempurna tetap mengedit artifak yang salah.
systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5
Perintah ketiga mencetak konfigurasi hidup dalam format yang sama seperti fail, termasuk kunci peribadi, yang berguna untuk perbandingan dan berbahaya dalam tiket. Redaksikannya sebelum menampal; kunci peribadi dalam urutan sokongan ialah kompromi kekal, bukan salah taip.
Jika unit perkhidmatan tidak aktif tetapi antara muka wujud, sesuatu yang lain menciptanya dan fail itu tidak berwibawa. Pemerhatian tunggal itu menjimatkan sejam mengedit fail yang tiada apa membacanya.
Sahkan mula semula seterusnya, kemudian simpan pengembalian
Ujian yang benar-benar membuktikan pembetulan ialah mula semula kedua, kerana itulah urutan yang gagal kali pertama. Sahkan peer itu bertahan dan konfigurasi hidup masih sepadan dengan apa yang ada pada cakera:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
Jalankan mula semula dua kali. Satu laluan bersih boleh jadi tuah: mula semula pertama mungkin menggunakan perubahan masa jalan yang belum disimpan, jadi yang kedua ialah yang memberitahu anda bahawa fail dan masa jalan bersetuju pada penghujung yang pertama.
Simpan sandaran dari awal proses sehingga anda selesai mula semula berganda, kemudian hapuskannya atau pindahkannya keluar dari direktori konfigurasi. wg0.conf.bak yang tersasar di sebelah fail sebenar tidak berbahaya kepada wg-quick dan mengelirukan orang seterusnya, yang akhirnya akan mengedit yang salah.