존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면? - 두 번째 이야기
지난 글에서,
존재하지 않는 IP 주소에 대한 Dns.GetHostByAddress/gethostbyaddr/GetNameInfoW 실행이 느리다면?
; https://www.sysnet.pe.kr/2/0/11852
빼 먹은 내용이 좀 있군요. ^^
우선, "Disable NetBIOS over TCP/IP"로 NetBIOS 서비스를 안 쓰도록 설정하면 어떤 문제점이 있을까요? 당연히, 기존에는 Dns.GetHostByAddress로 값을 반환하던 내부 네트워크의 컴퓨터 이름들이 IP 주소에 대해 풀이가 안 됩니다.
만약, 이 상태에서도 내부 네트워크 컴퓨터에 대한 이름 풀이를 하고 싶다면 HOSTS 파일에 수작업으로 등록하거나 내부 DNS 서버를 운영해 Reverse Lookup Zone을 만들어야 합니다.
그나저나... 이것 말고 재미있는 현상이 하나 더 있습니다. 이전 글에서 Dns.GetHostByAddress가 약 4.5초 걸린다고 했었는데요.
2019-03-20 오후 2:45:41
2019-03-20 오후 2:45:46, 4549.9928,
이 상태에서 "Disable NetBIOS over TCP/IP"를 설정해 DNS 쿼리 한번만 발생하게 만들면 저 결과가 40ms 정도가 됩니다. 그런데, 존재하지 않는 IP에 대해서는 그렇게 빠르게 끝나는 반면, 오히려 이번에는 존재하는 내부 IP에 대해 800ms 정도의 시간이 걸립니다. 물론 그렇다고 해서 (Disable NetBIOS over TCP/IP 상태이므로) 이름 풀이가 된 것도 아닙니다. 도대체 왜 이런 걸까요? ^^;
존재하는 IP에 대해서 800ms 정도가 나온 시스템의 경우, 마찬가지로 netsh trace를 걸어봤더니 이번에는 DNS 쿼리에 이어 다음과 같이 LLMNR 쿼리가 이어졌습니다.
67 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
68 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
69 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
100 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
101 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
102 ... 192.168.137.1 224.0.0.252 LLMNR LLMNR:QueryId = 0x5F9, Standard, Query for 26.0.168.192.in-addr.arpa of type PTR on class Internet
그렇습니다, 저 쿼리가 문제입니다. 이 문제를 해결하려면, 역시나 LLMNR 서비스를 비활성화시켜야 하는데 이 방법에 대해서는 다음의 글에 잘 나와 있습니다.
Disable LLMNR Netbios
; http://www.pciqsatalk.com/2016/03/disable-lmnr-netbios.html
Link-Local Multicast Name Resolution (LLMNR) - LLMNR is a protocol enabled by default that allows both IPv6 and IPv4 hosts to perform name resolution for the names of neighboring computers without requiring a DNS server or DNS client configuration
정리하면, gpedit.msc를 실행해 Local Computer Policy / Computer Configuration / Administrative Templates / Network / DNS Client 노드로 이동한 후 "Turn Off Multicast Name Resolution" 설정을 "Enabled"로 바꾸면 됩니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]