Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PowerShell로 DNS 영역 및 레코드 생성·관리하기

Windows 관리자는 오래된 Dnscmd CLI 도구나 PowerShell용 DNSServer 모듈을 사용해 DNS 영역(zone)과 레코드(record)를 관리할 수 있습니다. 이 글에서는 PowerShell을 활용해 다양한 DNS 레코드와 영역을 대량으로 생성, 수정, 삭제하는 기본 작업 방법을 자세히 살펴보겠습니다.

DNSServer PowerShell 모듈 설치 및 확인

PowerShell용 DNSServer 모듈은 RSAT(원격 서버 관리 도구)에 포함되어 있습니다. Windows 10에서는 RSAT를 별도로 설치해야 하며, Windows Server에서는 서버 관리자 GUI(역할 관리 도구 → DNS 서버 도구)를 통해 해당 모듈을 활성화할 수 있습니다.

먼저 다음 명령어로 DNSServer PowerShell 모듈이 컴퓨터에 설치되어 있는지 확인합니다:

Get-Module DNSServer –ListAvailable

모듈에 포함된 명령어 목록도 확인할 수 있습니다(Windows Server 2016용 모듈에는 134개의 cmdlet이 포함되어 있습니다):

Get-Module DNSServer

PowerShell로 DNS 영역 관리하기

서버(여기서는 도메인 컨트롤러)에 설정된 DNS 영역 목록을 확인하려면 다음 명령어를 실행합니다:

Get-DnsServerZone –ComputerName dc01

woshub.com이라는 새로운 주(primary) DNS 영역을 추가하려면 아래 명령어를 사용합니다:

Add-DnsServerPrimaryZone -Name woshub.com -ReplicationScope "Forest" –PassThru

실행 결과를 보면 Active Directory에 통합된 주 DNS 영역이 생성된 것을 확인할 수 있습니다(isDsIntegrated=True).

역방향 조회 영역(Reverse Lookup Zone)도 다음과 같이 생성할 수 있습니다:

Add-DnsServerPrimaryZone -NetworkId "192.168.100.0/24" -ReplicationScope Domain

새로 만든 영역을 도메인 내 다른 DC들과 동기화하려면 다음 명령어를 실행합니다:

Sync-DnsServerZone –passthru

새 DNS 영역의 레코드 목록을 표시해 보면 현재 비어 있는 것을 알 수 있습니다:

Get-DnsServerResourceRecord -ComputerName dc01 -ZoneName contoso.local

DNS 영역을 삭제하려면 다음 명령어를 사용합니다:

Remove-DnsServerZone -Name woshub.com -ComputerName dc01

이 명령을 실행하면 해당 영역에 존재하는 모든 DNS 레코드까지 함께 삭제되므로 주의해야 합니다.

DNSServer 모듈로 DNS 레코드 관리하기

지정한 DNS 영역에 호스트용 새 A 레코드를 생성하려면 다음 명령어를 사용합니다:

Add-DnsServerResourceRecordA -Name ber-rds1 -IPv4Address 192.168.100.33 -ZoneName woshub.com -TimeToLive 01:00:00

역방향 조회 영역에 PTR 레코드를 추가하려면 위 명령어에 –CreatePtr 매개변수를 추가하거나, Add-DNSServerResourceRecordPTR cmdlet으로 포인터 레코드를 직접 생성할 수 있습니다:

Add-DNSServerResourceRecordPTR -ZoneName 100.168.192.in-addr.arpa -Name 33 -PTRDomainName ber-rds1.woshub.com

특정 A 레코드에 대한 별칭(CNAME)을 추가하려면 다음 명령어를 실행합니다:

Add-DnsServerResourceRecordCName -ZoneName woshub.com -Name Ber-RDSFarm -HostNameAlias ber-rds1.woshub.com

A 레코드의 IP 주소를 변경하려면 IP를 직접 수정할 수 없기 때문에 다소 복잡한 절차를 거쳐야 합니다. 먼저 동일한 레코드를 두 개의 변수에 담습니다:

$NewADNS = get-DnsServerResourceRecord -Name ber-rds1 -ZoneName woshub.com -ComputerName dc01
$OldADNS = get-DnsServerResourceRecord -Name ber-rds1 -ZoneName woshub.com -ComputerName dc01

그다음 $NewADNS 개체의 IPv4Address 속성을 변경합니다:

$NewADNS.RecordData.IPv4Address = [System.Net.IPAddress]::parse('192.168.100.133')

Set-DnsServerResourceRecord cmdlet으로 A 레코드의 IP 주소를 업데이트합니다:

Set-DnsServerResourceRecord -NewInputObject $NewADNS -OldInputObject $OldADNS -ZoneName woshub.com -ComputerName dc01

A 레코드의 IP 주소가 정상적으로 변경되었는지 확인합니다:

Get-DnsServerResourceRecord -Name ber-rds1 -ZoneName woshub.com

–RRType 매개변수를 사용하면 특정 유형의 DNS 레코드만 필터링해 볼 수 있습니다. 예를 들어 지정한 영역의 CNAME 레코드 목록을 확인해 보겠습니다:

Get-DnsServerResourceRecord -ComputerName DC01 -ZoneName woshub.com -RRType CNAME

또한 Where-Object를 활용하면 DNS 레코드의 어떤 속성으로든 검색할 수 있습니다. 예를 들어 호스트 이름에 rds라는 문자열이 포함된 A 레코드 목록을 표시하려면 다음과 같이 합니다:

Get-DnsServerResourceRecord -ZoneName woshub.com -RRType A | Where-Object HostName -like "*rds*"

DNS 레코드를 삭제할 때는 Remove-DnsServerResourceRecord cmdlet을 사용합니다.

예를 들어 CNAME 레코드를 삭제하려면 다음 명령어를 실행합니다:

Remove-DnsServerResourceRecord -ZoneName woshub.local -RRType CName -Name Ber-RDSFarm

A 레코드를 삭제하려면:

Remove-DnsServerResourceRecord -ZoneName woshub.local -RRType A -Name ber-rds1 –Force

역방향 조회 영역에서 PTR 레코드를 삭제하려면:

Remove-DnsServerResourceRecord -ZoneName "100.168.192.in-addr.arpa" -RRType "PTR" -Name "33"

CSV 파일로 여러 개의 A 및 PTR 레코드 한 번에 생성하기

특정 DNS 정방향 조회 영역에 여러 개의 A 레코드를 한 번에 생성해야 하는 경우를 가정해 보겠습니다. Add-DnsServerResourceRecordA cmdlet으로 하나씩 추가할 수도 있지만, .CSV 파일을 이용해 대량으로 추가하는 것이 훨씬 효율적입니다.

DNS에 추가할 호스트 이름과 IP 주소가 담긴 텍스트 파일 NewDnsRecords.txt를 먼저 생성합니다. 파일 형식은 다음과 같습니다:

HostName, IPAddress

TXT/CSV 파일의 데이터를 기반으로 woshub.com 영역에 A 레코드를 생성하려면 다음 PowerShell 스크립트를 사용합니다:

Import-CSV "C:\PS\NewDnsRecords.txt" | %{
Add-DNSServerResourceRecordA -ZoneName woshub.com -Name $_."HostName" -IPv4Address $_."IPAddress"
}

같은 작업에서 역방향 조회 영역에도 PTR 레코드를 함께 생성하고 싶다면 Add-DNSServerResourceRecordA 명령어에 –CreatePtr 매개변수를 추가하면 됩니다.

작업이 끝나면 DNS 관리자 콘솔(dnsmgmt.msc)이나 Get-DnsServerResourceRecord -ZoneName woshub.local 명령어로 모든 레코드가 성공적으로 생성되었는지 확인합니다.

역방향 조회 영역에 PTR 레코드를 대량으로 추가하려면 다음 구조의 텍스트 또는 CSV 파일을 준비합니다:

octet,hostName,zoneName
102,ber-rds2.woshub.com,100.168.192.in-addr.arpa
103,ber-rds3.woshub.com,100.168.192.in-addr.arpa
104,ber-rds4.woshub.com,100.168.192.in-addr.arpa
105,ber-rds5.woshub.com,100.168.192.in-addr.arpa

그런 다음 아래 스크립트를 실행합니다:

Import-CSV "C:\PS\NewDnsPTRRecords.txt" | %{
Add-DNSServerResourceRecordPTR -ZoneName $_."zoneName" -Name $_."octet" -PTRDomainName $_."hostName"
}

마지막으로 PTR 레코드가 DNS 역방향 조회 영역에 올바르게 등록되었는지 확인하면 완료입니다.