思考実験とD.I.Y.

D.I.Y and Gedankenexperiment

【お家でADドメイン】ドメイン名を変更する(9)「AD-DCのDNSへホストを一括登録する」

ドメインメンバーコンピューターとして登録したWindowsパソコンを使って、DNSレコードをActiveDirectoryドメインコントローラ(AD-DC)に一括登録します。【注*1

ドメインメンバーコンピューターとして登録したWindowsパソコンからは、AD-DCと自分自身はDNSが引けますが、他の機器(FreeBSD/Linux他)でDNSが引けないと何かと不便です(*2)。

次の作業として、エクスポートしておいたDNSレコード[*3]を一括でAD-DCに登録しておきます。

1. csvデータの構造と一括登録方法検討

(1)csvデータの構造

旧AD-DCから、RSAT(Remote Server Administration Tools[*4],[*5])の”ActiveDirectory ユーザーとコンピューター”でエクスポートしたcsvファイルは、単純な構造です。

1行目には列のラベルが、
10行目から「ホスト名」「IPアドレス」が記述されています。
(2)インポート方法検討

DNSのリストをAD-DCに一括登録する方法として、小生が思いつくのは、

  1. )RSATのコマンド(dnscmd)を使う。
  2. )ADメンバーLinux/FreeBSD上でsamba-toolを使う。
  3. )QNAP上でsamba-toolを使う。
  4. )ドメインメンバーWinマシン上のPowerShelを使う。

といったところです(*6)。

a,)RSATのコマンド(dnscmd)を使う
  • ”C:\Windows\System32\dnscmd.exe”は、csvファイルの一括登録を行う機能はないので、Excelなどで”dnscmd”を連続して実行する”バッチファイル”を作成する必要があります。

  • 何より、RSATのコマンド(dnscmd)を使う方法”は、DNSサーバーがWindowsServerである必要があります。

  • 今回は、QNAPのAD-DCは、samba4ベースなので、dnscmdコマンドではRPCエラーが出て使えません😅。

b.)ADメンバーLinux/FreeBSD上でsamba-toolを使う。
  • csvファイルを読み込み、”samba-tool dns・・・”で、逐次、レコードを登録していくスクリプトを作成すれば、可能です。
  • ただし、実行するLinux/FreeBSDマシンがAC-DCのメンバーになっている必要があります。
  • したがって、ドメインメンバーにしたWinマシンとは別に、FreeBSD/Linuxマシンのドメインメンバー設定が必要になります。
  • 何より、今回の作業は、たびたび実施するようなことはない上、スクリプトのデバックも面倒ですので、”汎用的なスクリプト”を作るほどのことではありません😅。
c.)QNAP上でsamba-toolを実行する
  • QNAPには”samba-tool”は実装されていません。
  • 別除、Linuxパソコン上でarm用にクロスコンパイル環境、もしくはQNAP上にコンパイル環境を準備して、samba4をコンパイルして、amba-toolをQNAPにコピーする必要があります。
d.)ドメインメンバーWinマシン上のPowerShellを使う。
  • ”dnscmd”とは別に、PoweShell上では” Add-DNSServerResourceRecordA”というコマンドが使えます。
  • このコマンド、通常、WindowsServer上で利用しますが、引数に”-ComputerName "[AD-DCのホスト名]”を与えると、リモートからDNS登録ができます。

そこで、今回は、Windowsドメインメンバーしかいない環境を前提として、
エクスポート済みのDNSリスト[*7]をExcelで加工し、単純なPowerShellのコマンド一覧を作成し、
ドメインメンバーWindowsパソコン上から登録しようと思います😀。

2. PowerShellスクリプトの準備と一括登録

(1)PowerShellスクリプトの準備

”Add-DNSServerResourceRecordA”によりDNSにレコードを追加する構文は以下になります[*8]。

元のcsvファイルをExcelで開いて新しシートに、文字列式でAdd-DNSServerResourceRecordAコマンドの一覧を作成します。

構造としては、単純で、DNSに登録するコンピュータ1台につき、1行にコマンドを記載したファイルを準備するだけです。

Excelの新しいシートのA1セルに式「="Add-DNSServerResourceRecordA -ZoneName 【ADのFQDN名】-Name "&csvファイルの登録するホスト名セルへの相対参照】&" -IPv4Address "&csvファイルの登録するホストのIPアドレスセルへの相対参照】&" -CreatePtr -ComputerName ""【AD-DCのホスト名】"""」を入力します

ポイントは、-ComputerName”パラメータに与える「ホスト名」はダブルクォーテーションで囲む必要があるので、
文字列式中で”-ComputerName”パラメータに与える「ホスト名」の前後にダブルクォーテーション2つ(””)を記載することでしょうか。

元のcsvファイルシートのホスト名の数だけ、A1セルをA2セル以降にコピーします。

この時、AD-DCのDNSに登録済みのホストが混じっていても問題ありません
当該行の実行時に”登録できない旨のエラー”が吐き出されるだけです😅。

作成したシートを”テキスト(prn)”形式で保存します。

保存したファイルの拡張子を「.ps1」に変更します。

(2)一括登録

”ローカルのAdministoratorグループ”に登録した、”DomainAdmin”なユーザー[*9]でログオンします。

”ローカルのAdministoratorグループ”に登録していないドメインユーザー、または、ローカルアカウントPowerShellスクリプト実行した場合の動作は確認していません😅。

小生の推測ですが、登録しようとするホストの数だけ、"DomainAdminなユーザー名"と"そのパスワード"を入力する必要がありそうな気がします😅。

PowerShellスクリプトエクスプローラーで右クリックし、”PowerShellで実行”をクリックします。
PowerShellの実行ウィンドウがポップアップするので、待ちます。

AD-DCのDNSに登録済みのホストがある場合には”登録できない旨のエラー”が吐き出されますが、気にしません😀。

(3)確認

AD-DC(QNAP)にログオンして、DNSを確認します。

エクスポートしてあったcsvファイルに記載されていたホストが登録されていれば、DNSへの一括登録は完了です😀。

これで、ホスト名で引けます😅。

【次回に続く予定】

ブログランキング・にほんブログ村へにほんブログ村 IT技術ブログへ

出典・引用・備考

*1:この投稿の内容は、特定の機種並びに特定の環境での確認結果になります。
同等機種や異なる環境での動作他を保証するものではありませんので、ご留意いただけます様お願いいたします。

*2:拙宅では、DNSサーバーになれる古いブロードバンドルーターがの残っているので、多少は何とかなりますが😅、
元のDNSサーバー(AD-DC)のセカンダリDNSサーバーにはなっていたわけでないので、データは正確とは言えないもので😅。。。

*3:

*4:

*5:

*6:他に、もっと簡単な方法があるかもしれませんが😅。。。

*7:

*8:

*9: