Quét UDP báo bị lọc: peer WireGuard của bạn có thực sự chết?
Một phép thử chưa xác thực có thể không nhận được phản hồi nào từ một peer khỏe mạnh. Hãy kiểm tra máy khách thật, rồi đối chiếu trình lắng nghe và đường đi của gói trên máy chủ.
Các trình quét in ra mở hoặc bị lọc cho một cổng UDP, và kết luận thường đến trong vài giây: đường hầm đã hỏng. Có thể là vậy, nhưng lần quét không chứng minh điều đó. UDP không mang theo bất kỳ bắt tay kết nối nào, và WireGuard không trả lời bất cứ thứ gì nó không thể xác thực, nên im lặng là câu trả lời mong đợi cho hầu hết các phép thử.
Thay vào đó hãy làm việc từ máy khách ra ngoài, và coi lần quét là một điểm dữ liệu yếu trong số nhiều điểm.
Trình quét thấy được gì và không thấy được gì
Một trình quét UDP gửi một tải trọng và chờ. Nếu ICMP port-unreachable quay lại, nó có thể báo cổng là đóng. Nếu không có gì quay lại, kết quả mơ hồ theo thiết kế: một đường bị lọc, một máy chủ không tồn tại và một dịch vụ đang chạy nhưng bỏ qua tải trọng đều tạo ra cùng một sự im lặng. Ba trạng thái khác nhau, một chuỗi đầu ra.
WireGuard cố ý làm sự mơ hồ đó tồi tệ hơn. Giao thức chỉ chấp nhận một gói khi nó xác thực được, nên một phép thử với khóa sai bị loại bỏ mà không có phản hồi. Không có banner, không có chuỗi phiên bản và không có thông báo lỗi để lấy dấu vân tay.
Một thử nghiệm TCP trên cùng số cổng không kiểm tra gì liên quan. Nó chạy một trình lắng nghe khác có thể không tồn tại, và việc nó từ chối không nói gì về UDP.
Vì vậy các trạng thái mở bị lọc mô tả sự không chắc chắn của trình quét chính xác hơn là mô tả máy chủ của bạn.
Đi qua máy khách thật từ hồ sơ vào bên trong
Bắt đầu từ góc nhìn của chính máy khách. Giao diện có địa chỉ không, cấu hình có nêu đúng điểm cuối không, và bộ đếm bắt tay có nhích lên khi thử kết nối không? Một máy khách chưa từng gửi gói nào và một máy khách có các gói bị loại bỏ trông giống hệt nhau trong cửa sổ trạng thái. Chỉ các bộ đếm phân biệt chúng, nên hãy đọc bộ đếm trước.
Sau đó quan sát phía máy chủ trong khi một lần thử được cho phép diễn ra, thay vì chạy một lần quét riêng từ vị trí thứ ba:
wg show wg0 latest-handshakes
tcpdump -n -i eth0 udp port 51820 -c 10
Lệnh đầu tiên báo cáo lần bắt tay cuối cùng theo từng peer, đây là bằng chứng trực tiếp rằng một cuộc trao đổi đã xác thực đã hoàn tất. Lệnh thứ hai cho thấy các gói cho trình lắng nghe có đến nơi hay không, điều này tách một vấn đề đường đi khỏi một vấn đề cấu hình trong một bước.
Nếu bản ghi không cho thấy gì, gói chưa bao giờ đến máy chủ và cấu hình đường hầm không phải là nghi phạm. Nếu nó cho thấy các gói đến từ địa chỉ mong đợi trong khi bắt tay vẫn ở mức không, thì khóa hoặc địa chỉ được phép của peer là nơi tiếp theo cần xem.
Tương quan tại máy chủ khi bạn quản trị nó
Xác nhận rằng trình lắng nghe tồn tại và tường lửa của nhà cung cấp cho phép cổng UDP. Một quy tắc tường lửa trên máy chủ và một nhóm bảo mật đám mây là hai cổng độc lập, và mỗi cái đều có thể loại bỏ một gói mà cái kia đã cho phép. Kiểm tra cả hai theo cổng thực tế trong cấu hình chứ không phải cổng bạn nhớ.
Địa chỉ quan trọng ngang với cổng. Một máy chủ lắng nghe trên một địa chỉ cụ thể sẽ không trả lời một gói đến trên địa chỉ khác, và một máy chủ có nhiều giao diện có thể nhận phép thử trên giao diện mà bạn không định dùng.
Giữ mọi thử nghiệm trong các hệ thống mà bạn được phép thử. So sánh hữu ích là giữa một lần thử thật của máy khách và đường đi mong đợi của máy chủ, không phải một đợt quét rộng hơn các địa chỉ tình cờ thuộc cùng nhà cung cấp.
Đọc kết quả quét một cách trung thực
Quét là một cách rẻ để kiểm tra rằng một máy chủ tồn tại và một cổng không bị một thiết bị trung gian chặn rõ ràng. Đó không phải là bằng chứng về khả năng tiếp cận cho một giao thức đã xác thực, và chắc chắn không phải là một thử nghiệm cấu hình.
Bằng chứng mạnh hơn là một lần bắt tay hoàn tất từ máy khách mà bạn thực sự quan tâm, tiếp theo là một yêu cầu dùng đường hầm và nhận được phản hồi. Trình tự đó kiểm tra khóa, địa chỉ được phép, cả hai tường lửa và đường về trong một lần.
Khi lần thử thật thất bại, sự cố vẫn phải được chẩn đoán bằng bộ đếm của máy khách và bản ghi của máy chủ chứ không phải bằng một phép thử khác. Mô tả giao thức giải thích tại sao một gói chưa xác thực không nhận được câu trả lời, và đó chính là toàn bộ lý do kết quả quét mơ hồ.