... เพื่อชดเชยเซิร์ฟเวอร์ DNS ที่เสียหายซึ่งอยู่นอกเหนือการควบคุมของเรา
ปัญหาของเรา: เราปรับใช้อุปกรณ์ฝังตัวที่รวบรวมข้อมูลเซ็นเซอร์ในไซต์ต่างๆซึ่งส่วนใหญ่เป็น IPv4 เท่านั้น บางเว็บไซต์มีเครือข่ายที่ได้รับการบำรุงรักษาไม่ดีเช่น DNS ที่กำหนดค่าผิดหรือแคชในลักษณะอื่นและ / หรือไฟร์วอลล์ที่ละเว้นการสืบค้น AAAA ทั้งหมดหรือตอบกลับด้วยการตอบกลับที่ขาด (เช่น IP ผิดแหล่ง! ในฐานะผู้จัดหาภายนอกให้กับแผนกสิ่งอำนวยความสะดวกเราไม่มีอิทธิพลใด ๆ ต่อแผนกไอที (บางครั้งลังเล) โอกาสที่พวกเขาจะแก้ไขเซิร์ฟเวอร์ DNS / ไฟร์วอลล์ของพวกเขาเมื่อใดก็ตามที่เร็ว ๆ นี้นั้นมีขนาดเล็กที่สุด
ผลกระทบที่เกิดขึ้นกับอุปกรณ์ของเราคือแต่ละ gethostbyname () กระบวนการต้องรอจนกว่า AAAA จะหมดเวลาสอบถามซึ่งบางกระบวนการได้หมดเวลาเชื่อมต่อแล้ว
ฉันกำลังมองหาวิธีแก้ปัญหาที่ ...
- ทั้งระบบ ฉันไม่สามารถกำหนดค่าแอปพลิเคชันหลายสิบรายการแยกกัน
- ไม่ถาวรและกำหนดค่าได้ เราจำเป็นต้อง (เปิดใช้งานใหม่) เปิดใช้งาน IPv6 ตำแหน่ง / เมื่อได้รับการแก้ไข / เปิดใช้งาน รีบูตก็โอเค
- หากโซลูชันต้องการไลบรารีหลักเช่น glibc ที่จะถูกแทนที่แพคเกจไลบรารีทดแทนควรพร้อมใช้งานจากแหล่งเก็บข้อมูลที่ทราบดีว่ามีการบำรุงรักษาที่ดี (เช่น Debian Testing, Ubuntu universe, EPEL) การสร้างตัวเองไม่ใช่ตัวเลือกด้วยเหตุผลมากมายที่ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มต้นที่ใดดังนั้นฉันจึงไม่แสดงรายการเหล่านั้นเลย ...
ทางออกที่ชัดเจนที่สุดคือการกำหนดค่าไลบรารีตัวแก้ไขเช่นผ่าน / etc / { resolv , nsswitch , gai } .conf เพื่อไม่ให้สืบค้นระเบียน AAAA ตัวเลือกที่ resolv.conf no-inet6
เป็นข้อเสนอแนะที่นี่จะว่าสิ่งที่ฉันกำลังมองหา น่าเสียดายที่ไม่มีการใช้งานอย่างน้อยไม่ได้อยู่ในระบบของเรา (libc6-2.13-38 + deb7u4 บน Debian 7; libc6-2.19-0ubuntu6.3 บน Ubuntu 14.04)
แล้วงั้นเหรอ? หนึ่งค้นหาวิธีการต่อไปนี้ที่แนะนำใน SF และที่อื่น ๆ แต่ไม่ใช่วิธีการทำงาน:
- IPv6 ปิดการใช้งานทั้งหมดเช่นบัญชีดำโดย LKM IPv6 ใน /etc/modprobe.d/
sysctl -w net.ipv6.conf.all.disable_ipv6=1
หรือ ( หมดความอยากรู้: ทำไมตัวแก้ไขปัญหาจึงขอ AAAA เมื่อปิดใช้งาน IPv6 แล้ว ) - การลบ
options inet6
จาก /etc/resolv.conf มันไม่ได้มีอยู่ในสถานที่แรกinet6
มีการเปิดใช้งานเพียงแค่เริ่มต้นวันนี้ - การตั้งค่า
options single-request
ใน /etc/resolv.conf สิ่งนี้ช่วยให้มั่นใจได้ว่าแบบสอบถาม A และ AAAA นั้นทำตามลำดับแทนที่จะเป็นแบบขนาน - การเปลี่ยน
precedence
ใน /etc/gai.conf ที่ไม่ส่งผลต่อการสืบค้น DNS จะมีการประมวลผลการตอบกลับหลายวิธีเท่านั้น - การใช้ตัวแก้ไขภายนอก (หรือเรียกใช้ภูตตัวแก้ปัญหาในท้องถิ่นที่หลีกเลี่ยงเซิร์ฟเวอร์ DNS ที่เสีย) จะช่วยได้ แต่โดยทั่วไปจะไม่ได้รับอนุญาตจากนโยบายไฟร์วอลล์ของ บริษัท และสามารถทำให้ทรัพยากรภายในไม่สามารถเข้าถึงได้
แนวคิดทางเลือกที่น่าเกลียด:
- เรียกใช้แคช DNS บน localhost กำหนดค่าเพื่อส่งต่อข้อความค้นหาที่ไม่ใช่ AAAA ทั้งหมด แต่ตอบกลับไปยังข้อความค้นหา AAAA ด้วย NOERROR หรือ NXDOMAIN (ขึ้นอยู่กับผลลัพธ์ของแบบสอบถาม A ที่สอดคล้องกัน) ฉันไม่ทราบว่าแคช DNS สามารถทำสิ่งนี้ได้
- ใช้การจับคู่ iptables u32 ที่ชาญฉลาดหรือโมดูล iptables DNSของ Ondrej Caletka เพื่อจับคู่การสืบค้น AAAA เพื่อที่จะปฏิเสธการใช้งาน icmp (ตัวแก้ไข lib จะตอบสนองต่อสิ่งนั้นอย่างไร) หรือเปลี่ยนเส้นทางไปยังเซิร์ฟเวอร์ DNS ภายในที่ตอบสนองต่อ ทุกสิ่งด้วย NOERROR ที่ว่างเปล่า
โปรดทราบว่ามีคำถามที่คล้ายกันและเกี่ยวข้องใน SE คำถามของฉันแตกต่างกันไปตามที่อธิบายถึงปัญหาที่แท้จริงที่ฉันพยายามแก้ไขเนื่องจากมีการระบุข้อกำหนดที่ชัดเจนเนื่องจากบัญชีดำมีคำแนะนำที่ไม่ได้ผลสำหรับการใช้งานบางรายการและเนื่องจากไม่ใช่เฉพาะแอปพลิเคชันเดียว หลังจากการสนทนานี้ฉันโพสต์คำถามของฉัน