본문 바로가기

네트워크

Windows Server : DNS Policy - 1

Today Keys :   dns windows, server, policy, 정책, record, zone, scope, query, 도메인, domain

 

 이번 포스팅에서는 Windows Server에서 DNS 서비스를 사용하는 경우에 사용 할 수 있는 DNS Policy에 대한 2가지 예제를 살펴봅니다.
첫 번째 예제에서는 DNS Query를 보내는 사용자 혹은 서버의 IP 대역에 따라서 서로 다른 Record 값을 응답하게 합니다.
두 번째 예제에서는 DNS가 2개의 네트워크 인터페이스를 갖고, DNS Query를 받는 네트워크 인터페이스에 따라서 서로 다른 Record 값을 응답하게 합니다.
이러 예제를 활용하면 DNS 서버를 분리하지 않고 특정 도메인에 대해서 사내 서버와 외부 서버에서 다른 Record 값을 받게하거나, 특정 서버군에서만 별도의 Record 값을 응답 받게 할 수 있습니다.
물론 여기에서 다룬 예제 이외에 더 많은 정책을 통해서 더 많은 용도의 활용이 가능합니다.
 

 
Windows Server 2016부터, 'DNS Policy'라는 새로운 Feature가 포함되었습니다.
DNS Policy를 이용하면 DNS 관리자가 정의한 Policy에 따라서 일반 사용자 혹은 다른 DNS에서 요청한 쿼리에 대한 응답을 하거나 차단할 수 있습니다.
DNS Policy를 사용하면 다음과 같은 처리가 가능합니다.
 
  ▪  지리적 위치 기반(Geo-Location)
  ▪  하루 중 특정 시간 기반 (Time of Day)
  ▪  서비스 요청 인터페이스 기반
  ▪  특정 요청에 대한 Filter
  ▪  정의된 비율에 따른 Query 응답 분산
 
이번 포스팅에서는 2가지 Policy를 사용한 예제를 살펴봅니다.
 

첫 번째 예제는 DNS Query를 보낸 서브넷에 따라서
특정 서브넷의 경우에는 별도로 설정된 A 레코드 값을 응답하는 예시입니다.
 
www.zigi.site 도메인에 대한 DNS Query에 대해서
기본은 2.2.2.22로 응답을 하나,
10.10.0.0/24 대역의 서버에서 온 경우에 2.2.2.22로 응답을 합니다.
 
 

 

먼저, DNS 설정 전의 DNS의 설정 값을 보겠습니다.
zigi.space라는 도메인에 대한 Zone이 있고, 아직 www라는 레코드는 없습니다.
 
 
PowerShell로 'zigi.space'라는 Zone에 'web'이라는 A Record를 추가합니다.
A Record의 값은 '2.2.2.22' 입니다.
 
 

 

 
다음은 zigi.space 내에 'internal'이라는 'Scope'를 만듭니다.
 
 
다시  'zigi.space'라는 Zone에 'web'이라는 A Record를 추가하는 데,
이번에는 ZoneScope을 앞에서 생성한 'internal'로 설정하고, A Record의 값은 '1.1.1.11' 로 설정합니다.
 
 
 
 
다시, DNS Manager에서 설정 값을 확인합니다.
별도의 Scope을 주지 않은 2.2.2.22 값을 갖고 있는 web(A) Record만 확인 됩니다.
 
 
PowerShell에서 www.zigi.space Record 값을 다시 확인해 봅니다.
DNS Manager에서 확인한 것과 동일한 값인 2.2.2.22 값을 볼 수 있습니다.

 

Record 확인 시, 별도의 ZoneScope을 'internal'로 지정해야 1.1.1.11이라는 값을 확인 할 수 있습니다.
 
 
 
현재 상태에서는 zigi-svr1(10.10.0.6)과 zigi-svr2(10.10.2.5)  모두 web.zigi.space에 대해서 2.2.2.22로 응답 받는 것을 확인 할 수 있습니다.

 

 
이제 Policy를 추가해 보겠습니다.
10.10.0.0/24라는 특정 대역에서 DNS Query를 보낸 경우에 다른 응답 값을 주기 위해서, ClientSubnet 값을 만들어 줍니다.
'ZIGI-InternalSubnet'이라는 이름으로 10.10.0.0/24 대역을 생성했습니다.
 
그리고, Query Resolution Policy를 만드는 데, 앞서 만든 'ZIGI-InternalSubnet'인 경우에 ZoneScope을 Internal로  한 결과 값을 응답하도록 합니다.
이 때, 설정한 가능한 영역 범위는 Zone별입니다. (즉, 도메인 별로 가능하며 여기에서는 zigi.space가 됩니다.)
 
 
 
설정이 정상적으로 잘 들어갔는지, ClientSubnet과 Query Resolution Policy 값을 확인합니다.
 
 
 
이제 다시  zigi-svr1(10.10.0.6)과 zigi-svr2(10.10.2.5)에서
web.zigi.space에 대한 DNS Query를 보내면,
zigi-svr2는 동일하게  2.2.2.22로 응답을 받지만
zigi-svr1은 응답 값이 1.1.1.11로 변경된 것을 볼 수 있습니다.
 
 

두 번째 예제는 사용자 혹은 서버가 보낸 DNS Query를 수신 받는
DNS 서버의 네트워크 인터페이스에 따라서 A 레코드 값을 다르게 응답하는 예시입니다.
 
전체적인 구성은 앞의 구성과 동일하나,
이번에는 DNS 서버에 2개의 네트워크 인터페이스가 존재합니다.
10.10.0.5라는 인터페이스와 10.10.0.7이라는 인터페이스가 있습니다.
 
 
 
web.zigi.space에 대한 Record와 'internal'이라는 ZoneScope은 첫 번째 예제에서 만든 것을 그대로 사용합니다.
기타 ClientSubnet과 Client Subnet을 사용하는 Query Resolution Policy는 삭제하였습니다.
 
이제 두 번째 예제를 위해서 새로운 Query Resolution Policy를 만듭니다.
이번에는 조건으로 ServerInterface가 10.10.0.7인 경우에 ZoneScope을 Internal로  한 결과 값을 응답하도록 합니다.
 
 
 
설정한 값이 정상적으로 되어 있는지 확인합니다.
 
 

 

이제 zigi-svr1에서  www.zigi.space 에 대한 Query를 보냅니다.
10.10.0.5와 10.10.0.7 모두 동일한 DNS 서버이지만,
10.10.0.5로 Query를 보낼 때는 기본 설정 값인 2.2.2.22로 응답을 받고
10.10.0.7로 Query를 보낸 경우에는 1.1.1.11로 응답을 받는 것을 볼 수 있습니다.
 
 

 

zigi-svr2에서도 zigi-svr1과 동일한 결과 값을 확인 할 수 있습니다.