1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowershellでMicrosoft DNS Serverの管理をする

Last updated at Posted at 2024-07-06

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の管理コマンドの全てです。
コマンドは、原則getaddremovesetなどのアクションに-で対象を指定する形式になっています。
さらに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
#
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?