Windows ตัดสินใจว่าเซิร์ฟเวอร์ DNS ใดที่จะใช้เมื่อแก้ไขปัญหาชื่อ


41

Windows ใช้อัลกอริทึมใดในการตัดสินใจว่าจะใช้ DNS Server ใดในการแก้ไขชื่อ

สมมติว่าฉันมีอินเทอร์เฟซหลายตัวทั้งหมดที่ใช้งานอยู่บางตัวที่ไม่ได้ระบุเซิร์ฟเวอร์ dns บางคนบอกให้กำหนดโดยอัตโนมัติและบางตัวระบุด้วยตนเอง (ในอินเทอร์เฟซ ipv4 และอินเตอร์เฟส ipv6)

ฉันขอคำตอบสำหรับคำถามทั่วไปนี้โดยหวังว่าฉันจะรู้วิธีแก้ปัญหาเฉพาะเจาะจงมากขึ้นใน Windows Vista - ฉันมีสองอินเตอร์เฟสหนึ่งตัวชี้วัดที่ต่ำกว่าและเซิร์ฟเวอร์ DNS ที่ระบุด้วยตนเอง nslookup ใช้เซิร์ฟเวอร์ DNS นี้และแก้ไขชื่ออย่างถูกต้อง อย่างไรก็ตามแอปพลิเคชันอื่นทั้งหมดไม่สามารถแก้ไขชื่อได้เว้นแต่ฉันจะระบุเซิร์ฟเวอร์ DNS ด้วยตนเองสำหรับอินเทอร์เฟซอื่นซึ่งแอปพลิเคชันนั้นใช้ nslookup ยังใช้เซิร์ฟเวอร์ DNS ที่ระบุสำหรับอินเทอร์เฟซอื่นนี้เมื่อมีการระบุ

ขอบคุณ

คำตอบ:


27

ถ้าฉันไม่เข้าใจผิดมันจะถูกกำหนดโดยลำดับการเชื่อมโยง NIC ในการตั้งค่าขั้นสูงในโฟลเดอร์การเชื่อมต่อเครือข่าย คุณสามารถตรวจสอบได้โดยเปลี่ยนลำดับการเชื่อมโยงของ NIC ต่างๆและการเรียกใช้ nslookup เป็นการทดสอบ

หากต้องการขยายคำตอบของฉันโดยอ้างถึงบทความที่ Evan เชื่อมโยงนี่เป็นข้อความที่ตัดตอนมาจากบทความที่กล่าวมา:

บริการไคลเอ็นต์ DNS สอบถามเซิร์ฟเวอร์ DNS ตามลำดับต่อไปนี้:

  1. บริการไคลเอ็นต์ DNS ส่งแบบสอบถามชื่อไปยังเซิร์ฟเวอร์ DNS แรกในรายการเซิร์ฟเวอร์ DNS ของการ์ดเชื่อมต่อที่ต้องการและรอหนึ่งวินาทีสำหรับการตอบสนอง

  2. หากบริการไคลเอ็นต์ DNS ไม่ได้รับการตอบสนองจากเซิร์ฟเวอร์ DNS ตัวแรกภายในหนึ่งวินาทีจะส่งการสอบถามชื่อไปยังเซิร์ฟเวอร์ DNS ตัวแรกบนอะแดปเตอร์ทั้งหมดที่ยังอยู่ระหว่างการพิจารณาและรอสองวินาทีในการตอบกลับ

  3. ถ้าบริการไคลเอ็นต์ DNS ไม่ได้รับการตอบสนองจากเซิร์ฟเวอร์ DNS ใด ๆ ภายในสองวินาทีบริการไคลเอ็นต์ DNS จะส่งแบบสอบถามไปยังเซิร์ฟเวอร์ DNS ทั้งหมดบนการ์ดเชื่อมต่อทั้งหมดที่อยู่ระหว่างการพิจารณาและรออีกสองวินาทีเพื่อรอการตอบกลับ

  4. หากบริการไคลเอ็นต์ DNS ยังคงไม่ได้รับการตอบสนองจากเซิร์ฟเวอร์ DNS ใด ๆ บริการนี้จะส่งการสอบถามชื่อไปยังเซิร์ฟเวอร์ DNS ทั้งหมดในอะแดปเตอร์ทั้งหมดที่ยังอยู่ระหว่างการพิจารณาและรอการตอบกลับสี่วินาที

  5. ถ้าบริการไคลเอ็นต์ DNS ไม่ได้รับการตอบสนองจากเซิร์ฟเวอร์ DNS ใด ๆ ไคลเอ็นต์ DNS จะส่งข้อความค้นหาไปยังเซิร์ฟเวอร์ DNS ทั้งหมดในอะแดปเตอร์ทั้งหมดที่อยู่ระหว่างการพิจารณาและรอการตอบกลับแปดวินาที

อะแดปเตอร์ที่ต้องการในขั้นตอนที่ 1 เป็นอะแดปเตอร์ที่ระบุไว้ก่อนในลำดับการผูก


4
กระบวนการนี้มีการเปลี่ยนแปลงใน Windows 10 ถึงแม้ว่าฉันจะไม่ทราบว่ากระบวนการใหม่ที่ฉันรู้ข้างต้นใช้ไม่ได้กับ Windows 10 โปรดดูบล็อกนี้ - blogs.technet.microsoft.com/networking/2015/08/14/
Robert

14

ใน Windows 10 (และ Windows Server 2016) คุณต้องอัปเดตการวัดของแต่ละอินเทอร์เฟซตามลำดับที่คุณต้องการ

  1. ไปที่แผงควบคุม> เครือข่ายและอินเทอร์เน็ต> การเชื่อมต่อเครือข่าย
  2. คลิกขวาที่การเชื่อมต่อที่ต้องการ (การเชื่อมต่อที่มีความสำคัญสูงกว่า)
  3. คลิกคุณสมบัติ> Internet Protocol เวอร์ชัน 4
  4. คลิกคุณสมบัติ> ขั้นสูง
  5. ยกเลิกการทำเครื่องหมาย 'การวัดอัตโนมัติ'
  6. ป้อน 10 ใน 'อินเทอร์เฟซเมตริก'
  7. คลิกตกลง

อ้างอิง:

ฉันใช้ 10 สำหรับ LAN ของฉัน, 20 สำหรับ WLAN, และ 100 สำหรับ VPN Interfaces (ฉันชอบ DNS ท้องถิ่นที่ทำงานนี่อาจเป็นสิ่งที่ตรงกันข้ามสำหรับคนอื่น ๆ ) โปรดจำไว้ว่าลำดับความสำคัญของตัวชี้วัด = สูงต่ำ

ดูบทความนี้ในการสนับสนุนของ Microsoft สำหรับคำอธิบายของคุณลักษณะอัตโนมัติเมตริกเส้นทาง IPv4


+1 สำหรับฉันบน Windows 10 นี่เป็นทางออกเดียวที่ขอบคุณ
GµårÐïåñ

การปรับเปลี่ยนการวัดจะมีผลกับการเลือกเส้นทางเท่านั้น ไม่มีผลกับเซิร์ฟเวอร์ DNS ใดที่จะใช้
Jruv

14 upvotes และประสบการณ์ส่วนตัวไม่เห็นด้วยฉันเห็นด้วยไม่ควรแต่ dev ที่ไมโครซอฟท์ดูเหมือนจะเขียนรหัสด้วยวิธีนี้
ยาโคบอีแวนส์

8

หน้านี้อธิบายถึงอัลกอริทึมที่ Windows ใช้ในการดำเนินการสืบค้น DNS มันไม่ลึกพอที่จะให้คำตอบทั้งหมดที่คุณกำลังมองหา แต่บางครั้ง w / a ดมกลิ่นและบทความนี้ควรจะเป็นสิ่งที่คุณต้องการเพื่อตรวจสอบสิ่งที่เกิดขึ้นในสถานการณ์เฉพาะของคุณ


3

ฉันมีปัญหาเดียวกันทั้งหมด ฉันใช้เวลาทั้งวันเพื่อพยายามคิดออก ตอนนี้ฉันรู้แล้วว่ามันใช้งานได้อย่างมีเสน่ห์

หากคุณมีการ์ดเครือข่ายหลายใบและหากระบุเซิร์ฟเวอร์ DNS ในแต่ละการ์ด คุณรู้หรือไม่ว่าเซิร์ฟเวอร์ DNS ใดที่จะใช้ในที่สุด

คุณสามารถตรวจสอบได้จากการฝึกฝน

nslookup 192.168.3.6

ดังนั้นคุณจะเห็นเซิร์ฟเวอร์ที่พีซีของคุณใช้งานจริง

คำถามคือ - จากสิ่งที่ขึ้นอยู่กับหน้าต่าง DNS เซิร์ฟเวอร์ที่เลือกใช้และวิธีที่เราสามารถเปลี่ยนได้

เราต้องการมันเป็นพิเศษเมื่อเราใช้ไคลเอนต์ VPN

คำตอบจากqwerty2010ที่ถูกต้องและถูกต้อง แต่คุณสามารถใช้งานได้เฉพาะเมื่อคุณมี NIC ในแผงควบคุม - เครือข่ายและศูนย์แบ่งปัน - เปลี่ยนการตั้งค่าอะแดปเตอร์ - รายการของ nics

เฉพาะในกรณีที่คุณเห็นนิกที่สามารถใช้งานได้กับไคลเอนต์ VPN ของคุณคุณสามารถใช้วิธีการแบบกราฟิกเพื่อชี้หน้าต่างสิ่งที่เซิร์ฟเวอร์ dns (ที่ระบุไว้ในนิกเฉพาะ) ที่คุณต้องการใช้

ดังนั้นคุณจึงไปที่ศูนย์เครือข่ายและการแชร์ -> เปลี่ยนการตั้งค่าอะแดปเตอร์ -> ขั้นสูง -> การตั้งค่าขั้นสูง -> และคุณเลื่อน UP นิกด้วย DNS ที่คุณต้องการใช้ (คุณต้องยกมันขึ้น)

อย่างไรก็ตามถ้าเช่นคุณใช้ไคลเอนต์ Shrew vpn - คุณจะไม่มี nics

คุณทำอะไร.

คุณเปิดรีจิสทรี

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}

และคุณดูในโฟลเดอร์ย่อย 0000, 0001 และโฟลเดอร์อื่น ๆ ด้วย

DriverDesc = Shrew Soft Virtual Adapter

ละเอียด. จากนั้นคุณคัดลอกไปยังคลิปบอร์ด

NetCfgInstanceId = {B498E7DE-7257-48F6-AD32-60E470030F05}

ตอนนี้คุณไป

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Linkage]

key = Bindและคุณเปิด คุณจะเห็นรายการแบบนี้

\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

สิ่งที่คุณต้องทำคือนำไปด้านบน

\Device\{B498E7DE-7257-48F6-AD32-60E470030F05}
\Device\{1DF89CE3-CAAD-4EB7-A53F-AD16BC1D5EFD}
\Device\{70126DBE-B44D-4392-9417-0CABD6E384B1}
\Device\{D5127F8E-E7BB-4661-AE5A-A922614173D0}
\Device\{C44039AB-6801-4A9B-A736-3B12782FF411}
\Device\{85231D0F-CD05-4774-A983-632C5D83AC62}
\Device\{7E87BC81-8C58-4E05-9FA0-7897A6AA5CCE}
\Device\{3A1A3EFC-A9DE-4BCA-BAF6-81C7074487E0}
\Device\{8D41EDFC-04AC-4537-B5D5-0D54EB51A023}

นั่นคือทั้งหมดที่ ไม่จำเป็นต้องรีบูต

ตอนนี้หน้าต่างของคุณจะใช้ DNS ที่ระบุใน shrew vpn nic เมื่อคุณใช้การเชื่อมต่อ vpn


0

เนื่องจากสิ่งนี้อาจช่วยคุณหรือคนอื่น ๆ คุณสามารถปิดการใช้งานการใช้งาน Windows round-robin ของ dns ที่ระบุไว้เพื่อให้การใช้งาน dns สามารถคาดเดาได้มากขึ้น ลองตั้งค่าRoundRobin=0ใน HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters( อ้างอิง ) เพื่อปิดการใช้งาน dns round-robing

นอกจากนี้ยังมี "การหมดเวลา" สำหรับการหมุนเซิร์ฟเวอร์คุณสามารถลองตั้งค่าเป็นศูนย์ :

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
 ServerPriorityTimeLimit=0

ตามที่กล่าวถึง "อ้างอิง" (ลิงค์) นี้นำไปใช้กับการกำหนดค่าเซิร์ฟเวอร์ DNS ในการให้ที่อยู่ IP หลายแห่งสำหรับ FQDN สอบถามบางอย่างในการเรียงลำดับการหมุนจากแบบสอบถามเพื่อสอบถาม สิ่งนี้ไม่เกี่ยวกับคำถามที่ตัวแก้ไข DNS (ไคลเอนต์) กำลังเลือกเซิร์ฟเวอร์ DNS ที่ต้องการสอบถาม
Thomas Urban

-13

มันไม่ได้ตัดสินใจแบบสุ่ม คุณเชื่อมต่อกับเราเตอร์ที่รับ IP จาก บริษัท ที่มีเซิร์ฟเวอร์ DNS พวกเขาได้รับการร้องขอของคุณจนกว่าคุณจะเปลี่ยน IP ด้วยตนเองเพื่อ DNS อื่นเช่น: OpenDNS หรือบางทีคุณอาจตัดสินใจเลือกเซิร์ฟเวอร์ DNS ของคุณเอง มันก็ใช้ได้เหมือนกัน เพียงป้อนที่อยู่ IP ในศูนย์เครือข่ายและควรจะดี และใช่คุณจะต้องตั้งค่าด้วยตนเอง

คุณสามารถปรับไฟล์ในC:\Windows\System32ชื่อ "โฮสต์" โดยไม่มีนามสกุล อนุญาตให้คุณเปลี่ยนเส้นทางคำขอ URL แทนที่จะส่งไปยัง DNS มาตรฐาน ไปยังเซิร์ฟเวอร์ภายใน (ซึ่งต้องทำงานและกำลังฟังพอร์ต 80)


18
โดยทั่วไปทุกอย่างที่คุณกล่าวว่านี่เป็นสิ่งที่ผิด
MDMarra

3
และ -1 เพิ่มเติมสำหรับแม้กระทั่งการกล่าวถึงสิ่งที่น่ารังเกียจ festering ที่เป็นไฟล์โฮสต์
Maximus Minimus

วิธีการให้ข้อมูล MarkM
KdgDev

4
@WebDevHobo - มีมากเกินไปที่จะแก้ไขในความคิดเห็น แต่ฉันจะสัมผัสกับประเด็นใหญ่ 1) OP มีคอมพิวเตอร์ที่มีอินเตอร์เฟสหลายตัว (NIC แยกกันมากที่สุด) และแต่ละตัวมี DNS ที่แตกต่างกัน ในบริบทของคำถามเขาใช้เซิร์ฟเวอร์ DNS ภายในไม่กี่ตัวหรือมีเซิร์ฟเวอร์ DNS ภายนอกที่ต้องการสองสามตัวซึ่งอาจเป็นแบบหลาย homed 2) คุณไม่จำเป็นต้องตั้งค่าที่อยู่เซิร์ฟเวอร์ DNS ภายในด้วยตนเองหากคุณใช้ DHCP ในการกำหนดค่าเซิร์ฟเวอร์ DHCP สำหรับกลุ่มที่อยู่นั้น 3) เส้นทางไปยังไฟล์โฮสต์คือ c: \ windows \ system32 \ drivers \ etc
MDMarra

3
และไฟล์ HOSTS ไม่ควรใช้ในสถานการณ์นี้หรือในทางปฏิบัติยกเว้นว่าคุณกำลังพัฒนาในท้องถิ่นและใช้ส่วนหัวของโฮสต์หรือบางอย่างที่คล้ายกันและต้องการ FQDN เพื่อแก้ไขปัญหาในเครื่อง และเซิร์ฟเวอร์ไม่จำเป็นต้องเรียกใช้พอร์ต 80 ไม่ว่าจะใช้ไฟล์ HOSTS สำหรับการจำแนกชื่อหรือเซิร์ฟเวอร์ DNS เพียงต่อท้าย: port_number ต่อท้าย URL HOSTS ไม่สนใจพอร์ตเช่นเดียวกับ DNS - เป็นวิธีการแปลชื่อโฮสต์เป็นที่อยู่ IP และไม่มีอะไรเพิ่มเติม
MDMarra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.