Peer WireGuard biến mất sau khi khởi động lại: tìm cấu hình thật
Một peer thêm bằng wg set chỉ hoạt động đến lần khởi động lại tiếp theo, vì giao diện được dựng lại từ một tệp hoặc hồ sơ mà bạn chưa bao giờ sửa. Hãy tìm chủ sở hữu trước.
Peer bạn thêm bằng wg set trả lời ping suốt cả buổi chiều và biến mất sau khi khởi động lại. Không có gì bị hỏng: kernel chưa bao giờ lưu peer đó ở đâu khác ngoài giao diện đang chạy, và bất cứ thứ gì tạo lại giao diện khi khởi động đều dựng nó từ một tệp mà bạn không hề đụng tới. Cách sửa không phải là thêm một wg set nữa. Đó là tìm ra thành phần nào sở hữu giao diện, sửa trạng thái của thành phần đó, rồi chứng minh peer sống sót qua đúng sự kiện vòng đời đã gỡ nó.
Tái hiện đúng một lần, có chủ đích
Đừng sửa lỗi khởi động lại trước khi bạn tận mắt thấy nó xảy ra. Nếu có quyền truy cập console hoặc ngoài băng, hãy ghi lại danh sách peer, khởi động lại qua dịch vụ sở hữu giao diện, rồi so sánh. Nếu peer vẫn còn, thay đổi của bạn đã tới trạng thái bền và bạn đang gỡ lỗi sai sự kiện.
Ghi lại ba dữ kiện trong lúc làm: tên giao diện, unit hoặc hồ sơ đã khởi động nó, và bộ đếm bắt tay trên peer còn sống có bị đặt lại hay không. Bộ đếm bị đặt lại nghĩa là giao diện đã bị huỷ và tạo lại; bộ đếm không đổi mà peer mất nghĩa là có thứ gì đó đã sửa cấu hình ngay dưới chân bạn.
Ai sở hữu giao diện?
Bản thân WireGuard không có daemon và không có tệp cấu hình. Một thứ gì đó bên trên gọi wg khi khởi động, và thứ đó chính là nguồn sự thật. Các ứng viên thường gặp là [email protected], một hồ sơ kết nối NetworkManager, một unit mạng đặc thù của bản phân phối, hoặc một bảng quản trị tự ghi cơ sở dữ liệu của nó.
Hãy hỏi hệ thống, không phải tài liệu của bản phân phối. systemctl status wg-quick@wg0 và nmcli connection show thường giải quyết việc này chỉ với một lệnh mỗi cái. Nếu cả hai đều nhận sở hữu giao diện, bạn đã tìm ra lỗi trước khi sửa bất cứ thứ gì: hai chủ cùng ghi đè một thiết bị ở mỗi lần khởi động, và kẻ chạy sau cùng thắng.
systemctl status wg-quick@wg0 --no-pager
grep -R "Address\|SaveConfig\|PostUp" /etc/wireguard/wg0.conf
nmcli -g NAME,TYPE connection show
wg show wg0 peersTrạng thái lúc chạy và trạng thái lúc khởi động không phải cùng một tệp
wg set thao tác trên thiết bị đang chạy qua netlink. Nó không ghi vào /etc/wireguard/wg0.conf, một hồ sơ NetworkManager hay cơ sở dữ liệu của bảng quản trị. Một wg show thành công sau đó chỉ chứng minh kernel đã nhận peer, không phải là sẽ có thứ gì phục hồi nó.
Có cái bẫy thứ hai ở chiều ngược lại. Tuỳ chọn SaveConfig của wg-quick ghi trạng thái giao diện hiện tại trở lại tệp cấu hình khi giao diện bị hạ xuống. Khi bật tuỳ chọn đó, một sửa đổi trên tệp thực hiện lúc giao diện đang bật có thể bị lần tắt sau ghi đè, và bạn sẽ thề rằng dòng đó từng ở đó. Nếu peer cứ quay lại, hãy đọc tệp sau khi dừng, không phải trước.
NetworkManager lại hành xử khác: nó sở hữu hồ sơ và áp dụng khi kích hoạt, nên một .conf sửa tay bên cạnh kết nối NetworkManager đang hoạt động chỉ là đồ trang trí. Chọn một chủ cho giao diện và để trình quản lý kia yên nó.
Làm cho thay đổi đáp xuống cả hai nơi
Sửa trạng thái bền trước, để chủ sở hữu áp dụng nó, rồi kiểm tra trạng thái đang chạy. Thứ tự đó nghĩa là hỏng ở bất kỳ bước nào chỉ vào một thứ thay vì ba.
# 1. persistent state (wg-quick owner)
sudo vi /etc/wireguard/wg0.conf
# 2. apply through the owner, not by hand
sudo systemctl restart wg-quick@wg0
# 3. verify runtime matches the file
sudo wg show wg0
sudo wg showconf wg0wg showconf in cấu hình đang chạy bằng đúng cú pháp mà tệp dùng, nhờ đó hai bên so sánh trực tiếp được. Hãy coi đầu ra đó là bí mật: nó chứa khoá riêng, nên đừng dán vào ticket hay kênh chat. So sánh khoá công khai của các peer và các IP được phép, rồi kiểm tra rằng peer bạn cố ý gỡ không quay lại.
Chứng minh nó sống sót qua sự kiện vòng đời
Khởi động lại qua chủ sở hữu lần thứ hai, rồi xác nhận ba điều riêng biệt: peer xuất hiện trong wg show, bộ đếm bắt tay tăng sau khi có lưu lượng, và ứng dụng phụ thuộc vào đường hầm thực sự trả lời. Một peer hiện trong danh sách với bắt tay cũ là vấn đề định tuyến hoặc khoá, không phải vấn đề bền vững, và sự phân biệt đó tiết kiệm một lần sửa cấu hình vô ích.
Cuối cùng, kiểm tra xem lần khởi động lại đã phục hồi những gì. Một lần khởi động lại làm sống lại peer bạn cố ý gỡ là cùng một lỗi với dấu ngược, và thường nghĩa là một bản sao cũ của cấu hình vẫn đang được nạp từ đâu đó. Ghi lại chủ sở hữu, đường dẫn tệp, khoá công khai của peer và các lệnh kiểm tra bên cạnh cấu hình, để người sau không phát hiện lại điều này bằng cách khởi động lại một máy chủ production.