Đọc cấu hình WireGuard từng dòng, từ Interface đến Peer
Khóa Interface thuộc về đầu này, khóa peer thuộc về phía bên kia. Đọc mỗi dòng như một hướng, rồi xác nhận wg-quick đã thêm gì quanh giao thức.
Hầu hết cấu hình WireGuard hỏng không sai giá trị; chúng đặt giá trị đúng ở phía sai. Khóa riêng thuộc về máy này, peer mang khóa công khai của máy kia, và địa chỉ nằm trong khối interface dù nó mô tả nơi đường hầm trú ngụ. Hãy đọc tệp như hai hướng gặp nhau, rồi kiểm tra xem tập lệnh hỗ trợ đã thêm gì lên trên. Bản thân giao thức có ít trường hơn tệp, và những trường thừa đáng được biết riêng.
Khóa interface mô tả máy này
Khối interface giữ danh tính riêng của đầu này. PrivateKey chính là danh tính đó và không bao giờ rời khỏi máy chủ; khóa công khai tương ứng được dẫn xuất từ nó và đó là thứ các peer khác liệt kê. ListenPort là nơi phía này nhận bắt tay, vì vậy hai máy khách sau cùng một địa chỉ cần cổng khác nhau.
Address là địa chỉ đường hầm mà máy chủ này trả lời, được ghi kèm độ dài tiền tố vì nó cũng là nguồn mà nó sẽ dùng. Sai tiền tố ở đây làm thay đổi những đích mà máy chủ coi là kết nối trực tiếp, và điều đó tạo ra lỗi trông như định tuyến chứ không phải cấu hình.
Mọi thứ khác trong [Interface] khối với một máy khách thật thường được thêm bởi wg-quick: DNS, MTU, Table, và các dòng móc. Đây không phải trường của giao thức, và một wg thiết lập trần trụi bỏ qua hoàn toàn chúng.
Mỗi mục peer mô tả một phía khác
Một [Peer] khối là phía từ xa. PublicKey là khóa dẫn xuất của phía đó, không bao giờ là khóa riêng của họ, và PresharedKey là một bí mật thêm tùy chọn mà cả hai phía phải giữ giống nhau. Endpoint là nơi gửi đến, và PersistentKeepalive yêu cầu máy chủ này gửi một gói sau khoảng thời gian khi không có gì khác đi ra.
Hai sai lầm giải thích phần lớn sự nhầm lẫn ở đây. Sao chép khóa riêng của bạn vào khối peer khiến hai đầu chia sẻ một danh tính, và bắt tay thất bại theo cách ghi nhật ký kém. Endpoint bỏ ra ngoài trên máy khách thường là cố ý, vì máy chủ học địa chỉ từ bắt tay đến; bỏ nó ra ngoài trên máy chủ phải khởi tạo thì không phải. Cũng nhớ rằng keepalive giữ một ánh xạ NAT mở, và nó không cải thiện thông lượng hay giảm độ trễ, vì vậy ba mươi giây gói thêm không mua được gì khi lưu lượng đã chảy.
AllowedIPs là định tuyến, không phải danh sách quyền
AllowedIPs là định tuyến khóa mật mã của WireGuard. Ra ngoài, nó quyết định peer nào nhận gói dựa trên đích. Vào trong, nó quyết định gói đến từ peer đó có được chấp nhận dựa trên nguồn hay không. Cùng một trường làm cả hai việc, vì thế đây không phải danh sách kiểm soát truy cập và cũng không phải danh sách trang web được phép.
Một AllowedIPs hẹp trên máy chủ cho một máy khách nghĩa là máy chủ chỉ chấp nhận các gói khai báo những nguồn đó, và chỉ gửi những đích đó đến máy khách ấy. Mở rộng một phía mà không mở rộng phía kia, bạn sẽ có một đường hầm dựng lên mà không cho gì đi qua.
wg-quick thêm gì quanh giao thức
wg-quick đọc cùng tệp và thực hiện các bước mạng mà giao thức để lại cho hệ điều hành. Nó gán địa chỉ interface, thêm các tuyến dẫn xuất từ AllowedIPs, ghi thiết lập trình phân giải và chạy các lệnh móc theo thứ tự.
Lớp đó giải thích sự bất đối xứng cổ điển. Một tệp có 0.0.0.0/0 và dòng DNS cho máy khách một tuyến mặc định và một trình phân giải, và nó không làm gì cả với các quy tắc chuyển tiếp hay NAT của máy chủ. Những thứ đó thuộc cấu hình của chính máy chủ, và không tệp máy khách nào cung cấp được.
Giữ một chủ sở hữu cho tệp. Sửa nó bằng tay trong khi SaveConfig đang bật nghĩa là chỉnh sửa của bạn biến mất lần tới khi interface xuống, và interface sẽ không nói cho bạn biết điều đó đã xảy ra.
Kiểm tra trạng thái đã áp dụng, không phải tệp
Tệp là ý định. Trạng thái đã áp dụng là thứ nhân hệ điều hành giữ, và chúng lệch nhau mỗi khi một trình trợ giúp, một drop-in hay một móc đã sửa gì đó sau khi kích hoạt.
Đọc trạng thái sống và phần địa chỉ cùng nhau, rồi so sánh cả hai với những gì bạn đã viết:
sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.confNếu danh sách peer trống, interface được tạo mà không áp dụng cấu hình của nó. Nếu có địa chỉ và tuyến nhưng bộ đếm vẫn bằng không, tệp đã nạp và bắt tay đang thất bại, đó là vấn đề khóa hoặc đầu cuối chứ không phải thứ tự phần. Hãy so sánh hai góc nhìn trước khi sửa, vì khoảng cách giữa chúng thường là lỗi thực sự.