Wildcard DNS พร้อม BIND


14

ฉันพยายามเซ็ตอัพ BIND เพื่อให้สามารถตรวจจับคำขอใด ๆ และคำขอทั้งหมดและชี้ไปที่ชุดของเซิร์ฟเวอร์ NS ที่เฉพาะเจาะจงและระเบียน A ที่เฉพาะเจาะจง

ฉันมีโดเมนประมาณ 500 และฉันเพิ่มโดเมนใหม่ในอัตรา 10-15 ต่อวันดังนั้นฉันไม่ต้องการเพิ่มโซนสำหรับทุกโดเมนอย่างชัดเจน

การตั้งค่าปัจจุบันของฉันคือ: ใน named.conf ของฉันฉันมีมุมมอง (ชื่อภายนอก) โดยมีโซนดังต่อไปนี้:

zone "." {
        type master;
        file "ext.zone";
};

ตรงกับคำขอทั้งหมด

ext.zone คือ:

$ TTL 3600
@ IN SOA root.nsdomain.com (
                              1; อนุกรม
                         3600; รีเฟรช
                          300; ลองใหม่
                         3600; หมดอายุ
                         300); Cache ลบเชิงลบ


        ใน NS ns1.example.com
        ใน NS ns2.example.com

ns1 IN 192.0.2.4
ns2 ใน 192.0.2.5

* * * * ใน 192.0.2.6

ดังนั้นเป้าหมายคือ: สำหรับทุก NS ร้องขอผลตอบแทนns1.example.comและns2.example.com สำหรับการร้องขอทั้งหมดยกเว้นว่ามันอยู่ที่ไหนns1.example.comหรือผลตอบแทนns2.example.com 192.0.2.6สำหรับns1.example.comผลตอบแทน192.0.2.4สำหรับการกลับมาns2.example.com192.0.2.5

เกือบจะใช้งานได้ปัญหาเดียวคือเมื่อฉันขุดฉันจะได้รับ:

ขุด @localhost somedomain.example

; > DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3> @localhost somedomain.example
; (พบเซิร์ฟเวอร์ 1 รายการ)
;; ตัวเลือกทั่วโลก: printcmd
;; มีคำตอบ:
;; opcode: QUERY สถานะ: NOERROR, id: 37733
;; ธง: qr aa rd; QUERY: 1, คำตอบ: 1, AUTHORITY: 2, ADDITIONAL: 2

;; ส่วนคำถาม:
; somedomain.example ใน

;; ส่วนคำตอบ:
somedomain.example 3600 IN A 192.0.2.6 // ตามที่คาดไว้

;; ส่วนของหน่วยงาน:
. 3600 IN NS ns1.example.com // คาดว่าฉันไม่รู้ว่า "." ที่จุดเริ่มต้นไม่ดีแม้ว่า
. 3600 IN NS ns2.example.com // ดูด้านบน.

;; ส่วนเพิ่มเติม:
ns1.example.com 3600 ใน 192.0.2.6 // ไม่คาดหวังควรเป็น 192.0.2.4
ns2.example.com 3600 ใน 192.0.2.6 // ไม่คาดหวังควรเป็น 192.0.2.5

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร ฉันกำลังทำสิ่งที่น่ากลัวหรือไม่? มีวิธีที่ดีกว่าในการทำเช่นนี้?

คำตอบ:


12

ต้นกำเนิดของคุณสำหรับโซนนั้นเป็นไป.ตามการกำหนดค่าของคุณ คุณกำลังสร้างระเบียนสำหรับns1.และns2.แทนที่จะเป็นns1.example.com.และns2.example.com. เนื่องจากns1.example.comและns2.example.comไม่ได้กำหนดไว้ข้อมูลจะถูกจับคู่ด้วยอักขระตัวแทน

แก้ไข: นี่คือการแก้ไขการกำหนดค่าและโซนของคุณ:

zone "example.com." {
        type master;
        file "ext.zone";
};

ext.zone:

$TTL    3600
@       IN      SOA     ns1 root (
                              1         ; Serial
                         3600         ; Refresh
                          300         ; Retry
                         3600         ; Expire
                         300 )        ; Negative Cache TTL


        IN      NS      ns1
        IN      NS      ns2
        IN      A       192.0.2.6


ns1     IN      A       192.0.2.4
ns2     IN      A       192.0.2.5

*      IN      A       192.0.2.6

ทุกอย่างในโซนนั้นสัมพันธ์กับชื่อโซนในการกำหนดค่าที่มีชื่อดังนั้นการเพิ่มโซนที่สองจะชี้ไปที่ไฟล์เดียวกัน:

zone "example.net." {
    type master;
    file "ext.zone";
};

ฉันตัดสินใจลองระบุโดเมนแบบเต็มใน RR ดังนั้นฉันจึงเปลี่ยน: ns1 IN A 1.2.3.4 เป็น ns1.nsdomain.com ใน A 1.2.3.4 สิ่งนี้ไม่ได้ผล ตอนนี้คำขอของฉันทั้งหมดส่งคืน SOA แทน NS / A
Jon Wu

คุณสามารถปรับปรุงหรือเพิ่มโซนใหม่ได้หรือไม่?
Cakemox

ฉันเพิ่มโซนใหม่สำหรับ nsdomain.com และปล่อยให้เก่า "." โซนเพียงอย่างเดียว ในโซน nsdomain.com ฉันเพิ่ม ext.zone ของคุณ (เปลี่ยนชื่อเป็น nsdomain.zone) ตอนนี้ขอโดเมนใด ๆ ยกเว้น nsdomain.com ทำงานอย่างที่ควรจะเป็นพวกเขาส่งคืน ns1.nsdomain.com/ns2.nsdomain.com ด้วย IP ที่ถูกต้อง (1.2.3.4/1.23.5) แต่คำขอใด ๆ สำหรับ nsdomain.com จะส่งคืน SOA และไม่มีการตอบกลับที่ถูกต้อง :( ปิด!
Jon Wu

คุณต้องอธิบายให้เพิ่มระเบียน A สำหรับเอเพ็กซ์ สัญลักษณ์แทนไม่ครอบคลุม ฉันจะอัปเดตตัวอย่างของฉัน
Cakemox

ขอบคุณที่ใช้งานได้! ทำไมคุณต้องระบุบิตสองครั้งในโซนนี้ แต่ไม่ได้อยู่ในโซน "wildcard" (โซน ".", ext.zone ดั้งเดิมของฉัน) มีลิงค์ที่ดีในการอ่านสิ่งนี้หรือไม่? ขอบคุณอีกครั้ง!
Jon Wu

1

ในการตั้งค่าไวด์การ์ดในโดเมนย่อยbindคุณควรใช้รูปแบบต่อไปนี้:

name.tld.   IN  A   IP    # main domain ip
*.name.tld. IN  A   IP    # wildcard subdomains ip

ตัวอย่าง:

mydomain.com.   IN  A   1.1.1.1
*.mydomain.com. IN  A   1.1.1.1 

0

ขึ้นอยู่กับการกำหนดค่าของคุณns1.example.comเป็น192.0.2.4และเป็นns2.example.com 192.0.2.5คุณต้องกำหนดค่าการจำแนกชื่อเซิร์ฟเวอร์ NS ในexample.comโซนเพื่อรับ IP ที่เหมาะสม

ฉันหวังว่าฉันจะทำให้ตัวเองชัดเจน กลับมาหาฉันถ้าคุณต้องการข้อมูลเพิ่มเติม


ดังนั้นฉันควรเพิ่มโซนอื่นสำหรับ nsdomain.com และตั้งค่า NS / A ที่นั่นสำหรับ nsdomain.com หรือไม่
Jon Wu

ดังนั้นหากคุณมี 2 โซนเช่น somedomain.com และ nsdomain.com คุณจะต้องตั้งค่าข้อมูลที่เกี่ยวข้องกับ nsdomain ในโซนที่เหมาะสม คำตอบสั้น ๆ คือใช่คุณต้องตั้งค่าโซนอื่น
Istvan

-5

อักขระตัวแทน DNS อาจทำให้เกิดปัญหา!

ดังนั้นฉันไม่ต้องการเพิ่มโซนสำหรับทุกโดเมนอย่างชัดเจน

มีหลายวิธีที่จะไป - ตั้งแต่การเขียนสคริปต์ SHELL จนถึง SQL-based DNS-servers


UPD (2019-11) : ดังนั้นในขณะที่ฉันได้กล่าวว่า8 ปีที่ผ่านมาเชลล์สคริปต์เป็นวิธีที่จะไปและจะได้รับการพิสูจน์แล้วกับการแก้ปัญหาคำตอบที่ได้รับการยอมรับของเสนอ "เพิ่มรายการโซน" - อย่างชัดเจนไม่ได้ขึ้นอยู่กับการใช้สัญลักษณ์ ;-)

ในปี 2019 การค้นหาทรัพยากรที่อธิบายถึงข้อผิดพลาดของอักขระตัวแทน DNS ได้ง่ายยิ่งขึ้นและถึงแม้ว่าส่วนใหญ่จะถูกเขียนว่า "ตอนรุ่งเช้าของอินเทอร์เน็ต" พวกเขายังคงมีคุณค่าอยู่ ตัวอย่างเช่น RFC1912 กล่าวถึงบางสิ่งที่เกี่ยวข้องกับสัญลักษณ์ตัวแทน DNS ที่ใช้ มีการอธิบายปัญหาหลักอย่างชัดเจนว่า"...

Wildcard MXS สามารถที่ไม่ดีเพราะพวกเขาทำให้การดำเนินงานบางส่วนประสบความสำเร็จเมื่อพวกเขาควรจะล้มเหลวแทน ..."

นอกจากนี้ยังมีตัวอย่างชีวิตจริงบางอย่างที่ค่อนข้างล้าสมัย


ทำไม DNS wildcard ถึงผิด มันไม่ได้เป็นความชั่วร้ายที่ทุกคน ....
Istvan


@poige 1) URL นั้นไม่สามารถแก้ไขได้อีกต่อไป 2) คุณอ้างถึงเอกสารที่มีอายุ 8 ปี ณ เวลาที่คุณตอบตอนนี้อายุ 16 ปีซึ่งเป็นเหมือนนิรันดร์บนอินเทอร์เน็ตและ 3) สแน็ปช็อตที่web.archive.org /web/20030922093331/https://www.iab.org/ ......ส่วนใหญ่จะลดลงเหลือ "โดยเฉพาะอย่างยิ่งเราขอแนะนำว่าไม่ควรใช้อักขระตัวแทน DNS ในโซนเว้นแต่ผู้ดำเนินการโซนมีความเข้าใจที่ชัดเจนเกี่ยวกับความเสี่ยงและ ไม่ควรนำไปใช้โดยไม่ได้รับความยินยอมจากหน่วยงานที่ได้รับมอบหมายด้านล่างโซน "
Patrick Mevzek

ฉันเขียนสิ่งนี้เมื่อ 8 ปีที่แล้วด้วยคุณยังคงอ่านและตอบกลับ :)
poige
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.