MTU ต่อเส้นทางบน Linux: สามตัวควบคุมขนาด หนึ่งเส้นทาง
MTU ของอินเทอร์เฟซ MTU ของเส้นทาง และขีดจำกัด MSS ทำงานต่างชั้นกัน ผูกงบประมาณกับเส้นทางที่ชนะการค้นหา และเก็บการเปลี่ยนแปลงให้ย้อนกลับได้
การตั้งค่าสามอย่างบนไคลเอนต์ Linux ล้วนฟังดูเหมือน «ทำให้แพ็กเก็ตเล็กลง» และมันทำงานต่างชั้นกัน MTU ของอินเทอร์เฟซจำกัดทุกแพ็กเก็ตที่อุปกรณ์ส่งออก MTU ของเส้นทางจำกัดแพ็กเก็ตที่ใช้เส้นทางนั้น ซึ่งมักเป็นสิ่งที่คุณต้องการจริง ๆ สำหรับปลายทาง VPN หนึ่งแห่ง การหนีบ TCP MSS เปลี่ยนสิ่งที่ปลายทั้งสองเจรจากัน และไม่ทำอะไรกับ UDP
สามตัวควบคุมที่ดูเหมือนปุ่มเดียวกัน
วางเรียงข้างกันก่อนเลือก เพราะการเลือกแถวผิดอธิบายคำแนะนำส่วนใหญ่ที่ใช้ไม่ได้:
| Control | Scope | What it cannot fix |
|---|---|---|
| Interface MTU | Every packet the device sends | Nothing, but it over-constrains unrelated traffic |
| Route MTU | Packets using that route | A send that the lookup never routes there |
| MSS clamp | TCP handshake on that path | UDP payload sizes and ICMP |
การลด MTU ของ Ethernet ทั้งเครื่องเป็นเวอร์ชันหยาบ ๆ ของการแก้ปัญหานี้ มันได้ผล และยังลงโทษแอปอื่นทุกตัวบนโฮสต์ รวมถึงตัวที่เส้นทางปกติอยู่แล้ว ค่าต่อเส้นทางสื่อความตั้งใจเดียวกันโดยไม่มีค่าใช้จ่ายข้างเคียง
การเปรียบเทียบใช้ได้กับทราฟฟิกที่โฮสต์สร้างเองเท่านั้น การส่งต่อแพ็กเก็ตให้ไคลเอนต์อื่นเกี่ยวข้องกับเส้นทางของผู้ใช้รายนั้นและงบประมาณภายนอกของอุโมงค์ และเมตริกเส้นทางบนโฮสต์นี้ไม่ข้ามพรมแดนนั้น
ผูกงบประมาณกับเส้นทางที่ชนะการค้นหา
บันทึกเส้นทาง IPv4 ตัวอย่างมีลักษณะดังนี้:
ip -4 route get 10.60.0.20
ip -4 route add 10.60.0.0/16 dev tun-office src 10.90.0.2 mtu 1380
อ่านบันทึกเป็นคำอธิบายเจตนา ไม่ใช่ค่าที่จะวางลงไป คำนำหน้า อุปกรณ์ และแหล่งที่ต้องการต้องตรงกับการกำหนดค่าจริง และ ตัวเลขต้องมาจากหลักฐานเกี่ยวกับเส้นทางที่ห่อหุ้มไว้ ไม่ใช่จากโพสต์บล็อก MTU ของเส้นทางจำกัดแพ็กเก็ต IP ชั้นใน ซึ่งไม่เหมือนกับเพย์โหลด TCP 1380 ไบต์หรือแพ็กเก็ตภายนอกที่เข้ารหัส 1380 ไบต์
ดูก่อนว่าการค้นหาแก้จริงที่ไหนก่อนจะเพิ่มอะไร โฮสต์ที่มีกฎนโยบายอาจกำหนดเส้นทางปลายทางหนึ่งผ่านตารางอื่นที่ไม่ใช่ main และเมตริกที่มีอยู่เฉพาะใน main จะมองไม่เห็นสำหรับคำขอนั้น เปรียบเทียบ ip -4 route show table all กับคำตอบจาก ip route get รวมถึงบริบทของเครื่องหมายหรือเนมสเปซเมื่อกฎใช้งาน หากทั้งสองไม่ตรงกัน ตารางที่ตอบคือตารางที่ต้องมีเมตริก ไม่ใช่ตารางที่ดูเรียบร้อยกว่า
mtu ไม่ใช่ mtu lock
โดยค่าเริ่มต้น เคอร์เนลยังอัปเดต MTU ของเส้นทางจากผลตอบกลับ ICMP ได้ ซึ่งการค้นพบ MTU ของเส้นทางมีไว้เพื่อสิ่งนี้ การเพิ่ม lock จะหยุดสิ่งนั้น มันเป็นการตัดสินใจอีกแบบ ไม่ใช่วิธีที่แรงกว่าสำหรับเก็บตัวเลขเดิม และสำหรับ IPv4 มันเปลี่ยนการจัดการบิต «อย่าแบ่งส่วน» ตามเอกสาร
การล็อกสมเหตุสมผลเมื่อคุณวัดเส้นทางแล้วและต้องการให้ค่าคงที่ ไม่ว่าจะมีอะไรเข้ามา มันเป็นค่าเริ่มต้นที่ไม่ดีเมื่อเครือข่ายส่งผลตอบกลับขนาดที่ถูกต้อง เพราะเคอร์เนลปรับไม่ได้อีกแล้วและความล้มเหลวจะย้ายไปเป็นอาการอื่น
ถ้า ICMP ถูกกรองที่ใดที่หนึ่งบนเส้นทาง ไม่มีการตั้งค่าเส้นทางใดแก้ได้ การแก้อยู่ที่ตัวกรอง และ MTU ที่เล็กกว่าคือทางอ้อมที่ซ่อนข้อบกพร่องจริงไว้จนกว่าเส้นทางจะเปลี่ยนครั้งถัดไป
ซอฟต์แวร์อุโมงค์เพิ่มปุ่มปรับขนาดของตัวเอง
OpenVPNของ mssfix ปรับขนาดเซกเมนต์ TCP สำหรับกรณีอุโมงค์ UDP ที่เอกสารระบุไว้ มันทำงานบนบทสนทนา TCP จึงไม่ใช่อีกการสะกดของ MTU เส้นทางของระบบปฏิบัติการ และช่วยบริการ UDP ที่เพิกเฉยต่อการเจรจาไม่ได้
อย่าวาง MTU ของเส้นทาง การเปลี่ยน MTU ของอินเทอร์เฟซ และการหนีบ MSS ไว้ในหน้าต่างการเปลี่ยนแปลงเดียวกัน ถ้าปัญหาหายไปคุณจะไม่รู้ว่าอันไหนสำคัญ และสิ่งที่เก็บไว้จะจำกัดทราฟฟิกไปอีกหลายปีโดยไม่มีเหตุผลที่ใครจำได้
ทำให้ย้อนกลับได้ แล้วพิสูจน์
เจ้าของเส้นทางตัวจริงเป็นผู้ตัดสินว่าการเปลี่ยนแปลงอยู่รอดหลังการเชื่อมต่อใหม่ ไคลเอนต์ VPN ที่ติดตั้งเส้นทางแบบไดนามิกมักสร้างใหม่โดยไม่มีเมตริกของคุณ และ ip route add แบบทำมือก็ดูเหมือนการแก้ที่ล้มเหลวในอีกหนึ่งวันถัดมา ใส่ค่าในการกำหนดค่าของผู้จัดการ และถ้าต้องการการทดลองชั่วคราว ให้บันทึกเส้นทางเดิมไว้ก่อน
ทดสอบด้วยการเชื่อมต่อใหม่ที่ทำงานที่ค้างอยู่ แล้วยืนยันว่าเส้นทางส่วนตัวที่ตั้งใจยังชนะและปลายทางที่ไม่เกี่ยวข้องไม่เปลี่ยน เชื่อมต่ออุโมงค์ใหม่แล้วอ่านเส้นทางอีกครั้ง เพราะค่าที่หายไปเมื่อเชื่อมต่อใหม่ไม่ใช่การแก้
ถ้าหลักฐานไม่สนับสนุนการเปลี่ยนแปลง ให้นำการเขียนทับออกผ่านผู้จัดการของมันและคืนค่าแอตทริบิวต์เส้นทางเดิมแทนการลบเส้นทาง จากนั้นบันทึกว่าคุณวัดอะไร บนเส้นทางใด เพื่อให้คนถัดไปแยกความ การพัฒนาจริงออกจากการทดลองที่ปล่อยให้ทำงานอยู่