โครงการริเริ่ม DNS flag day ปี 2020 เพื่อแก้ไขปัญหาการแตกแฟรกเมนต์และการสนับสนุน TCP

วันนี้ บริการ DNS รายใหญ่และผู้ผลิตเซิร์ฟเวอร์ DNS จำนวนมากจะจัดงานร่วมกัน วันธง DNS ปี 2020ออกแบบมาเพื่อเน้นความสนใจ การตัดสินใจ ปัญหา ด้วยการกระจายตัวของ IP เมื่อประมวลผลข้อความ DNS ขนาดใหญ่ นี่เป็นเหตุการณ์ครั้งที่สองเมื่อปีที่แล้ว “วันธง DNS” มีสมาธิ ในการประมวลผลคำขอ EDNS ที่ถูกต้อง

ผู้เข้าร่วมในโครงการริเริ่ม DNS flag day ปี 2020 กำลังเรียกร้องให้มีขนาดบัฟเฟอร์ที่แนะนำสำหรับ EDNS ให้คงที่เป็น 1232 ไบต์ (ขนาด MTU 1280 ลบ 48 ไบต์สำหรับส่วนหัว) เช่นเดียวกับ แปลภาษา การประมวลผลคำขอผ่าน TCP เป็นคุณสมบัติที่ต้องมีบนเซิร์ฟเวอร์ ใน RFC 1035 เฉพาะการสนับสนุนการประมวลผลคำขอผ่าน UDP เท่านั้นที่ถูกทำเครื่องหมายว่าเป็นข้อบังคับ และ TCP ถูกระบุว่าเป็นที่ต้องการ แต่ไม่จำเป็นสำหรับการดำเนินการ ใหม่ RFC 7766 и RFC 5966 ระบุ TCP อย่างชัดเจนว่าเป็นความสามารถที่จำเป็นสำหรับ DNS เพื่อให้ทำงานได้อย่างถูกต้อง ความคิดริเริ่มเสนอให้บังคับให้เปลี่ยนจากการส่งคำขอผ่าน UDP เป็นการใช้ TCP ในกรณีที่ขนาดบัฟเฟอร์ EDNS ที่กำหนดไว้ไม่เพียงพอ

การเปลี่ยนแปลงที่เสนอจะขจัดความสับสนในการเลือกขนาดบัฟเฟอร์ EDNS และแก้ปัญหาการกระจายตัวของข้อความ UDP ขนาดใหญ่ ซึ่งการประมวลผลมักจะนำไปสู่การสูญเสียแพ็กเก็ตและการหมดเวลาในฝั่งไคลเอ็นต์ ในฝั่งไคลเอ็นต์ ขนาดบัฟเฟอร์ EDNS จะคงที่และการตอบกลับจำนวนมากจะถูกส่งไปยังไคลเอ็นต์ผ่าน TCP ทันที การยกเลิกการส่งข้อความขนาดใหญ่ผ่าน UDP จะช่วยแก้ปัญหาแพ็กเก็ตขนาดใหญ่ที่ทิ้งบนไฟร์วอลล์บางตัวและอนุญาตการบล็อก การโจมตี สำหรับการวางพิษแคช DNS ขึ้นอยู่กับการจัดการแพ็คเก็ต UDP ที่กระจัดกระจาย (เมื่อแยกออกเป็นส่วน ๆ ส่วนที่สองจะไม่รวมส่วนหัวที่มีตัวระบุดังนั้นจึงสามารถปลอมแปลงได้ซึ่งเพียงพอสำหรับการตรวจสอบเท่านั้นที่จะจับคู่) .

เริ่มตั้งแต่วันนี้ ผู้ให้บริการ DNS ที่เข้าร่วม ได้แก่ CloudFlare, Quad 9, Cisco (OpenDNS) และ Google จะค่อยๆเปลี่ยนไป ขนาดบัฟเฟอร์ EDNS จาก 4096 ถึง 1232 ไบต์บนเซิร์ฟเวอร์ DNS (การเปลี่ยนแปลง EDNS จะกระจายไปเป็นเวลา 4-6 สัปดาห์ และจะครอบคลุมจำนวนคำขอที่เพิ่มขึ้นเมื่อเวลาผ่านไป) การตอบสนองต่อคำขอ UDP ที่ไม่พอดีกับขีดจำกัดใหม่จะถูกส่งผ่าน TCP ผู้จำหน่ายเซิร์ฟเวอร์ DNS รวมถึง BIND, Unbound, Knot, NSD และ PowerDNS จะปล่อยการอัปเดตเพื่อเปลี่ยนขนาดบัฟเฟอร์ EDNS เริ่มต้นจาก 4096 ไบต์เป็น 1232 ไบต์

ท้ายที่สุดแล้ว การเปลี่ยนแปลงเหล่านี้อาจนำไปสู่ปัญหาในการแก้ปัญหาเมื่อเข้าถึงเซิร์ฟเวอร์ DNS ที่มีการตอบสนอง UDP DNS เกิน 1232 ไบต์ และไม่สามารถส่งการตอบสนอง TCP ได้ การทดลองที่ดำเนินการที่ Google แสดงให้เห็นว่าการเปลี่ยนขนาดของบัฟเฟอร์ EDNS แทบไม่มีผลกระทบต่ออัตราความล้มเหลว - ด้วยบัฟเฟอร์ 4096 ไบต์ จำนวนคำขอ UDP ที่ถูกตัดทอนคือ 0.345% และจำนวนการลองใหม่ที่ไม่สามารถเข้าถึงได้ผ่าน TCP คือ 0.115 % ด้วยบัฟเฟอร์ขนาด 1232 ไบต์ ตัวเลขเหล่านี้คือ 0.367% และ 0.116% การทำให้ TCP รองรับคุณสมบัติ DNS ที่จำเป็นจะทำให้เกิดปัญหากับเซิร์ฟเวอร์ DNS ประมาณ 0.1% มีข้อสังเกตว่าในสภาวะสมัยใหม่ หากไม่มี TCP การทำงานของเซิร์ฟเวอร์เหล่านี้จะไม่เสถียรอยู่แล้ว

ผู้ดูแลระบบเซิร์ฟเวอร์ DNS ที่เชื่อถือได้ควรตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ของตนตอบสนองผ่าน TCP บนพอร์ตเครือข่าย 53 และพอร์ต TCP นี้ไม่ถูกบล็อกโดยไฟร์วอลล์ เซิร์ฟเวอร์ DNS ที่มีชื่อเสียงไม่ควรส่งการตอบสนอง UDP ที่ใหญ่กว่า
ขอขนาดบัฟเฟอร์ EDNS บนเซิร์ฟเวอร์เอง ขนาดบัฟเฟอร์ EDNS ควรตั้งค่าเป็น 1232 ไบต์ ตัวแก้ไขมีข้อกำหนดเดียวกันโดยประมาณ - ความสามารถบังคับในการตอบสนองผ่าน TCP, การสนับสนุนบังคับสำหรับการส่งคำขอซ้ำผ่าน TCP เมื่อได้รับการตอบกลับ UDP ที่ถูกตัดทอน และการตั้งค่าบัฟเฟอร์ EDNS เป็น 1232 ไบต์

พารามิเตอร์ต่อไปนี้มีหน้าที่รับผิดชอบในการตั้งค่าขนาดบัฟเฟอร์ EDNS ในเซิร์ฟเวอร์ DNS ที่แตกต่างกัน:

  • ผูก

    ตัวเลือก {
    edns-udp-ขนาด 1232;
    สูงสุด-udp-ขนาด 1232;
    };

  • ปม DNS

    น้ำหนักบรรทุกสูงสุด UDP: 1232

  • ตัวแก้ไขปม

    net.bufsize(1232)

  • PowerDNS เผด็จการ

    udp-การตัดทอนเกณฑ์=1232

  • ตัวเรียกซ้ำ PowerDNS

    edns-outgoing-bufsize=1232
    udp-การตัดทอนเกณฑ์=1232

  • หลุด

    edns-บัฟเฟอร์ขนาด: 1232

  • NSD

    ขนาด ipv4-edns: 1232
    ขนาด ipv6-edns: 1232

    ที่มา: opennet.ru

  • เพิ่มความคิดเห็น