Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows 10에서 VPN 연결 시 DNS 확인이 되지 않는 문제 해결 방법

Windows 10에서 VPN 연결에 설정된 DNS 서버와 접미사는 강제 터널링(Force Tunneling) 모드("원격 네트워크에 기본 게이트웨이 사용" 옵션 활성화)에서 VPN 연결이 활성화된 동안 DNS 이름 확인에 사용됩니다. 이 경우 로컬 네트워크의 DNS 이름을 확인할 수 없고, 내부 LAN을 통한 인터넷 접속도 불가능합니다.

흥미로운 점은 LAN의 리소스에는 여전히 ping이 가능하다는 것입니다(게이트웨이, 인접 PC, 프린터의 IP 주소 등). 즉, IP 주소로는 접근할 수 있지만 호스트 이름으로는 접근할 수 없습니다. 그 이유는 Windows 10이 VPN 연결 설정에 지정된 DNS 서버를 통해 로컬 네트워크의 호스트 이름까지 확인하려고 시도하기 때문입니다.

터널링 모드별 증상 차이

일부에서는 로컬(LAN) 인터페이스의 IPv6 프로토콜을 비활성화하면 도움이 된다는 권장 사항이 있습니다. 이는 강제 터널링 모드를 사용하려는 경우에만 유효합니다.

반면 분할 터널링(Split Tunneling)("원격 네트워크에 기본 게이트웨이 사용" 옵션 선택 해제)을 사용하면 로컬 네트워크를 통한 인터넷 접속은 가능하지만, 원격 VPN 네트워크의 DNS 주소를 확인할 수 없습니다(이 경우 IPv6 비활성화로는 해결되지 않습니다).

인터페이스 메트릭과 DNS 우선순위

Windows는 우선순위가 가장 높은(인터페이스 메트릭 값이 낮은) 네트워크 인터페이스를 통해 DNS 쿼리를 보냅니다. 예를 들어, VPN이 분할 터널링 모드로 동작 중이고(로컬 LAN으로 인터넷 접속 + VPN으로 사내 리소스 접근), 어떤 인터페이스가 DNS 요청을 처리하는지 확인하려면 PowerShell에서 모든 네트워크 인터페이스의 메트릭 값을 조회할 수 있습니다:

Get-NetIPInterface | Sort-Object Interfacemetric

Windows 10에서 VPN 연결 시 DNS 확인이 되지 않는 문제 해결 방법

위 결과에서 로컬 이더넷 연결의 메트릭(25)이 VPN 인터페이스(100)보다 낮은 것을 확인할 수 있습니다. DNS 트래픽은 메트릭 값이 낮은 인터페이스를 통해 전송되므로, DNS 요청이 VPN 연결의 DNS 서버가 아닌 로컬 DNS 서버로 전달됩니다. 이 구성에서는 연결된 외부 VPN 네트워크의 이름을 확인할 수 없습니다.

SMHNR(스마트 멀티 홈 이름 확인)과 DNS 유출 위험

Windows 8.1 및 Windows 10의 DNS 클라이언트에는 스마트 멀티 홈 이름 확인(Smart Multi-Homed Name Resolution, SMHNR)이라는 새로운 기능이 도입되었습니다. 이는 DNS 요청에 대한 응답 속도를 높이기 위한 것으로, 기본적으로 시스템이 알고 있는 모든 DNS 서버에 동시에 DNS 요청을 보내고 가장 먼저 받은 응답을 사용합니다(LLMNR 및 NetBT 쿼리도 함께 전송됨). 이 방식은 보안상 위험할 수 있습니다. VPN 연결에 지정된 외부 DNS 서버가 사용자의 DNS 트래픽(DNS 요청 유출)을 잠재적으로 볼 수 있기 때문입니다.

그룹 정책(GPO)을 통해 Windows 10에서 SMHNR을 비활성화할 수 있습니다:

컴퓨터 구성 → 관리 템플릿 → 네트워크 → DNS 클라이언트 → "스마트 멀티 홈 이름 확인 끄기(Turn off smart multi-homed name resolution)" = 사용(Enabled)

Windows 10에서 VPN 연결 시 DNS 확인이 되지 않는 문제 해결 방법

또는 다음 명령으로 비활성화할 수 있습니다(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 서버의 우선순위를 높이려면 해당 메트릭 값을 낮추면 됩니다.

인터페이스 메트릭 변경으로 DNS 경로 제어하기

요약하면, 인터페이스 메트릭 값이 낮을수록 해당 연결의 우선순위가 높아집니다. Windows는 인터페이스의 속도와 종류에 따라 IPv4 메트릭을 자동으로 할당합니다. 예를 들어 속도가 200Mbps를 초과하는 LAN 연결의 메트릭 값은 10이고, 50~80Mbps 속도의 Wi-Fi 연결은 50입니다(자세한 내용은 Microsoft 문서 "IPv4 경로에 대한 자동 메트릭 기능 설명" 참조).

인터페이스 메트릭은 Windows GUI, PowerShell 또는 netsh 명령으로 변경할 수 있습니다.

예를 들어 DNS 요청이 VPN 연결을 통해 전송되기를 원한다면, LAN 연결의 메트릭 값을 100(예시 기준)보다 크게 올려야 합니다.

제어판 → 네트워크 및 인터넷 → 네트워크 연결로 이동하여 이더넷 연결의 속성을 엽니다. TCP/IPv4 속성에서 고급 TCP/IP 설정 탭으로 이동한 후, 자동 메트릭(Automatic metric) 옵션의 체크를 해제하고 인터페이스 메트릭을 120으로 변경합니다.

Windows 10에서 VPN 연결 시 DNS 확인이 되지 않는 문제 해결 방법

PowerShell 명령으로도 동일하게 설정할 수 있습니다(Get-NetIPInterface cmdlet으로 확인한 LAN 인터페이스 인덱스 사용):

Set-NetIPInterface -InterfaceIndex 11 -InterfaceMetric 120

또는 netsh 명령 사용(LAN 연결 이름 지정):

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

같은 방식으로 VPN 연결 속성에서 메트릭 값을 낮추면 VPN 쪽 이름 확인 우선순위를 높일 수 있습니다.

Windows 10에서 VPN 연결 시 DNS 확인이 되지 않는 문제 해결 방법

PowerShell로 VPN 연결 설정 변경하기

VPN 연결 설정을 분할 터널링 모드로 변경하고 연결에 DNS 접미사를 지정할 수도 있습니다:

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

마무리

Windows 10의 VPN DNS 문제는 대부분 인터페이스 메트릭 우선순위와 SMHNR의 동작 방식에서 비롯됩니다. LAN과 VPN 인터페이스의 메트릭 값을 적절히 조정하고, 필요에 따라 SMHNR을 비활성화하면 어느 네트워크를 통해 이름을 확인할지 명확하게 제어할 수 있습니다.