Microsoft DNS Server は、Windows Serverに搭載されているDNSサーバです。
Active DIrectoryはDNSが必須なので、Active Directory環境では一般的にはMicrosoft DNS Serverが使用されているかもしれません。
DNSサーバの管理タスクとしては、レコードの追加や変更など、結構頻繁に発生します。頻繁には発生しないという人は、この記事を見る必要はありません。
Microsoft DNS Serverの管理にはGUIの管理ツールを使用すると思います。しかしリモートから管理しようとすると、リモートデスクトップでログインしてGUI管理ツールを使用する必要があります。頻繁に管理タスクが発生する場合には、その都度リモートデスクトップというのは煩わしい作業になるかもしれません。Windowsパソコンから管理するのであれば、リモート管理ツールがあるので、リモートデスクトップしなくても管理ができますが、クライアントがMacだったりすると、他の方法はありません。強いていうとWindows Admin Toolを使用するという方法がありますが、この方法については別途記事を書こうと思います。
ということで、 DNS ServerにSSHでアクセスしてPowershellからDNSサーバを操作する方法を説明します。
1. 前提条件
2. PowershellとDNS管理する場合の基本
3. ゾーンのレコードの確認
4. レコードの追加
5. レコードの削除
1.前提条件
初めに前提条件を説明します。
(1) Windows Serverはどのバージョンでも問題ないと思いますが私はWindows Server 2022を使用しました。
(2) Powershellのバージョンは、これもバージョンごとには違わないと思いますが7.4.2を使用しました。
(3) SSHDはWindows Server に標準のOpenSSHを使用していますが、WindowsのOpenSSHの標準のシェルはCMD.exeです。それをPowershellに変更していますがその方法はここでは述べません。cmd.exeの中でpowershellを起動しても構いません。
(4) cmd.exeではdnscmdというDNSサーバ管理のCLIがありますが、今後廃止されるかもしれないということなので、Powershellで管理する方法を説明します。
2.PowershellとDNS管理する場合の基本
まずはDNS管理のコマンドについてGUIと違いまずコマンド名を知らないとどうしようもありません。
PowershellでDNSに関わらずコマンドを探すには以下のようにします。
# get-command *dns*
CommandType Name Version Source
----------- ---- ------- ------
Alias dnsn -> Disconnect-PSSession
Alias Export-DnsServerTrustAnchor 2.0.0.0 DNSserver
Alias Get-DnsServerRRL 2.0.0.0 DNSserver
Alias Set-DnsServerRRL 2.0.0.0 DNSserver
Function Add-DnsClientDohServerAddress 1.0.0.0 DnsClient
Function Add-DnsClientNrptRule 1.0.0.0 DnsClient
Function Add-DnsServerClientSubnet 2.0.0.0 DNSserver
Function Add-DnsServerConditionalForwarderZone 2.0.0.0 DNSserver
Function Add-DnsServerDirectoryPartition 2.0.0.0 DNSserver
(以下略)
get-command
は覚えて下さい。
*dns*
はコマンド名にdnsを含むコマンドという意味です。
結果がいっぱい出てきます。一番右側のSource
の欄を見ると、DNSserver
とかDncClient
とか出てきます。
今回は、DNS Serverの管理なので DNSserverに絞ります。
# get-command -Module DNSserver
CommandType Name Version Source
----------- ---- ------- ------
Alias Export-DnsServerTrustAnchor 2.0.0.0 DNSserver
Alias Get-DnsServerRRL 2.0.0.0 DNSserver
Alias Set-DnsServerRRL 2.0.0.0 DNSserver
Function Add-DnsServerClientSubnet 2.0.0.0 DNSserver
Function Add-DnsServerConditionalForwarderZone 2.0.0.0 DNSserver
Function Add-DnsServerDirectoryPartition 2.0.0.0 DNSserver
(以下略)
それでもまだいっぱい出てきますが、これが、DNS Serverの管理コマンドの全てです。
コマンドは、原則get
やadd
、remove
、set
などのアクションに-で対象を指定する形式になっています。
さらにRemoveに絞ります。
# get-command -Module DNSserver remove*
CommandType Name Version Source
----------- ---- ------- ------
Function Remove-DnsServerClientSubnet 2.0.0.0 DNSserver
Function Remove-DnsServerDirectoryPartition 2.0.0.0 DNSserver
Function Remove-DnsServerForwarder 2.0.0.0 DNSserver
Function Remove-DnsServerQueryResolutionPolicy 2.0.0.0 DNSserver
Function Remove-DnsServerRecursionScope 2.0.0.0 DNSserver
Function Remove-DnsServerResourceRecord 2.0.0.0 DNSserver
Function Remove-DnsServerResponseRateLimitingExceptionlist 2.0.0.0 DNSserver
Function Remove-DnsServerRootHint 2.0.0.0 DNSserver
Function Remove-DnsServerSigningKey 2.0.0.0 DNSserver
Function Remove-DnsServerTrustAnchor 2.0.0.0 DNSserver
Function Remove-DnsServerVirtualizationInstance 2.0.0.0 DNSserver
Function Remove-DnsServerZone 2.0.0.0 DNSserver
Function Remove-DnsServerZoneDelegation 2.0.0.0 DNSserver
Function Remove-DnsServerZoneScope 2.0.0.0 DNSserver
Function Remove-DnsServerZoneTransferPolicy 2.0.0.0 DNSserver
#
個々のコマンドの詳細は、
# get-help Add-DnsServerVirtualizationInstance
NAME
Add-DnsServerVirtualizationInstance
SYNTAX
Add-DnsServerVirtualizationInstance [-Name] <string> [-ComputerName <string>] [-FriendlyName <string>] [-Description <string>] [-PassThru] [-CimSession <CimSession[]>] [-ThrottleLimit <int>] [-AsJob] [-WhatIf] [-Confirm] [<CommonParameters>]
ALIASES
None
REMARKS
Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
-- To download and install Help files for the module that includes this cmdlet, use Update-Help.
もしくはコマンド -?
で確認します。
それでは実際に管理をしてみましょう。
3. ゾーンのレコードの確認
Get-DnsServerResourceRecord example.com | sort RecordType,HostName
example.com
にはドメインを指定します。
-rrtype A
のようにリソースレコードタイプを指定して、表示することも可能です。
尚、sort RecordType,HostName
はRecordTypeで並び替えをして、同じレコードタイプの中では、Hostnameで並び替えをします。sort RecordType+HostName
とすると、RecordTypeとHostNameの組み合わせで並び替えをします。並び替えは、昇順になります。降順にする場合は-Descending
を指定します。
4. レコードの追加
example.com に myname という 192.168.168.168 のAレコードを追加します。
まずは、レコードがないか確認します。
# get-DnsServerResourceRecord example.com myname
Get-DnsServerResourceRecord: XXX サーバー上の example.com ゾーンにある myname レコードを取得できませんでした。
#
追加します。
# add-DnsServerResourceRecord example.com myname -A -ipv4address 192.168.168.168
#
結果を確認します。
# get-DnsServerResourceRecord example.com myname
HostName RecordType Type Timestamp TimeToLive RecordData
-------- ---------- ---- --------- ---------- ----------
myname A 1 0 01:00:00 192.168.168.168
5. レコードの削除
Remove-DnsServerResourceRecord
を使用します。
# Remove-DnsServerResourceRecord example.com myname -RRType "A" -RecordData 192.168.168.168
Confirm
XXX サーバー上のゾーン example.com からタイプ A の DNS リソース レコード myname が削除されます。続行しますか?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
#