DNS Server를 설치하면 DNS Server Process가 상당한 메모리(약 150MB)를 사용하게 된다. 그 이유는 Socket Pool을 사용하기 위해서 DNS와 관련된 Process가 갑자기 많이 실행된다. DNS Socket Pool은 DNS 서버 보안을 위해서 필요한 기능이다. 혹시 DNS 보안 보다 메모리 활용에 더 중점을 둔다면 SocketPoolSize를 조정하여 운영하면 된다.
DNS Socket Pool (Source Port Randomization)에 대한 자세한 내용은 다음 동영상(http://technet.microsoft.com/en-us/video/video-source-port-randomization-socket-pool-in-windows-server-2008-r2-dns.aspx)을 보면 알 수 있다. 좋은 동영상이므로 자세히 보면 왜 이런 기능이 Default로 설정되어 많은 메모리를 차지하게 되는지를 알 수 있다.
다음과 같이 테스트를 해본다.
1) DNS Server를 설치한다.
2) Task Manager를 실행하여 DNS Server Process가 얼마나 많은 메모리를 사용하는지 확인한다
3) netstat -ano를 실행한다. 그러면 많은 프로세스가 실행중임을 알 수있다
4) DNS socket pool size를 확인하기 위해 DNSCMD /Info /SocketPoolSize를 실행하거나 Get-DNSServer | more를 실행하여 현재 크기를 확인한다 (기본 설정 2500)
5) DNS socket pool size를 다음과 같이 진행하여 줄여 본 후 그 결과를 확인한다.
DNScmd /Config /SocketPoolSize 5
DNScmd /Info /SocketPoolSize
net stop dns & net start dns (dns 서버를 재시작하기)
6) Task manager를 실행하여 DNS Server Process가 얼마 만큼의 메모리를 차지하는지 확인한다. 상당히 많이 줄어들었다는 것을 알 수 있다.
7) netstat -ano를 실행한다. 그 결과 이전보다 프로세스 및 열린 포트 수량이 확 줄어 든 것을 알 수 있다.
** DNS Socket Pool을 이용하여 DNS Port Spoofing 공격을 방어하는 기능은 Windows Server 2008 R2에서 처음 제공되었고, Windows Server 2012에서 계속 제공되는 기능이다. 이것을 모르는 상태에서 DNS Server를 설치하면 상당히 많은 메모리를 점유하는 것을 보고 놀라게 되지만 보안을 우선하게 된다면 DNS Socket Pool 기능을 Default로 사용하거나 적당히 줄여서 사용하고, 보안보다는 메모리 활용에 더 중요도를 둔다면 DNS Socket Poolsize를 확 줄여서 DNS server를 운영하면 된다. DNS Socket Pool Size를 줄이는 방법은 DNScmd /Config /SocketPoolSize 원하는값 으로 하면 된다.