นิสัยคือการลด MTU ทันทีที่ WireGuard ทำงานผิดปกติ และนิสัยนั้นซ่อนข้อบกพร่องอีกอย่างไว้ เกตเวย์ที่ไม่ส่งต่อและเส้นทางที่ไม่รับแพ็กเก็ตใหญ่ให้รูปแบบที่แยกออกจากกันได้ อย่างหนึ่งล้มเหลวทั้งสองทิศทางและทุกขนาด อีกอย่างอยู่รอดกับคำขอเล็กและตายเมื่อเจอคำขอใหญ่ ระบุว่าคุณมีรูปแบบไหนก่อนจะเปลี่ยนตัวเลขใด ๆ การทดสอบมีต้นทุนต่ำและกำจัดสาเหตุที่เป็นไปได้ครึ่งหนึ่ง

สองความล้มเหลว สองรูปแบบที่ต่างกัน

ปัญหาการส่งต่อปรากฏขึ้นทันทีหลังเซิร์ฟเวอร์ การจับมือสำเร็จ ที่อยู่ของอุโมงค์ตอบสนอง และไม่มีอะไรหลังเกตเวย์ที่เข้าถึงได้แม้ด้วยคำขอเล็ก ๆ แพ็กเก็ตไปถึงเซิร์ฟเวอร์แต่ไม่ถูกส่งต่อ หรือคำตอบไม่มีเส้นทางกลับ

ปัญหาเรื่องขนาดจะปรากฏเฉพาะเมื่อเกินขีดจำกัด DNS การจับมือ TCP และการเรียก API เล็ก ๆ ทำงานได้ ในขณะที่การดาวน์โหลดไฟล์หรือคำตอบขนาดใหญ่ค้าง แพ็กเก็ตที่พอดีเดินทางจากต้นจนจบ และแพ็กเก็ตที่ไม่พอดีถูกทิ้งที่ใดที่หนึ่งโดยไม่มีรายงานที่เป็นประโยชน์

คำอธิบายเหล่านั้นชี้ไปที่คนละคนและไฟล์กำหนดค่าคนละไฟล์ จึงคุ้มค่าที่จะวัดรูปแบบมากกว่าการเดา ping เดียวไปยังเกตเวย์ไม่สามารถแยกทั้งสองออกจากกันได้

ตัดการส่งต่อออกก่อนจะลดอะไรลง

ทดสอบปลายทางที่เลยเกตเวย์ไป ไม่ใช่ตัวเกตเวย์ การ ping ไปยังที่อยู่ของอุโมงค์ของเซิร์ฟเวอร์พิสูจน์เพียงว่าอินเทอร์เฟซทำงานและคุณเข้าถึงเครื่องที่สิ้นสุดอุโมงค์ได้ ทราฟฟิกสำหรับเครือข่ายที่กว้างกว่าขึ้นอยู่กับการเปิดใช้งานการส่งต่อ IP บนเครื่องนั้นและไฟร์วอลล์ที่อนุญาตโฟลว์ที่ถูกส่งต่อ ทั้งสองอย่างต้องเป็นจริง และหากอย่างใดอย่างหนึ่งเป็นเท็จจะเกิดความเงียบแบบเดียวกัน

การกำหนดเส้นทางขากลับสำคัญพอ ๆ กัน หากเครือข่ายปลายทางไม่รู้ว่าจะไปถึงที่อยู่ของอุโมงค์ของไคลเอนต์ได้อย่างไร คำขอจะมาถึงและคำตอบจะหายไป และไคลเอนต์รายงานการหมดเวลาซึ่งดูเหมือนกับการส่งต่อที่ถูกทิ้งทุกประการ

ที่ใดการออกแบบใช้การแปลที่อยู่ กฎการแปลก็เป็นส่วนหนึ่งของเส้นทางขากลับนั้น การลบมันออกระหว่างตามหาปัญหา MTU จะเปลี่ยนการออกแบบที่ทำงานอยู่ให้กลายเป็นพัง จึงควรอ่านกฎที่มีอยู่ก่อนแก้ไข

วัดว่าการขาดเริ่มที่ไหน

อ่านสถานะการส่งต่อและกฎการกรองก่อน นี่คือการตรวจสอบแบบอ่านอย่างเดียวและตอบคำถามราคาถูกว่า

sysctl net.ipv4.ip_forward
sudo iptables -S FORWARD
ip route get 10.30.0.9

จากนั้นทดสอบขนาดด้วยบิต don’t-fragment จากไคลเอนต์ไปยังโฮสต์ที่เลยเกตเวย์ไป

ping -M do -s 1200 10.30.0.9
ping -M do -s 1400 10.30.0.9

หากการทดสอบแรกทำงานและการทดสอบที่สองล้มเหลวด้วยข้อผิดพลาดการแบ่งส่วน เส้นทางกำลังบอกขนาดที่ใช้งานได้ของคุณ หากทั้งสองไม่ทำงาน คุณกำลังดูการส่งต่อหรือการกำหนดเส้นทาง และ MTU ไม่ใช่ตัวแปรที่ต้องเปลี่ยน

ObservationPoints towardWhere to look
Nothing beyond the gateway worksForwarding or return routeForwarding flag, filter rules, routing table
Small works, large stallsPacket size on the pathTunnel MTU and the link underneath
Only names failDNS resolutionThe resolver configured for the tunnel
Works sometimesMultiple paths or state expiryFlow selection and NAT state

ซ่อมชั้นที่คุณพิสูจน์แล้ว

เมื่อการส่งต่อเป็นข้อบกพร่อง การแก้ไขคือกฎการส่งต่อหรือเส้นทาง ที่เขียนให้แคบที่สุดเท่าการออกแบบอนุญาต เมื่อขนาดเป็นข้อบกพร่อง การแก้ไขคือ MTU ที่คำนึงถึงการห่อหุ้มบนเส้นทางเฉพาะนี้ ใช้กับอินเทอร์เฟซที่ต้องการ ไม่ใช่กับอะแดปเตอร์ทุกตัวในกองเรือ

ไม่ว่าจะทางใด หลังจากนั้นให้ทำภารกิจเดิมซ้ำกับปลายทางเดิม หากการถ่ายโอนขนาดใหญ่เดิมเสร็จสมบูรณ์ตอนนี้ การเปลี่ยนแปลงได้จัดการกับชั้นที่ล้มเหลว หากมีเพียงการทดสอบเล็กที่ดีขึ้น คุณรักษาอาการและขีดจำกัดที่แท้จริงยังอยู่

เขียนบันทึกว่าคุณสังเกตรูปแบบไหนก่อนการเปลี่ยนแปลง บรรทัดเดียวที่บันทึกไว้ข้างการแก้ไขคือสิ่งที่ป้องกันไม่ให้คนถัดไปลด MTU ที่ไม่เคยเป็นปัญหา

บทความที่เกี่ยวข้อง