Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

แก้ไขปัญหา DNS Resolution ผ่าน VPN ไม่ทำงานบน Windows 10

เซิร์ฟเวอร์ DNS และ suffixes ที่กำหนดค่าสำหรับการเชื่อมต่อ VPN ถูกใช้ใน Windows 10 เพื่อ resolve ชื่อโดยใช้ DNS ในโหมด Force Tunneling ("Use default gateway on remote network" เปิดใช้งาน) หากการเชื่อมต่อ VPN ของคุณทำงานอยู่ ในกรณีนี้ คุณไม่สามารถ resolve ชื่อ DNS ในเครือข่ายท้องถิ่นของคุณ หรือเข้าถึงอินเทอร์เน็ตโดยใช้ LAN ภายในของคุณได้

ในเวลาเดียวกัน คุณสามารถ ping ทรัพยากรใดๆ บน LAN ของคุณได้ (ลอง ping กateway, คอมพิวเตอร์ข้างเคียง หรือที่อยู่ IP ของเครื่องพิมพ์) พวกเขาพร้อมใช้งานเฉพาะโดยที่อยู่ IP แต่ไม่ใช่โดยชื่อโฮสต์ ข้อเท็จจริงคือ Windows 10 กำลังพยายาม resolve ชื่อโฮสต์ในเครือข่ายท้องถิ่นของคุณผ่านเซิร์ฟเวอร์ DNS ที่ระบุในการตั้งค่าการเชื่อมต่อ VPN

ผมพบคำแนะนำบางอย่างเกี่ยวกับการปิดใช้งานโปรโตคอล IPv6 สำหรับอินเทอร์เฟซท้องถิ่น (LAN) และจะช่วยได้หากคุณต้องการใช้โหมด Force-Tunneling

หากคุณใช้ Split Tunneling (ตัวเลือก "Use default gateway on remote network" ไม่ได้ถูกติ๊ก) สำหรับการเชื่อมต่อ VPN ของคุณ คุณสามารถเข้าถึงอินเทอร์เน็ตจากเครือข่ายท้องถิ่นของคุณได้ แต่คุณไม่สามารถ resolve ที่อยู่ DNS ในเครือข่าย VPN ระยะไกลได้ (การปิดใช้งาน IPv6 ไม่ช่วยในที่นี้)

คุณต้องเข้าใจว่า Windows ส่งคำขอ DNS จากอินเทอร์เฟซเครือข่ายที่มีความสำคัญสูงสุด (ค่าต่ำสุดของ interface metric) ตัวอย่างเช่น การเชื่อมต่อ VPN ของคุณทำงานในโหมด Split Tunneling (คุณต้องการเข้าถึงอินเทอร์เน็ตจาก LAN และทรัพยากรองค์กรผ่าน VPN)

ตรวจสอบค่าของ interface metrics ทั้งหมดจาก PowerShell:

Get-NetIPInterface | Sort-Object Interfacemetric

แก้ไขปัญหา DNS Resolution ผ่าน VPN ไม่ทำงานบน Windows 10

ภาพหน้าจอด้านบนแสดงว่าการเชื่อมต่อ Ethernet ท้องถิ่นมี metric ต่ำกว่า (25) เทียบกับอินเทอร์เฟซ VPN (100) ดังนั้น_traffic DNS จึงไปผ่านอินเทอร์เฟซที่มีค่า metric ต่ำกว่า หมายความว่าคำขอ DNS ของคุณถูกส่งไปยังเซิร์ฟเวอร์ DNS ท้องถิ่นของคุณแทนที่จะเป็นเซิร์ฟเวอร์ DNS สำหรับการเชื่อมต่อ VPN ในการกำหนดค่านี้ คุณไม่สามารถ resolve ชื่อในเครือข่าย VPN ภายนอกที่เชื่อมต่ออยู่ได้

นอกจากนี้ คุณสมบัติใหม่ของ DNS client สำหรับ Windows 8.1 และ Windows 10 ควรจะถูกกล่าวถึงที่นี่ Smart Multi-Homed Name Resolution (SMHNR) ถูกเพิ่มเข้ามาในเวอร์ชัน OS เหล่านี้เพื่อให้ได้การตอบสนองต่อคำขอ DNS เร็วขึ้น โดยค่าเริ่มต้น SMHNR ส่งคำขอ DNS พร้อมกันไปยังเซิร์ฟเวอร์ DNS ทั้งหมดที่ระบบรู้จักและใช้การตอบสนองที่ได้รับก่อน (LLMNR และ NetBT queries ก็ถูกส่งเช่นกัน) มันไม่ปลอดภัยเพราะเซิร์ฟเวอร์ DNS ภายนอก (ที่ระบุสำหรับการเชื่อมต่อ VPN ของคุณ) อาจเห็น DNS traffic ของคุณได้ (การรั่วไหลของคำขอ DNS) คุณสามารถปิดใช้งาน SMHNR ใน Windows 10 ผ่าน GPO: Computer Configuration → Administrative Templates → Network → DNS Client → Turn off smart multi-homed name resolution = Enabled

แก้ไขปัญหา DNS Resolution ผ่าน VPN ไม่ทำงานบน Windows 10

หรือคุณสามารถปิดใช้งาน SMHNR โดยใช้คำสั่งต่อไปนี้ (ใน Windows 8.1):

Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\Windows NT\DNSClient" -Name DisableSmartNameResolution -Value 1 -Type DWord
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name DisableParallelAandAAAA -Value 1 -Type DWord

ใน Windows 10 Creators Update (1709) และใหม่กว่า คำขอ DNS จะถูกส่งไปยังเซิร์ฟเวอร์ DNS ทั้งหมดที่รู้จักทีละตัว (ไม่ใช่แบบขนาน) คุณสามารถเพิ่มความสำคัญของ DNS เฉพาะได้หากคุณทำให้ metric ของมันต่ำลง

ดังนั้น การเปลี่ยน interface metric ช่วยให้คุณส่งคำขอ DNS ผ่านการเชื่อมต่อ (LAN หรือ VPN) ที่การ resolve ชื่อเป็นสิ่งสำคัญที่สุดสำหรับคุณ

ดังนั้น ค่าของ interface metric ยิ่งต่ำ ความสำคัญของการเชื่อมต่อก็ยิ่งสูง Windows กำหนด metrics ของอินเทอร์เฟซ IPv4 โดยอัตโนมัติขึ้นอยู่กับความเร็วและประเภทของพวกเขา ตัวอย่างเช่น การเชื่อมต่อ LAN ที่มีความเร็ว > 200 Mbit/s มีค่า metric เท่ากับ 10 และการเชื่อมต่อ Wi-Fi ที่มีความเร็ว 50-80 Mbit/s มีค่า 50 (ดูตาราง https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes)

คุณสามารถเปลี่ยน interface metric จาก Windows GUI, PowerShell หรือโดยใช้คำสั่ง netsh

ตัวอย่างเช่น คุณต้องการให้คำขอ DNS ของคุณถูกส่งผ่านการเชื่อมต่อ VPN ของคุณ คุณต้องเพิ่ม metrics ของการเชื่อมต่อ LAN ของคุณ ให้ค่าของพวกเขาเกิน 100 (ในตัวอย่างของผม)

ไปที่ Control Panel → Network & Internet → Network Connections, เปิดคุณสมบัติของการเชื่อมต่อ Ethernet ของคุณ เลือกคุณสมบัติ TCP/IPv4 และไปที่แท็บ Advanced TCP/IP Settings ยกเลิกการติ๊กตัวเลือก Automatic metric และเปลี่ยน interface metric เป็น 120

แก้ไขปัญหา DNS Resolution ผ่าน VPN ไม่ทำงานบน Windows 10

คุณสามารถทำเช่นเดียวกันโดยใช้คำสั่ง PowerShell ต่อไปนี้ (ใช้ดัชนีของอินเทอร์เฟซ LAN ของคุณที่คุณสามารถรับได้ด้วย Get-NetIPInterface cmdlet):

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

หรือใช้ netsh (ระบุชื่อการเชื่อมต่อ LAN ของคุณ):

netsh int ip set interface interface="Ethernet0" metric=120

ในทางเดียวกัน คุณสามารถลดค่า metric ในคุณสมบัติของการเชื่อมต่อ VPN ของคุณได้

แก้ไขปัญหา DNS Resolution ผ่าน VPN ไม่ทำงานบน Windows 10

นอกจากนี้ คุณสามารถเปลี่ยนการตั้งค่าการเชื่อมต่อ VPN ของคุณโดยการเปลี่ยนโหมดเป็น Split Tunneling และระบุ DNS suffix สำหรับการเชื่อมต่อโดยใช้ PowerShell:

Get-VpnConnection
Set-VpnConnection -Name "VPN_work" -SplitTunneling $True
Set-VpnConnection -Name "VPN_work" -DnsSuffix yourdomainname.com