ไคลเอนต์ Windows อาจมีอุโมงค์ที่ทำงานได้ มีตัวแปลงชื่อขององค์กร และยังส่งชื่อภายในไปยังเราเตอร์ที่บ้าน สามกลไกที่แตกต่างกันเป็นตัวกำหนดว่าเซิร์ฟเวอร์ใดจะตอบ และแต่ละกลไกก็ล้มเหลวต่างกัน เราไม่จำเป็นต้องแก้ทั้งสาม: อาการบอกได้ว่าตัวใดกำลังเกี่ยวข้อง แผนผังการตัดสินใจด้านล่างใช้เวลาไม่กี่นาทีและป้องกันผลลัพธ์ที่พบบ่อย คือการเปลี่ยนเมตริก การจัดเรียงรีจิสทรีใหม่ และกฎ NRPT มาพร้อมกันแล้วไม่มีใครรู้ว่าอันไหนทำอะไร

สามกลไกเป็นตัวตัดสิน และมักมีหนึ่งที่ผิด

เมตริกของอินเทอร์เฟซจัดลำดับอะแดปเตอร์สำหรับตระกูลที่อยู่หนึ่ง ลำดับการผูกพันธะภายใต้ Tcpip\Linkage เป็นรายการระดับเครื่องของตัวระบุอินเทอร์เฟซที่เส้นทางโค้ดเก่ายังคงตรวจสอบ ตารางนโยบายการแปลงชื่อ (NRPT) ผูกเนมสเปซกับเซิร์ฟเวอร์เฉพาะ และรายการซัฟฟิกซ์เป็นตัวตัดสินว่าชื่อสั้นจะถูกขยายหรือไม่ ทั้งสามเป็นอิสระต่อกัน จึงเป็นเหตุให้ตัวแปลงชื่อที่ถูกต้องบนอะแดปเตอร์ VPN แพ้ให้กับการตั้งค่าเก่าที่อื่น

What you seeMechanism to checkFirst command
Every name is slow, public names sometimes wrongGlobal adapter order: metric, then LinkageGet-NetIPInterface
Internal names resolve to a public addressThe query left through the home resolver, not the tunnelResolve-DnsName intranet.corp.example -Type A, then the same query with -Server 10.20.0.10
Only corp.example names fail, public names fineNamespace binding: NRPT or suffixGet-DnsClientNrptRule
Short name fails, fully qualified name worksSuffix list on the adapter, with the corporate suffix ahead of other entries, or pushed by the serverGet-DnsClientGlobalSetting
Works, then breaks after a reconnectRuntime setting that was never persistedGet-VpnConnection for the stored profile, then Get-NetIPInterface again after a reconnect

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

การตัดสินใจที่หนึ่ง: ตัวแปลงชื่อที่ดันมาตอบได้หรือไม่

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

Resolve-DnsName intranet.corp.example -Server 10.20.0.10 -Type A
Resolve-DnsName intranet.corp.example -Type A

ถ้าอันแรกสำเร็จและอันที่สองล้มเหลว แปลว่าตัวแปลงชื่อเข้าถึงได้และ Windows เลือกไม่ดี ให้ไปที่การตัดสินใจเรื่องเนมสเปซและลำดับด้านล่าง ถ้าอันแรกก็ล้มเหลวด้วย ไม่มีอะไรบนไคลเอนต์จะช่วยได้ ตรวจสอบว่า UDP และ TCP 53 ไปถึงเซิร์ฟเวอร์ผ่านอุโมงค์หรือไม่ ไฟร์วอลล์ของโฮสต์บนเซิร์ฟเวอร์ไม่ได้ทิ้งพูล และตัวส่งต่อของเซิร์ฟเวอร์เองอยู่ในสภาพดีหรือไม่

หยุดที่ทางแยกนี้ การใช้กฎ NRPT กับตัวแปลงชื่อที่เข้าถึงไม่ได้ให้ผลล้มเหลวเดิมพร้อมการตั้งค่าที่ต้องย้อนกลับมากกว่า และซ่อนข้อบกพร่องจริงไว้หลังกฎที่ดูมีอำนาจ

การตัดสินใจที่สอง: เนมสเปซเดียวหรือทุกคำขอ

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

ตั้งเมตริกแยกตามตระกูลที่อยู่ บนอินเทอร์เฟซทั้งสอง แล้วยืนยันลำดับภายหลัง:

Get-NetIPInterface | Select-Object ifIndex, InterfaceAlias, AddressFamily, InterfaceMetric
Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 1 -AddressFamily IPv4
Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 1 -AddressFamily IPv6

แทนที่ 11 ด้วย ifIndex ของอะแดปเตอร์อุโมงค์จากบรรทัดด้านบน ถ้า 11 เป็นอะแดปเตอร์ LAN คำสั่งเดียวกันจะลดเส้นทางที่ผิด การเพิ่มอะแดปเตอร์ LAN แทนจะไปถึงลำดับเดียวกันจากอีกด้าน: netsh int ip set interface interface="Ethernet" metric=15 และ netsh int ipv6 set interface interface="Ethernet" metric=15 สำหรับตระกูลที่สอง เพราะ int ip แตะเฉพาะ IPv4

ลำดับการผูกพันธะเป็นทางเลือกสุดท้ายไม่ใช่ก้าวแรก HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage เก็บรายการ Bind ของตัวระบุอุปกรณ์ และการย้ายตัวระบุอุโมงค์ขึ้นหน้าเปลี่ยนว่าอะแดปเตอร์ใดถูกถามก่อนจริง แต่เป็นค่ารีจิสทรีระดับเครื่องที่ไม่มีขอบเขตตามเนมสเปซ ส่งออกก่อนแก้ไขแล้วเชื่อมต่ออุโมงค์ใหม่ภายหลัง เพื่อให้ลำดับมีผลในสภาวะที่ไคลเอนต์คาดหวัง

สำหรับเนมสเปซเดียว ให้เลือกเครื่องมือที่แคบกว่า:

Add-DnsClientNrptRule -Namespace ".corp.example" -NameServers 10.20.0.10
Get-DnsClientNrptRule | Select-Object Namespace, NameServers

การตัดสินใจที่สาม: การแก้ไขอยู่รอดหลังการเชื่อมต่อใหม่หรือไม่

เมตริกที่ใช้ได้จนถึงการเชื่อมต่อแบบ dial-up ครั้งถัดไปไม่เคยถูกบันทึก โปรไฟล์การเชื่อมต่อ L2TP/IPsec และอื่น ๆ ถูกสร้างใหม่เมื่อการเชื่อมต่อเริ่ม ดังนั้นค่าที่บันทึกจึงอยู่ในรายการสมุดโทรศัพท์เป็น IpInterfaceMetric ไม่ใช่เฉพาะบนอินเทอร์เฟซที่ทำงานอยู่ บางสภาพแวดล้อมเขียนฟิลด์นั้นด้วยสคริปต์ด้วยเหตุผลนี้เอง บางแห่งดันการตั้งค่าจากนโยบายการจัดการและปล่อยปลายทางไว้

แคชและการลงทะเบียนเป็นอีกชั้นหนึ่ง การเรียกใช้สิ่งเหล่านี้หลังอุโมงค์ขึ้นจะแก้ไขรายการที่ล้าสมัยและลงทะเบียนไคลเอนต์ใหม่ แต่ทั้งสองไม่จัดเรียงอะแดปเตอร์ใหม่:

ipconfig /registerdns
ipconfig /flushdns

มีสวิตช์ปิดในชั้นเดียวกัน การปิดการลงทะเบียนแบบไดนามิกบนอะแดปเตอร์กายภาพป้องกันไม่ให้ไคลเอนต์ประกาศที่อยู่ฝั่ง VPN ภายใต้ชื่อที่ผิด และนั่นเป็นการซ่อมแซมที่ต่างจากการรีเฟรชด้านบน

IPv6 สมควรมีบรรทัดของตัวเองในการตัดสินใจ ถ้าอะแดปเตอร์กายภาพมีที่อยู่ IPv6 แบบทั่วโลกในขณะที่อุโมงค์พาเฉพาะ IPv4 Windows อาจเลือกเส้นทางที่ไม่ผ่านอุโมงค์สำหรับการแปลงชื่อ ตรวจสอบตระกูลนั้นแยก เพราะเมตริกที่ตั้งไว้สำหรับ IPv4 ไม่ได้บอกอะไรเกี่ยวกับตระกูลนั้นเลย:

Get-NetIPInterface -AddressFamily IPv6 | Select-Object ifIndex, InterfaceAlias, InterfaceMetric

การปิด IPv6 บนอะแดปเตอร์ LAN จะลบเส้นทางนั้นและโปรโตคอลไปด้วย การเปลี่ยนเมตริกบนอินเทอร์เฟซ IPv6 หรือกฎ NRPT สำหรับเนมสเปซองค์กรจะคงตระกูลไว้และแก้ไขลำดับความสำคัญ เลือกอันที่แคบกว่า เว้นแต่คุณจะตัดสินใจว่าลิงก์นั้นไม่ควรมี IPv6

ตรวจสอบด้วยแหล่งที่ระบุชื่อ และรักษาเจ้าของเพียงหนึ่งเดียว

ตรวจสอบด้วยเครื่องมือที่รายงานว่าแหล่งใดมีผล ไม่ใช่เพียงว่าเพจโหลดได้:

ipconfig /all
Get-DnsClientServerAddress -AddressFamily IPv4
Resolve-DnsName fileserver.corp.example -Server 10.20.0.10 -Type A

จากนั้นแยกการกรองออกจากการเลือก เพราะจากภายในแอปพลิเคชันทั้งสองดูเหมือนกัน block-outside-dns ของ OpenVPN บล็อกพอร์ต 53 บนอะแดปเตอร์อื่น มันไม่ได้เลือกตัวแปลงชื่อ ถ้าตอนนี้ทุกคำขอล้มเหลว ตัวกรองอาจกำลังบล็อกเซิร์ฟเวอร์เดียวที่เข้าถึงได้ ถ้าตัวแปลงชื่อที่กำหนดค่าไว้ถูกเพิกเฉย ลำดับหรือกฎเนมสเปซผิด การเปลี่ยนทั้งสองพร้อมกันทำให้คำขอที่ถูกบล็อกกับคำขอที่ถูกเพิกเฉยแยกไม่ออก

รักษาเจ้าของนโยบาย DNS เพียงหนึ่งเดียว: โปรไฟล์ VPN นโยบายการจัดการ หรือกฎ NRPT ไม่ใช่สองอย่าง ก่อนปิดงาน:

  • ตัวแปลงชื่อที่ดันมาตอบเมื่อระบุชื่ออย่างชัดเจน และการค้นหาปกติใช้มัน
  • กฎหรือเมตริกที่คุณเปลี่ยนครอบคลุมตระกูลที่อยู่ที่พาคำขอจริง
  • การตั้งค่าอยู่รอดหลังการตัดการเชื่อมต่อและการเชื่อมต่อใหม่ หรือคุณย้ายมันไปยังโปรไฟล์ที่บันทึกไว้
  • มีกลไกเดียวเท่านั้นที่มีอำนาจ และกลไกอื่นถูกปล่อยไว้ตามเดิม

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

บทความที่เกี่ยวข้อง