Enterprise IT Solutions/Microsoft

DNS Round Robin, Netmask Ordering, Subnet Priortization

iseop 2021. 12. 31. 15:26   인쇄용 버전

얼마 전에 일부 윈도우 도메인 클라이언트에서 도메인 네트워크에 접근하는 데 상당한 지연(한 10초 정도)이 생기는 이슈가 있어 조사해 보았더니, DNS 서버(Server 2012)가 도메인 컨트롤러의 A 레코드를 임의로 응답해서 클라이언트가 접근할 수 없는 레코드를 응답하는 문제였습니다.


DNS Netmask Ordering 기능은 DNS 서버에 동일한 A 레코드가 여러 개 존재할 때, DNS 클라이언트가 위치한 서브넷과 유사한 순서로 배치하여 응답하는 기능입니다. 예를 들어서 클라이언트가 10.0.0.100이라면 아래 순서로 응답해 줍니다.

www.test.local 10.0.0.1
www.test.local 10.0.1.1
www.test.local 10.0.2.1

 

DNS Round Robin 기능은 DNS 서버가 레코드가 추가된 순서대로 한개씩 돌아가며 응답해주는 기능입니다. 기본적으로 활성화되어 있습니다. 예를 들어 첫 번째 응답은

www.test.local 10.0.0.1
www.test.local 10.0.1.1
www.test.local 10.0.2.1

두 번째 응답은

www.test.local 10.0.1.1
www.test.local 10.0.2.1
www.test.local 10.0.0.1

이런 식입니다.

 

Subnet Priortization 기능은 DNS 리졸버(클라이언트)가 자신의 IP 주소와 가장 유사한 주소를 선택하는 기능입니다.

 

DNS 서버의 Netmask Ordering과 Round Robin 설정은 아래 registry entry에 있고,

HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters, LocalNetPriority

HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters, RoundRobin

 

DNS 리졸버의 Subnet Priortization 기능은 아래 entry에 있습니다.

HKLM\SYSTEM\CurrentControlSet\Services\DnsCache\Parameters, PrioritizeRecordData

 


 

그래서 '왜 Netmask Ordering이 켜져 있는데 엉뚱한 주소를 갖다줄까'라고 고민하고 있었는데, 어느 블로그에서 답을 찾았습니다. Round Robin이 Subnet Priortization에 선순위를 갖고, Netmask Ordering은 기본적으로 Class C 서브넷 기준으로 작동한다는 것입니다.

 

위 케이스에서는 서버에 Round Robin, Netmask Ordering이 작동중이고, 로컬 네트워크의 서브넷은 /27이었습니다. 따라서 클라이언트는 다른 서브넷의 주소를 받았던 것입니다.

 

결론적으로, 해결책은 아래 명령으로 /27 서브넷 기준으로 Netmask Ordering을 하도록 하는 것입니다.

Dnscmd.exe /Config /LocalNetPriorityNetMask 0x0000001f

# 0000 0000 0000 0000 0000 0000 0001 1111
#    0    0    0    0    0    0    1    f

 

참고