ฉันจะค้นหาต้นกำเนิดของระเบียน DNS ที่ขัดแย้งกันได้อย่างไร
ฉันจะค้นหาต้นกำเนิดของระเบียน DNS ที่ขัดแย้งกันได้อย่างไร
คำตอบ:
คุณจะต้องการบันทึก SOA (เริ่มต้นของผู้ให้บริการออก) สำหรับชื่อโดเมนที่กำหนดและนี่คือวิธีที่คุณทำสำเร็จโดยใช้เครื่องมือบรรทัดคำสั่งnslookup ที่มีให้ใช้งานทั่วไป:
command line> nslookup
> set querytype=soa
> stackoverflow.com
Server: 217.30.180.230
Address: 217.30.180.230#53
Non-authoritative answer:
stackoverflow.com
origin = ns51.domaincontrol.com # ("primary name server" on Windows)
mail addr = dns.jomax.net # ("responsible mail addr" on Windows)
serial = 2008041300
refresh = 28800
retry = 7200
expire = 604800
minimum = 86400
Authoritative answers can be found from:
stackoverflow.com nameserver = ns52.domaincontrol.com.
stackoverflow.com nameserver = ns51.domaincontrol.com.
กำเนิด (หรือเซิร์ฟเวอร์ชื่อหลักใน Windows) สายจะบอกคุณว่าns51.domaincontrolเป็นเซิร์ฟเวอร์ชื่อหลักสำหรับstackoverflow.com
เมื่อสิ้นสุดการแสดงผลเซิร์ฟเวอร์ที่เชื่อถือได้ทั้งหมดรวมถึงเซิร์ฟเวอร์สำรองสำหรับโดเมนที่ระบุจะแสดงรายการ
dig
ดูเหมือนจะสำหรับฉัน (ดูคำตอบด้านล่าง)
nslookup -type=soa stackoverflow.com
บน linux วันนี้ (2019 ก.พ. ) ส่วนที่เชื่อถือได้จะว่างเปล่า
คุณใช้เอกพจน์ในคำถามของคุณ แต่โดยทั่วไปจะมีเซิร์ฟเวอร์ชื่อที่เชื่อถือได้หลายตัว RFC 1034 แนะนำอย่างน้อยสองตัว
เว้นแต่คุณจะหมายถึง "เซิร์ฟเวอร์ชื่อหลัก" และไม่ใช่ "เซิร์ฟเวอร์ชื่อที่เชื่อถือได้" เซิร์ฟเวอร์ชื่อสำรองมีสิทธิ์
หากต้องการค้นหาเนมเซิร์ฟเวอร์ของโดเมนบน Unix:
% dig +short NS stackoverflow.com
ns52.domaincontrol.com.
ns51.domaincontrol.com.
หากต้องการค้นหาเซิร์ฟเวอร์ที่ระบุว่าเป็นรายการหลัก (แนวคิดของ "หลัก" ค่อนข้างคลุมเครือในปัจจุบันและมักไม่มีคำตอบที่ดี):
% dig +short SOA stackoverflow.com | cut -d' ' -f1
ns51.domaincontrol.com.
ในการตรวจสอบความแตกต่างระหว่างเซิร์ฟเวอร์ชื่อการตั้งค่าของฉันไปที่check_soa
เครื่องมือเก่าที่อธิบายไว้ในหนังสือ Liu & Albitz "DNS & BIND" (ตัวแก้ไข O'Reilly) ซอร์สโค้ดมีอยู่ในhttp://examples.oreilly.com/dns5/
% check_soa stackoverflow.com
ns51.domaincontrol.com has serial number 2008041300
ns52.domaincontrol.com has serial number 2008041300
ที่นี่เซิร์ฟเวอร์ชื่อที่เชื่อถือได้สองแห่งมีหมายเลขซีเรียลเหมือนกัน ดี.
www.pressero.com
ซึ่งเป็น CNAME สำหรับไซต์อื่น - dig + short SOA เพียงส่งคืนเป้าหมาย CNAME
www.pressero.com
คุณอาจคิดเกี่ยวกับระเบียน A (ซึ่งเป็นประเภทระเบียนเริ่มต้นdig
หากคุณไม่ได้ระบุไว้) แต่ถ้าจำเป็นให้เพิ่ม a tail -1
เพื่อดึงผลลัพธ์สุดท้าย
dig +short SOA www.pressero.com
ที่ผมกล่าวในความคิดเห็นของผมผมใช้ สิ่งนี้จะส่งกลับเฉพาะเป้าหมาย CNAME - ไม่ใช่ระเบียน SOA สำหรับpressero.com
โดเมนซึ่งเป็นสิ่งที่ฉันคาดไว้ tail -1
ไม่ได้ช่วยเรื่อง dig +short SOA
มีการเปล่งเพียงหนึ่งบรรทัด
บน * ระวัง:
$ dig -t ns <domain name>
ฉันมีเครื่องมือการเผยแพร่ DNSออกแบบมาเพื่อตอบคำถามประเภทนี้
แหล่งเผยแพร่ภายใต้ AGPLv3
(ใช่อินเทอร์เฟซค่อนข้างพื้นฐานในขณะนี้ :))
คุณสามารถค้นหาเนมเซิร์ฟเวอร์สำหรับโดเมนที่มีคำสั่ง "host":
[davidp @ supernova: ~] $ host -t ns stackoverflow.com stackoverflow.com เซิร์ฟเวอร์ชื่อ ns51.domaincontrol.com stackoverflow.com เซิร์ฟเวอร์ชื่อ ns52.domaincontrol.com
ฉันพบว่าวิธีที่ดีที่สุดในการเพิ่มตัวเลือก + ติดตามเสมอ:
dig SOA +trace stackoverflow.com
มันทำงานได้กับ CNAME แบบเรียกซ้ำซึ่งโฮสต์ในผู้ให้บริการที่ต่างกัน + การติดตามร่องรอยบ่งบอกถึง + norecurse ดังนั้นผลลัพธ์จึงเป็นเพียงสำหรับโดเมนที่คุณระบุ
คำที่คุณควรใช้เป็น Google คือ "เชื่อถือได้" ไม่ใช่ "ชัดเจน"
บน Linux หรือ Mac คุณสามารถใช้คำสั่งwhois
, dig
, host
, nslookup
หรืออื่น ๆ อีกหลาย nslookup
อาจทำงานบน Windows
ตัวอย่าง:
$ whois stackoverflow.com
[...]
Domain servers in listed order:
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
สำหรับเครดิตเพิ่มเติม: ใช่มันเป็นไปได้
aryeh ผิดแน่นอนเนื่องจากคำแนะนำของเขามักจะให้ที่อยู่ IP สำหรับชื่อโฮสต์เท่านั้น หากคุณใช้dig
คุณต้องค้นหาระเบียน NS เช่น:
dig ns stackoverflow.com
โปรดทราบว่าสิ่งนี้อาจถามเซิร์ฟเวอร์ DNS ในพื้นที่ของคุณและอาจให้คำตอบที่ผิดหรือล้าสมัยที่มีอยู่ในแคช
เราได้สร้างเครื่องมือค้นหา DNSที่ให้บริการเนมเซิร์ฟเวอร์ที่เชื่อถือได้ของโดเมนและบันทึก DNS ทั่วไปในคำขอเดียว
ตัวอย่าง: https://www.misk.com/tools/#dns/stackoverflow.com
เครื่องมือของเราค้นหาเซิร์ฟเวอร์ชื่อที่เชื่อถือได้โดยดำเนินการค้นหา DNS แบบเรียลไทม์ (ไม่ถูกลบ) ที่เนมเซิร์ฟเวอร์และจากนั้นติดตามผู้อ้างอิงเซิร์ฟเวอร์ชื่อจนกว่าเราจะไปถึงเซิร์ฟเวอร์ชื่อที่เชื่อถือได้ นี่เป็นตรรกะเดียวกับที่ผู้แก้ปัญหา DNS ใช้เพื่อให้ได้คำตอบที่เชื่อถือได้ มีการเลือกเนมเซิร์ฟเวอร์ที่มีสิทธิ์แบบสุ่ม (และระบุ) ในการค้นหาแต่ละรายการที่ช่วยให้คุณค้นหาระเบียน DNS ที่ขัดแย้งกันโดยดำเนินการหลายคำขอ
นอกจากนี้คุณยังสามารถดูเส้นทางการมอบหมายเนมเซิร์ฟเวอร์ได้โดยคลิกที่ "Author Names Namesers" ที่ด้านล่างของผลลัพธ์การค้นหา dns จากตัวอย่างด้านบน
ตัวอย่าง: https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
คุณสามารถใช้บริการ whois บน UNIX เช่นระบบปฏิบัติการคุณจะใช้คำสั่งต่อไปนี้ หรือคุณสามารถทำมันได้ในเว็บที่http://www.internic.net/whois.html
whois stackoverflow.com
คุณจะได้รับคำตอบดังต่อไปนี้
... ลบข้อความที่นี่ ...
เซิร์ฟเวอร์โดเมนตามลำดับที่ระบุไว้: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
คุณสามารถใช้ nslookup หรือขุดเพื่อค้นหาข้อมูลเพิ่มเติมเกี่ยวกับระเบียนสำหรับโดเมนที่กำหนด สิ่งนี้อาจช่วยคุณแก้ไขข้อขัดแย้งที่คุณอธิบายไว้
น่าเสียดายที่เครื่องมือเหล่านี้ส่วนใหญ่จะส่งคืนระเบียน NS ตามที่ระบุโดยเซิร์ฟเวอร์ชื่อจริงเท่านั้น เพื่อให้แม่นยำยิ่งขึ้นในการพิจารณาว่าเซิร์ฟเวอร์ชื่อใดรับผิดชอบโดเมนจริง ๆ คุณต้องใช้ "whois" และตรวจสอบโดเมนที่แสดงอยู่ที่นั่นหรือใช้ "dig [domain] NS @ [root name server]" และเรียกใช้ ซ้ำจนกว่าคุณจะได้รับรายชื่อเซิร์ฟเวอร์ ...
ฉันหวังว่าจะมีบรรทัดคำสั่งง่าย ๆ ที่คุณสามารถเรียกใช้เพื่อให้ได้ผลลัพธ์นั้นขึ้นอยู่กับว่าอยู่ในรูปแบบที่สอดคล้องกันไม่ใช่แค่ผลลัพธ์ที่ได้รับจากเซิร์ฟเวอร์ชื่อเอง วัตถุประสงค์ของการทำสิ่งนี้สำหรับฉันคือการสามารถสืบค้นชื่อโดเมนที่ฉันจัดการได้ประมาณ 330 ชื่อดังนั้นฉันจึงสามารถระบุได้ว่าเซิร์ฟเวอร์ชื่อใดที่แต่ละโดเมนชี้ไปที่ (ตามการตั้งค่าผู้รับจดทะเบียน)
ใครรู้คำสั่งโดยใช้ "ขุด" หรือ "โฮสต์" หรืออย่างอื่นใน * ระวัง?
ระเบียน SOA จะปรากฏบนเซิร์ฟเวอร์ทั้งหมดในลำดับชั้นที่เจ้าของโดเมนไม่มีการควบคุมและจะมีผลต่อเซิร์ฟเวอร์ชื่อที่เชื่อถือได้ภายใต้การควบคุมของเจ้าของโดเมน
ระเบียน SOA บนเซิร์ฟเวอร์ที่เชื่อถือได้นั้นไม่จำเป็นสำหรับการแก้ไขโดเมนนั้นอย่างเคร่งครัดและสามารถมีข้อมูลปลอม (หรือซ่อนเซิร์ฟเวอร์หลักหรือเซิร์ฟเวอร์ จำกัด อื่น ๆ ) และไม่ควรเชื่อถือเพื่อกำหนดเซิร์ฟเวอร์ชื่อที่เชื่อถือได้ สำหรับโดเมนที่กำหนด
คุณต้องสอบถามเซิร์ฟเวอร์ที่มีสิทธิ์สำหรับโดเมนระดับบนสุดเพื่อรับข้อมูล SOA ที่เชื่อถือได้สำหรับโดเมนย่อยที่กำหนด
(ข้อมูลเกี่ยวกับเซิร์ฟเวอร์ใดที่เชื่อถือได้ซึ่ง TLD สามารถสอบถามได้จากเซิร์ฟเวอร์ชื่อหลัก)
เมื่อคุณมีข้อมูลที่เชื่อถือได้เกี่ยวกับ SOA จากเซิร์ฟเวอร์ที่มีสิทธิ์ TLD คุณสามารถสอบถามเซิร์ฟเวอร์ชื่อหลักที่มีสิทธิ์ (หนึ่งในบันทึกใน SOA ใน gTLD nameserver!) สำหรับระเบียน NS อื่น ๆ จากนั้นดำเนินการตรวจสอบทั้งหมด เซิร์ฟเวอร์ชื่อเหล่านั้นที่คุณได้รับจากการสอบถามระเบียน NS เพื่อดูว่ามีความไม่สอดคล้องกันสำหรับระเบียนเฉพาะอื่น ๆ บนเซิร์ฟเวอร์เหล่านั้นหรือไม่
ทั้งหมดนี้ใช้งานได้ดีกว่า / เชื่อถือได้กับ linux และ dig มากกว่า nslookup / windows
วิธีที่ง่ายคือใช้เครื่องมือโดเมนออนไลน์ สิ่งที่ฉันชอบคือเครื่องมือโดเมน (เดิมคือ whois.sc) ฉันไม่แน่ใจว่าพวกเขาสามารถแก้ไขระเบียน DNS ที่ขัดแย้งได้หรือไม่ ตัวอย่างเช่นเซิร์ฟเวอร์ DNS สำหรับ stackoverflow.com คือ
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
ฉันพบว่าสำหรับบางโดเมนคำตอบข้างต้นไม่ได้ผล วิธีที่เร็วที่สุดที่ฉันพบคือการตรวจสอบระเบียน NS ก่อน หากไม่มีอยู่ให้ตรวจสอบเรกคอร์ด SOA หากไม่มีอยู่ให้แก้ไขชื่อซ้ำโดยใช้ dig และนำระเบียน NS สุดท้ายที่ส่งกลับมา ตัวอย่างที่เหมาะกับสิ่งนี้คือanalyticsdcs.ccs.mcafee.com.
host -t NS analyticsdcs.ccs.mcafee.com.
host -t SOA analyticsdcs.ccs.mcafee.com.
dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1
host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.