Đặt cờ multicast trên thiết bị WireGuard làm cho giao diện đủ điều kiện cho phần mềm khám phá, và đó là tất cả những gì cờ làm. Nó không cho giao thức biết gói nhóm phải đi đâu, và trên thiết bị có nhiều peer không có một câu trả lời rõ ràng duy nhất. Ba cổng riêng biệt nằm giữa một daemon đang chạy và một dịch vụ được khám phá.

Hãy thử chúng theo thứ tự, vì vượt qua một cổng không nói gì về cổng tiếp theo.

Cổng một: cờ và chính sách của daemon

Một thiết bị WireGuard trên Linux được tạo như một liên kết điểm-điểm không có ARP, và theo mặc định không mang cờ multicast. Thêm cờ là một thay đổi giao diện cục bộ, được thực hiện bởi bất cứ thứ gì quản lý thiết bị. Avahi có thế giới quan riêng của nó ở trên, và chính sách mặc định của nó bỏ qua hoàn toàn các giao diện điểm-điểm. Vì vậy hai bài kiểm tra đủ điều kiện độc lập được áp dụng trước khi một gói dù chỉ một gói di chuyển.

Vì vậy daemon cần một quyết định rõ ràng, không chỉ một tiến trình đang chạy. Các điều khiển được ghi chép của nó bao gồm allow-interfaces, deny-interfaces và allow-point-to-point, và cái cuối là cài đặt mà mọi người bỏ sót.

Các kiểm tra bên dưới báo cáo cờ của liên kết, tuyến multicast và liệu cấu hình của daemon có được phân tích hay không:

ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check

Một daemon khởi động thành công chưa chắc đã mở socket trên giao diện mà bạn quan tâm. Hãy đọc cấu hình hiệu lực của nó thay vì cho rằng trạng thái dịch vụ tương đương với phạm vi phủ sóng.

Cổng hai: tuyến đến nhóm

Cổng thứ hai là định tuyến thông thường. Một gói được gửi đến 224.0.0.251 đi theo bảng chuyển tiếp như mọi thứ khác, và nếu bảng đưa nó ra ngoài qua giao diện LAN vật lý thì không cấu hình WireGuard nào thay đổi được điều đó. Hãy sửa tuyến trước và phần còn lại của cuộc điều tra sẽ ngắn hơn. Xem nhân báo cáo gì cho địa chỉ nhóm trước khi chạm vào bất kỳ khóa peer nào.

ObservationGate it belongs toWhat it does not prove
Multicast flag present on wg0Interface eligibilityThe daemon will use the interface
Route to the group via wg0ForwardingAny peer will receive it
Destination inside a peer's allowed listPeer selectionThat peer's network will answer

Không có tuyến cụ thể, nhân quay lại cách xử lý multicast riêng của liên kết, đó là lý do mặc định trông đúng trên một LAN phẳng và sai ngay khi cùng lưu lượng nhóm phải đi ra qua một đường hầm. Sự cố diễn ra âm thầm từ phía người gửi: truy vấn đi đâu đó, và câu trả lời không bao giờ đến.

Cổng ba: WireGuard chọn một peer cho mỗi gói

WireGuard chọn một peer đi ra bằng cách tra cứu đích trong các tập địa chỉ được phép, và đường truyền của Linux thực hiện tra cứu đó một lần cho mỗi gói. Chỉ có một kết quả, và gói được mã hóa cho peer đó. Cùng một tiền tố nhóm xuất hiện trong danh sách được phép của nhiều peer không tạo ra tư cách thành viên hay sao chép; nó tạo ra một tra cứu mơ hồ được giải quyết vào một trong số chúng.

Trên một liên kết hai đầu chuyên dụng, đây chính xác là điều bạn muốn, vì có một người nhận dự định cho lưu lượng nhóm được mang có chủ đích. Trên một giao diện có năm peer, đây là một hạn chế chứ không phải tính năng, và cách sửa thuộc về thiết kế chứ không phải cấu hình của bất kỳ peer nào.

Một thiết kế phân nhánh cần một relay rõ ràng, các liên kết riêng biệt hoặc một cơ chế khám phá hoàn toàn khác. Công bố một công thức hai đầu như một giải pháp nhiều máy khách vì mọi máy khách đều có thể ping cổng vào là cách điều này được triển khai sai.

Hướng vào được kiểm tra khác đi: nguồn của một gói nhận được phải nằm trong danh sách được phép của peer đã xác thực. Thêm một đích multicast ở đó không thay thế quyền sở hữu nguồn thực sự của người gửi.

Phản chiếu là một ranh giới, không phải một cây cầu

Bộ phản chiếu của Avahi tái tạo các thông điệp mDNS giữa các giao diện mà nó chọn, ở lớp ứng dụng. Đó là một ranh giới khám phá giữa các mạng, không phải cầu Ethernet và không phải bộ định tuyến multicast tổng quát. Hai bộ phản chiếu nối vào cùng các mạng sẽ vui vẻ tạo ra một vòng lặp các thông báo lặp lại.

Phản chiếu cũng chuyển tên dịch vụ và siêu dữ liệu của chúng sang một mạng khác, đó là một quyết định về quyền riêng tư cũng như quyết định về định tuyến. Hãy giới hạn các giao diện được chọn, và dùng bộ lọc dịch vụ ở nơi phiên bản đã cài hỗ trợ, để chỉ những thông báo mà người dùng được ủy quyền cần mới đi qua ranh giới.

Khám phá và sử dụng vẫn là hai kết quả riêng biệt. Máy khách có thể thấy thông báo về một dịch vụ có địa chỉ được quảng cáo không thể đến được từ nơi máy khách ở, hoặc có cổng bị chính sách truy cập của nó từ chối. Hãy xác nhận kết nối dịch vụ sau khi thông báo xuất hiện, và nếu ứng dụng hỗ trợ tên DNS ổn định hoặc địa chỉ máy chủ rõ ràng, hãy ưu tiên điều đó thay vì mở rộng khám phá cục bộ của liên kết. Mô tả định tuyến bằng khóa mật mã bao gồm việc chọn peer dựa trên đích mà tất cả điều này phụ thuộc vào.

Bài viết liên quan