웹 또는 메일 서버를 관리하고 있다면, 이러한 서버가 적절하게 구성된 DNS 레코드에 크게 의존하는 것을 알고 있을 것입니다. 누락된 DNS 레코드는 웹사이트를 찾을 수 없거나 이메일이 전달되지 않는 등 다양한 문제를 일으킬 수 있습니다. 다행히도 PowerShell의 Resolve-DnsName cmdlet이 존재하며, 이를 통해 DNS 레코드를 스크립팅을 통해 자동으로 모니터링할 수 있습니다.
관리자의 일정은 이미 충분히 바쁜데, DNS 레코드가 적절하게 해석될 수 있는지 수동으로 확인하는 것은 더 많은 수동 노력을 의미합니다.
이 문서에서는 PowerShell의 Resolve-DnsName cmdlet을 사용하여 DNS 레코드를 쿼리하는 방법과 사용하는 방법을 배울 수 있습니다. 이 문서의 끝에는 모니터링할 DNS 레코드의 기본 스크립트를 작성하는 방법도 배우게 될 것입니다.
전제 조건
이 문서는 실습을 따라하려면 다음이 필요합니다:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 또는 PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: PowerShell DNS 리졸버
DNS 쿼리를 수행하는 방법에는 여러 가지가 있습니다. Resolve-DnsName cmdlet은 Windows에 기본으로 제공되는 nslookup 명령줄 도구나 Linux 관리자라면 dig 명령과 유사합니다.
일부 웹사이트에서는 DNS 레코드 모니터링/보고 서비스를 제공합니다. 그러나 대부분의 이러한 타사 서비스들은 물론 비용이 발생합니다. 무료 대안도 있습니다. 이 대안은 자신의 스크립팅 기술을 자랑할 수도 있습니다!
해당하는 이름 그대로 Resolve-DnsName
cmdlet은 DNS 이름을 IP 주소로 해석하고 그 반대로 해석합니다. 이 cmdlet은 현재 작성 시점인 Windows 10, Windows Server 2012/R2, Windows Server 2016 및 Windows Server 2019와 함께 제공되는 dnsclient PowerShell 모듈의 일부입니다.
Resolve-DnsName
은 PowerShell cmdlet이므로 결과를 객체로 반환하여 저장, 조작 및 내보낼 수 있습니다. 예를 들어, Resolve-DnsName google.com
명령을 사용하여 google.com의 DNS 레코드를 조회하면 아래에 표시된 출력을 얻을 수 있습니다.

결과는 객체로 반환되어 결과를 CSV 파일로 내보낼 수 있거나 형식을 조작하여 HTML 보고서를 생성할 수 있습니다.
Resolve-DnsName
cmdlet은 예전의 nslookup
유틸리티와 다릅니다. nslookup
은 간단한 문자열을 반환합니다. 아래 스크린샷에서 예시를 볼 수 있습니다. 이 정보 중 일부를 파싱해야 하는 경우 어려움이 될 것입니다.

다양한 유형의 DNS 레코드 쿼리
기본적으로 Resolve-DnsName
은 A 및 AAAA DNS 레코드 유형을 쿼리합니다. 예를 들어, 아래 명령을 사용하여 gmail.com
의 DNS 레코드를 조회하는 경우:
아래에서 볼 수 있듯이, AAAA 및 A 레코드만 반환됩니다. 이는 조회할 DNS 레코드 유형이 지정되지 않았기 때문입니다.

이제, 우리는 모두 Google의 이메일 서비스에서 사용하는 이메일 도메인인 gmail.com에 연결된 MX 레코드가 있을 것이라고 알고 있습니다. 이 명령을 사용하여 확인할 수 있으니 가정할 필요가 없습니다:
아래 스크린샷에서 보이는 출력은 gmail.com에 대한 MX 레코드 목록을 보여줍니다.

Resolve-DnsName
과 함께 사용할 수 있는 다른 레코드 유형에 대해 자세히 알아보려면 이 링크를 방문하고-Type
매개변수에 대한 테이블을 찾으세요. 또는get-help Resolve-DnsName
명령을 사용하여 Resolve-DnsName 도움말을 참조할 수 있습니다.
DNS 조회에 특정 서버 사용
Resolve-DnsName
은 기본적으로 컴퓨터에 설정된 DNS 서버 주소를 사용합니다. 그러나, 룩업을 수행할 때 Resolve-DnsName
을 특정 DNS 서버를 사용하도록 설정할 수도 있습니다.
예를 들어, 레코드를 조회하기 위해 Google 공개 DNS을 사용하고 싶다면, 아래 예시와 같이 명령어에 -Server
매개변수를 추가하면 됩니다.
위의 명령어 실행 결과는 아래 스크린샷과 유사할 것입니다.

이 시점에서, 아마도 “왜 다른 DNS 서버를 사용해야 할까요?”라는 의문이 드실 수 있습니다. 이는 타당한 질문입니다. 기본 DNS 서버나 다른 DNS 서버를 사용하여 동일한 레코드를 조회해보면 아마도 동일한 결과를 얻게 될 것입니다.
Resolve-DnsName
에 다른 DNS 서버를 사용하는 것에는 여러 가지 이유가 있을 수 있습니다. 이러한 이유 중 일부는 다음과 같을 수 있습니다:
- 속도 – 일부 DNS 서버는 다른 DNS 서버보다 빠를 수 있습니다.
- 보안 – 일부 DNS 서버는 해킹과 공격을 방지하기 위한 더 많은 보안 조치를 가지고 있을 수 있습니다.
- 레코드 가용성 – 대부분의 경우, 기관은 내부 DNS 서버를 소유하고 있으며 내부적으로만 해결되는 이름의 영역과 레코드를 포함하고 있습니다. 이 경우, 공용 DNS 서버를 사용하여 내부 이름을 조회하면 실패합니다.

- DNS 서버가 요청을 전달하지 않음 – 일부 기관은 DNS 전달을 허용하지 않습니다. 이러한 기관을 사용하여 공용 DNS 레코드를 조회하면 실패합니다.
- 문제 해결 및 테스트 – 좋아하는 DNS 서버가 문제가 발생할 때는 다른 DNS 서버를 사용하여 조회를 테스트하고자 할 수 있습니다.
PowerShell 스크립트를 사용하여 DNS 레코드 보고
이제 Resolve-DnsName
cmdlet을 사용하는 기본 사항을 배웠으므로, 이 섹션에서는 DNS 레코드를 모니터링하고 보고하는 PowerShell 스크립트를 만드는 방법을 배울 것입니다. 이전 섹션에서 습득한 지식을 적용하여 이 스크립트를 작성할 수 있어야 합니다.
선호하는 스크립트 편집기를 실행하고 GetDnsRecord.ps1이라는 새 파일을 생성하세요.
변수 정의
먼저, 사용할 변수를 결정하세요. 이러한 변수는 다음과 같습니다:
$NameList
– 이 변수는 스크립트에서 조회하고자 하는 DNS 레코드의 이름을 보관합니다.$Serverlist
– 이 변수를 사용하여 스크립트에서 조회에 사용할 DNS 서버를 지정하세요.
아래 코드를 복사하여 스크립트의 시작 부분에 붙여넣으세요.
DNS 조회 수행
다음으로 코드는 각 지정된 이름의 DNS 레코드를 조회할 수 있어야합니다. 이 경우에는 foreach 루프를 사용하여 레코드 목록을 반복하고 Resolve-DnsName
을 사용하여 각 이름을 조회합니다.
$FinalResult = @()
라인은 최종 결과가 저장될 빈 배열을 생성합니다. 그런 다음 foreach 루프를 사용하여 PowerShell은 $NameList
변수의 각 항목을 $Name
이라는 변수에 전달합니다.
각 반복에서 $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
라인은 성공적인 DNS 조회 결과를 저장하기 위해 네 개의 속성을 가진 임시 개체를 만듭니다.
다음으로, try{}
문을 사용하여 Resolve-DnsName
명령을 실행하여 DNS A 레코드를 조회하고 $tempObj
값을 채웁니다. DNS 조회가 실패하는 경우, catch{}
문은 오류를 잡고 오류가 $tempObj
개체에 포함됩니다.
각 반복이 끝날 때마다 $tempObj
개체의 값은 $FinalResult
에 추가됩니다. 그리고 $NameList
배열의 마지막 항목이 처리되면 루프가 종료됩니다. 그런 다음 $FinalResult
의 값이 표시됩니다.
아래의 코드를 복사하여 스크립트 끝에 붙여넣으세요. 어떤 값을 변경할 필요는 없습니다.
스크립트를 저장한 후에는 PowerShell에서 해당 이름을 호출하여 스크립트를 실행하십시오. GetDnsRecord.ps1 이라고 합니다. 아래의 데모에서 출력 결과를 확인할 수 있습니다.

위의 결과에서 알 수 있듯이 출력은 객체이며, 아래의 명령을 사용하여 CSV 파일로 결과를 내보내는 데 유용합니다.
CSV 출력은 다음과 유사한 모습입니다.

결론
이 문서에서는 PowerShell에서 DSN 레코드 조회를 수행하는 방법에 대한 기본 사항을 배웠습니다. 또한 nslookup 유틸리티와 같은 다른 도구와 Resolve-DnsName
의 차이점도 알아보았습니다.
Resolve-DnsName
을 스크립트에서 사용하여 DNS 레코드 조회를 자동화하는 방법도 살펴보았습니다. 이는 관리하는 DNS 레코드의 현재 상태를 알 수 있도록하는 모니터링 도구로 유용할 수 있습니다.
PowerShell 스크립팅 기술을 사용하여 보고 스크립트를 개선하면 코드를 추가하여 지정된 수신자에게 보고서를 자동으로 이메일로 전송할 수 있습니다. 또한 시각적으로 매력적인 HTML 출력을 생성하도록 수정할 수도 있습니다.
최종적으로, Resolve-DnsName
은 수동으로 사용하든 스크립트의 자동화에 사용하든 DNS 조회에 탁월한 도구입니다. 이제 작동 방식을 알았으니, 관리 작업의 일환으로 사용할 방법을 찾는 것은 여러분에게 달렸습니다.