และตอนนี้มันไม่เสถียร (ข้อผิดพลาด "ไม่พบโฮสต์")
มาจากไหน/อย่างไร?
ดังที่คุณสังเกตเห็น การตั้งค่าตัวแก้ไขที่ตั้งค่าอย่างถูกต้องทั้งหมดจะได้รับการตั้งค่าสถานะที่ถูกตัดทอนในการสืบค้นครั้งแรกผ่าน UDP จากนั้นจะเปลี่ยนเป็น TCP และทุกอย่างจะเรียบร้อยดี
แน่นอน คุณจำได้ว่า DNS อยู่เหนือ UDP และ TCP (ตรงกันข้ามกับตำนานที่เป็นที่นิยม) ดังนั้นคุณต้องแน่ใจว่าเนมเซิร์ฟเวอร์ที่เชื่อถือได้ของคุณสามารถสอบถามผ่าน TCP ได้ และทุกอย่างจะเรียบร้อยดี
หลังจากการค้นหาโดย Google ฉันพบว่าการสืบค้นแบบหลาย IP ต้องมีไม่เกิน 512 ไบต์เพื่อรับประกันว่าจะมีการใช้ UDP
มันขึ้นอยู่กับ. บางครั้งคุณสามารถไปมากกว่า 1,000 ได้ แต่ที่สำคัญที่สุด สิ่งต่าง ๆ กลับไปใช้ TCP ดังนั้นจึงไม่ควรเป็นปัญหา (อาจสูญเสียประสิทธิภาพเล็กน้อย)
และหลีกเลี่ยงการสอบถามเพิ่มเติม (หรือปัญหาเกี่ยวกับไคลเอ็นต์หรือผู้ให้บริการ DNS ที่ไม่ใช่ tcp, DNS SW แบบเก่า ฯลฯ)
"ไคลเอ็นต์หรือผู้ให้บริการ no-tcp dns" ไม่ควรมีอยู่จริงเนื่องจากไม่สมเหตุสมผลและขัดต่อข้อกำหนด DNS ที่เขียนไว้... เมื่อกว่า 40 ปีก่อน!
หรือคุณมีหลักฐานเฉพาะสำหรับกรณีเหล่านั้นหรือไม่?
อย่าพยายามไปเรื่องแบบนั้น หากมีซอฟต์แวร์เหล่านี้อยู่ซอฟต์แวร์เหล่านั้นจะใช้งานไม่ได้และจะมีปัญหาอื่นๆ มากมาย เช่น สำหรับโดเมนที่มีการรักษาความปลอดภัย DNSSEC
แล้วฉันจะรู้ได้อย่างไรว่าฉันมี v4 IP กี่รายการในรายการ DNS เดียวเพื่อรับประกันคำตอบ UDP สูงสุด 512 ไบต์
สิ่งนี้เป็นไปไม่ได้ที่จะตอบโดยทั่วไป (เพราะขึ้นอยู่กับชื่อ) แต่ที่สำคัญที่สุดคือการพยายามเพิ่มประสิทธิภาพสิ่งต่าง ๆ ด้วยวิธีนั้นไร้ประโยชน์
อย่างไรก็ตามคุณสามารถคำนวณได้อย่างง่ายดาย:
- แพ็กเก็ต UDP มีส่วนหัว 8 ไบต์ก่อนข้อมูล (RFC 768)
- แพ็คเก็ต DNS ดูที่ RFC 1035 มีส่วนหัว (12 ไบต์) ตามด้วยคำถาม (จำนวนตัวแปรของไบต์ ดูภายหลัง) ตามด้วยคำตอบ (ดูภายหลัง) และเราจะถือว่าส่วนเพิ่มเติมและสิทธิ์การใช้งานว่างเปล่า
ดังนั้นเราจึงอยู่ที่ 512-8-12 = 492 ไบต์สำหรับคำถาม + คำตอบ DNS
ตอบ ก ก
บันทึกจะเป็นชื่อ (ความยาวตัวแปร) + ประเภท (2 ไบต์) + คลาส (2 ไบต์) + TTL (4 ไบต์) + ความยาว (2 ไบต์) จากนั้นข้อมูล สำหรับ ก
ข้อมูลมีขนาด 4 ไบต์ (ที่อยู่ IPv4)
คำถามคือชื่อ (ความยาวตัวแปร) + ประเภท (2 ไบต์) + คลาส (2 ไบต์)
ชื่อในแพ็กเก็ต DNS มีคุณสมบัติสองอย่างนี้:
- พวกมันถูกเข้ารหัสเป็นรายการป้ายกำกับที่นำหน้าด้วยความยาว
- อาจมีการบีบอัดเพื่อให้ชื่อหรือบางส่วนของชื่อปรากฏเพียงครั้งเดียว
ตัวอย่างเช่น ตัวอย่าง.คอม
ถูกเข้ารหัสใน DNS เป็น 7,e,x,a,m,p,l,e,3,c,o,m,0
โดยที่แต่ละความยาวคือหนึ่งไบต์ แต่ถ้าต้องการชื่อในภายหลัง ชื่อนั้นจะถูกแทนที่ด้วยพอยน์เตอร์ที่ใช้ 2 ไบต์เท่านั้น
ถ้าเราใช้ชื่อนั้น:
- ขนาดของส่วนชื่อที่เป็นปัญหาจะเป็น: 13 ไบต์ ดังนั้นขนาดทั้งหมดของคำถาม: 13 + 2 + 2 = 17
- ในคำตอบ แต่ละชื่อสามารถเป็นตัวชี้ขนาด 2 ไบต์ที่อ้างอิงชื่อในคำถาม ดังนั้นแต่ละระเบียนในคำตอบจะมีความยาว 2 ไบต์สำหรับชื่อ และส่วนที่เหลือด้านบน ดังนั้น 16 ไบต์
ดังนั้นแพ็กเก็ต DNS แบบเต็มจะมีขนาด 12 (ส่วนหัว) + 17 (คำถาม) + x คูณ 16 โดยที่ x คือจำนวน ก
บันทึก
ดังนั้นเราต้องแก้ไข: 512 = 8 + 12 + 17 + 16x
สำหรับ x ซึ่งให้ผล x=29
หรือไม่ก็.
โปรดจำไว้ว่าสิ่งนี้อยู่ภายใต้สถานการณ์ที่ดีที่สุด (ไม่มีบันทึกเพิ่มเติม/ผู้มีอำนาจ และการบีบอัดชื่อที่ใช้แบบเต็ม) และสำหรับชื่อเฉพาะ (แต่หากใช้การบีบอัด ชื่อจะปรากฏแบบเต็มเพียงครั้งเดียวในคำถาม ดังนั้นขนาดดังกล่าวจึงเปลี่ยนไปเท่านั้น)
[นอกจากนี้ อย่าติดอยู่ในอินเทอร์เน็ตแบบดั้งเดิมของศตวรรษที่แล้ว ทุกวันนี้ IPv6 ควรเป็นบรรทัดฐาน แน่นอนคุณใส่น้อยลง AAAA
ประเภทบันทึกในแพ็กเก็ต DNS ขนาดคงที่มากกว่า IPv4 :-) ]
เป็นไปได้ไหมที่จะกำหนดค่า ISC Bind ให้ส่งคืนเพียง IP เดียวในแบบสอบถามหลาย IP
ฉันไม่คิดอย่างนั้นและหากมีอยู่วิธีการผูกจะเลือก IP ใดที่จะส่งคืน หากคุณอยู่ที่นี่ คุณจะต้องแสดงเพียง IP เดียวในไฟล์โซน หรือถ้าคุณยึดติดกับแนวคิดนี้จริง ๆ (แต่ทุกครั้งที่คุณพลาดสิ่งนี้จะไม่ป้องกันปัญหาอื่น ๆ เนื่องจากลูกค้ามีรถบั๊กกี้ดังนั้นคุณจึงพยายามต่อสู้กับเนินเขาที่ไม่มีที่สิ้นสุด) คุณอาจลอง dnsdist
นั่นเป็นมีดแบบสวิสและช่วยให้ปรับแต่งได้
PS: โปรดจำไว้ว่า DNS มีส่วนขยายเพื่อให้ฝ่ายใดฝ่ายหนึ่งระบุขนาดบัฟเฟอร์ (UDP) ที่สามารถรับได้ ดู RFC 6891 ล่าสุด ขุด
ใช้ 1232
เป็นค่าเริ่มต้นที่นั่น คุณอาจสนใจโดยทั่วไปที่จะดู https://kb.isc.org/docs/aa-01219 หรือวันธง DNS ประจำปี 2563 ได้ที่ https://dnsflagday.net/2020/ นั่นคือเกี่ยวกับเรื่องนี้