Mengapa wg-quick menulis ulang wg0.conf saat Anda menghentikan antarmuka
SaveConfig adalah penyimpanan saat mematikan, bukan sinkronisasi latar belakang. Edit file saat terowongan aktif, dan mulai ulang dapat menulis keadaan lama di atasnya.
Anda menambahkan peer ke /etc/wireguard/wg0.conf, menjalankan systemctl restart wg-quick@wg0, dan peer itu hilang dari file saat Anda melihat lagi. Tidak ada yang merusak apa pun. Mulai ulang adalah penghentian yang diikuti oleh permulaan, dan langkah penghentian dapat menulis keadaan runtime saat ini ke atas file yang baru saja Anda edit. Pengaturan yang bertanggung jawab berada di file yang sama yang Anda edit, dan itulah yang membuat perulangan ini begitu membingungkan saat pertama kali mengalaminya.
Dua keadaan, satu file, dan penyimpanan saat mematikan
Keadaan runtime WireGuard dan file konfigurasi wg-quick saling terkait tetapi berbeda. File adalah masukan: wg-quick membacanya, membuat antarmuka, menetapkan alamat dan rute, dan mengonfigurasi peer. Perangkat kernel adalah objek hidup, dan perubahan tingkat rendah yang dibuat dengan wg tidak pernah menulis dirinya kembali.
Kecuali dalam satu arah. Saat SaveConfig = true muncul di bagian antarmuka, wg-quick menyimpan konfigurasi hidup ke file sebagai bagian dari menurunkan antarmuka. Manual wg-quick memperingatkan tepat tentang ini: perubahan yang dibuat pada file saat antarmuka aktif dapat ditimpa saat antarmuka dihapus. Ini penyimpanan saat mematikan, bukan pengatur waktu latar belakang, jadi hanya berjalan saat sesuatu menghentikan antarmuka.
| 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 tabel sebagai peringatan tentang urutan. Setiap kehilangan tak sengaja di area ini berasal dari pengeditan yang terjadi sebelum penyimpanan, bukan sesudahnya.
Hentikan dulu, edit kedua, mulai terakhir
Jika file adalah sumber kebenaran Anda, jadikan file berwenang melalui konstruksi, bukan melalui harapan. Turunkan antarmuka, pastikan sudah hilang, lalu edit, lalu naikkan kembali. Aturannya sederhana: tidak ada pengeditan selama penyimpanan masih dapat 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 cadangan bukan sekadar upacara. Jika terowongan adalah cara Anda mencapai mesin ini, langkah menurunkan dapat mengakhiri sesi Anda, dan salinan di disk ditambah konsol atau jalur luar pita adalah satu-satunya pengembalian yang berfungsi. Periksa baris kedua itu sebelum Anda memercayainya: nama antarmuka usang dalam skrip yang gagal diam-diam adalah cara orang mengedit file yang masih hidup.
Menyetel SaveConfig = false sebelum penurunan normal adalah jalur lain yang diterima, dan itu harus dilakukan di file yang benar-benar dibaca wg-quick. Ini mencegah satu penyimpanan otomatis itu. Ini tidak membuat profil NetworkManager terpisah, ekspor router, atau titik masuk kontainer memuat ulang hasil edit Anda, karena pengelola tersebut sama sekali tidak membaca file ini.
Terapkan perubahan peer tanpa merobek antarmuka
Tidak setiap pengeditan memerlukan pemadaman. Perubahan tingkat peer dapat diterapkan ke antarmuka yang berjalan dengan mengubah file menjadi konfigurasi dan menyinkronkannya, yang sepenuhnya menghindari langkah penurunan dan karena itu menghindari penyimpanan:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
Langkah strip penting. Perintah itu mencetak file dengan kunci khusus wg-quick dihapus, sehingga alamat, DNS, dan arahan perutean tidak masuk ke alat yang tidak memahaminya. Sinkronisasi kemudian menerapkan peer dan kunci ke perangkat hidup tanpa membuat ulang antarmuka, sehingga sesi dan rute yang ada bertahan.
Bersikaplah tepat tentang batasannya. Sinkronisasi peer tidak mengubah alamat antarmuka, rute yang ditambahkan wg-quick, atau konfigurasi resolver, karena tidak satu pun dari itu milik perangkat WireGuard. Menambahkan subnet ke AllowedIPs dan berharap kernel merutekannya adalah salah baca klasik; rute harus ditambahkan oleh wg-quick saat naik atau oleh Anda.
Periksa siapa yang memiliki antarmuka sebelum Anda mengedit apa pun
Di desktop atau server yang dikelola sistem konfigurasi, file bisa menjadi keluaran, bukan masukan. Koneksi NetworkManager, profil yang dihasilkan router, atau skrip awal kontainer semuanya dapat memiliki nama antarmuka yang sama, dan dalam hal itu urutan wg-quick yang sempurna tetap mengedit artefak 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 dengan file, termasuk kunci privat, yang berguna untuk perbandingan dan berbahaya di tiket. Redaksi sebelum menempel; kunci privat di utas dukungan adalah kompromi permanen, bukan salah ketik.
Jika unit layanan tidak aktif tetapi antarmuka ada, sesuatu yang lain membuatnya dan file tidak berwenang. Satu pengamatan itu menghemat satu jam mengedit file yang tidak dibaca apa pun.
Verifikasi mulai ulang berikutnya, lalu pertahankan pengembalian
Uji yang benar-benar membuktikan perbaikan adalah mulai ulang kedua, karena itulah urutan yang gagal pertama kali. Pastikan peer bertahan dan konfigurasi hidup masih cocok dengan yang ada di disk:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
Jalankan mulai ulang dua kali. Satu lintasan bersih bisa jadi keberuntungan: mulai ulang pertama dapat menghabiskan perubahan runtime yang belum disimpan, jadi yang kedua adalah yang memberi tahu Anda bahwa file dan runtime sepakat pada akhir yang pertama.
Pertahankan cadangan dari awal proses hingga Anda menyelesaikan mulai ulang ganda, lalu hapus atau pindahkan ke luar direktori konfigurasi. wg0.conf.bak yang tersesat di samping file asli tidak berbahaya bagi wg-quick dan membingungkan orang berikutnya, yang akhirnya akan mengedit yang salah.