สแกน UDP บอกว่าถูกกรอง: เพื่อน WireGuard ของคุณล่มจริงหรือ
การทดสอบที่ไม่ผ่านการตรวจสอบสิทธิ์อาจไม่ได้รับคำตอบใด ๆ จากเพื่อนที่ทำงานปกติ ทดสอบไคลเอนต์ตัวจริง แล้วเชื่อมโยงตัวรับฟังกับเส้นทางแพ็กเก็ตบนเซิร์ฟเวอร์
สแกนเนอร์พิมพ์ผลว่าพอร์ต UDP เปิดหรือถูกกรอง และมักสรุปภายในไม่กี่วินาทีว่า tunnel เสีย อาจเป็นเช่นนั้นก็ได้ แต่การสแกนไม่ได้พิสูจน์เรื่องนั้น UDP ไม่มีการจับมือเชื่อมต่อใด ๆ และ WireGuard ไม่ตอบสิ่งใดที่ตรวจสอบสิทธิ์ไม่ได้ ความเงียบจึงเป็นคำตอบที่คาดไว้สำหรับการทดสอบส่วนใหญ่
ให้ทำงานจากฝั่งไคลเอนต์ออกไปแทน และมองการสแกนเป็นข้อมูลอ่อน ๆ หนึ่งจุดในหลายจุด
สแกนเนอร์เห็นอะไรได้และเห็นอะไรไม่ได้
สแกนเนอร์ UDP ส่งเพย์โหลดแล้วรอ ถ้ามี ICMP port-unreachable กลับมา ก็รายงานได้ว่าพอร์ตปิด ถ้าไม่มีอะไรกลับมา ผลลัพธ์ก็กำกวมโดยการออกแบบ: เส้นทางที่ถูกกรอง โฮสต์ที่ไม่มีอยู่ และบริการที่ทำงานอยู่แต่เพิกเฉยต่อเพย์โหลด ล้วนสร้างความเงียบแบบเดียวกัน สามสถานะต่างกัน แต่ได้สตริงเอาต์พุตเดียว
WireGuard ทำให้ความกำกวมนั้นแย่ลงโดยเจตนา โปรโตคอลยอมรับแพ็กเก็ตเมื่อตรวจสอบสิทธิ์ได้เท่านั้น การทดสอบด้วยคีย์ผิดจึงถูกทิ้งโดยไม่มีคำตอบ ไม่มีแบนเนอร์ ไม่มีสตริงเวอร์ชัน และไม่มีข้อความแสดงข้อผิดพลาดให้เก็บลายนิ้วมือ
การทดสอบ TCP บนหมายเลขพอร์ตเดียวกันไม่ได้ทดสอบอะไรที่เกี่ยวข้อง มันไปเรียกตัวรับฟังอีกตัวที่อาจไม่มีอยู่ และการปฏิเสธของมันไม่ได้บอกอะไรเกี่ยวกับ UDP
สถานะเปิดที่ถูกกรองจึงอธิบายความไม่แน่ใจของสแกนเนอร์ได้แม่นยำกว่าอธิบายเซิร์ฟเวอร์ของคุณ
ไล่ไคลเอนต์ตัวจริงจากโปรไฟล์เข้าไปข้างใน
เริ่มจากมุมมองของไคลเอนต์เอง อินเทอร์เฟซมีที่อยู่หรือไม่ การกำหนดค่าชี้ปลายทางถูกต้องหรือไม่ และตัวนับการจับมือขยับเมื่อพยายามเชื่อมต่อหรือไม่ ไคลเอนต์ที่ไม่เคยส่งแพ็กเก็ตกับไคลเอนต์ที่แพ็กเก็ตถูกทิ้งดูเหมือนกันในหน้าต่างสถานะ มีเพียงตัวนับเท่านั้นที่แยกได้ จึงควรอ่านตัวนับก่อน
จากนั้นให้ดูฝั่งเซิร์ฟเวอร์ขณะมีการพยายามที่ได้รับอนุญาตหนึ่งครั้ง แทนที่จะรันการสแกนแยกจากสถานที่ที่สาม:
wg show wg0 latest-handshakes
tcpdump -n -i eth0 udp port 51820 -c 10
คำสั่งแรกบอกการจับมือครั้งล่าสุดของแต่ละเพื่อน ซึ่งเป็นหลักฐานตรงว่าการแลกเปลี่ยนที่ตรวจสอบสิทธิ์แล้วเสร็จสิ้น คำสั่งที่สองแสดงว่าแพ็กเก็ตสำหรับตัวรับฟังมาถึงหรือไม่ ซึ่งแยกปัญหาของเส้นทางออกจากปัญหาของการกำหนดค่าได้ในขั้นตอนเดียว
ถ้าการดักจับไม่แสดงอะไรเลย แพ็กเก็ตไปไม่ถึงโฮสต์และการกำหนดค่า tunnel จึงไม่ใช่ผู้ต้องสงสัย ถ้ามันแสดงแพ็กเก็ตที่มาจากที่อยู่ที่คาดไว้ขณะที่การจับมือยังเป็นศูนย์ สถานที่ถัดไปที่ควรดูคือคีย์หรือที่อยู่ที่ได้รับอนุญาตของเพื่อน
เชื่อมความสัมพันธ์ที่เซิร์ฟเวอร์เมื่อคุณดูแลมัน
ยืนยันว่าตัวรับฟังมีอยู่จริงและไฟร์วอลล์ของผู้ให้บริการอนุญาตพอร์ต UDP กฎไฟร์วอลล์ของโฮสต์และกลุ่มความปลอดภัยบนคลาวด์เป็นด่านสองด่านที่เป็นอิสระต่อกัน และแต่ละด่านสามารถทิ้งแพ็กเก็ตที่อีกด่านอนุญาตได้ ตรวจทั้งสองกับพอร์ตจริงในการกำหนดค่า ไม่ใช่พอร์ตที่คุณจำได้
ที่อยู่สำคัญพอ ๆ กับพอร์ต เซิร์ฟเวอร์ที่รับฟังบนที่อยู่หนึ่งจะไม่ตอบแพ็กเก็ตที่มาถึงอีกที่อยู่หนึ่ง และโฮสต์ที่มีหลายอินเทอร์เฟซอาจรับการทดสอบบนอินเทอร์เฟซที่คุณไม่ได้ตั้งใจ
เก็บทุกการทดสอบไว้ในระบบที่คุณได้รับอนุญาตให้ทดสอบ การเปรียบเทียบที่มีประโยชน์คือระหว่างการพยายามจริงของไคลเอนต์หนึ่งครั้งกับเส้นทางเซิร์ฟเวอร์ที่คาดไว้ ไม่ใช่การไล่กวาดที่อยู่ที่บังเอิญเป็นของผู้ให้บริการรายเดียวกันในวงกว้างกว่า
อ่านผลการสแกนอย่างซื่อตรง
การสแกนเป็นวิธีราคาถูกในการตรวจว่าโฮสต์มีอยู่และพอร์ตไม่ได้ถูกอุปกรณ์กลางปิดกั้นอย่างชัดเจน มันไม่ใช่หลักฐานการเข้าถึงสำหรับโปรโตคอลที่ตรวจสอบสิทธิ์ และไม่ใช่การทดสอบการกำหนดค่าแน่นอน
หลักฐานที่หนักแน่นกว่าคือการจับมือที่เสร็จสมบูรณ์จากไคลเอนต์ที่คุณใส่ใจจริง ๆ ตามด้วยคำขอที่ใช้ tunnel และได้รับคำตอบ ลำดับนั้นทดสอบคีย์ ที่อยู่ที่ได้รับอนุญาต ไฟร์วอลล์ทั้งสอง และเส้นทางขากลับในคราวเดียว
เมื่อการพยายามจริงล้มเหลว ยังต้องวินิจฉัยความขัดข้องด้วยตัวนับของไคลเอนต์และการดักจับของเซิร์ฟเวอร์ ไม่ใช่ด้วยการทดสอบอีกครั้ง คำอธิบายโปรโตคอล อธิบายว่าทำไมแพ็กเก็ตที่ยังไม่ตรวจสอบสิทธิ์จึงไม่ได้รับคำตอบ และนั่นคือเหตุผลทั้งหมดที่ผลการสแกนกำกวม