コマンドプロンプトからdnscmdコマンドでDNSサーバに登録する方法


DNS登録をコマンドプロンプトで実施しよう

WindowsSeverでDNSサーバーにDNSを登録するとき、
レコードを1つ2つ追加するくらいならDNSマネージャーを使ってもよい。

けれど登録するレコードの件数が10や20、100を超えたらいちいちGUIで追加していくのは手間すぎる。

というわけで、DNSをコマンドプロンプトで一括登録してしまおう。

追加

dnscmd /recordadd [ゾーン名] [ホスト名] A [IPアドレス]

少し解説しよう。

ゾーン名とはそのドメインが管理する範囲のことで、
多くは.comとか.jpとかであらわされる。

ホスト名とIPアドレスは言わずもがな。

で、一番厄介(覚えづらい)のが「A」の部分。
これはレコードタイプと呼ばれていて、DNSレコードの形式をあらわしている。
ちょっとわかりづらいので、コマンド全体から理解していきたい。

この追加コマンド全体を日本語に置き換えると、以下のようになる。

「[ゾーン名]で管理される[ホスト名]と[IPアドレス]を(レコードタイプ)Aで紐づけてDNSレコードに追加」

dnscmd /recordadd [ゾーン名] [ホスト名] A [IPアドレス]

だから、レコードタイプというのはホスト名とIPアドレスを紐づける「方法」だ。
このレコードタイプは複数あり、それによってコマンドの書き方も若干異なってくるが、
個人で使うレベルであれば基本的にAレコードで登録しておけば問題はない。

Aレコードとは最もオーソドックスなDNSの機能だからだ。
(キャッチしたホスト名からIPアドレスを呼び出し、返す)

サンプルは以下の通り。

Aレコードを追加する場合
dnscmd /recordadd qiitasan.com host-name A xxx.xxx.xxx.xxx

確認

当然、追加したレコードがちゃんと登録されているのかを確認したくなる。
まずは基本的な確認方法を紹介する。

DNSサーバー及びDNSサーバーと同じゾーンに存在するPCにて以下を入力。

nslookup
nslookup [ホスト名]

>出力結果は以下の通り
サーバー:  DNSサーバのホスト名
Address:  DNSサーバのIPアドレス

名前:    nslookupしたホスト名
Address:  nslookupしたIPアドレス

だが、これはこれで1つずつ実行していくのは手間だ。

DNSサーバーに追加したDNSレコードを一気に見たいんだよ!という場合は、
DNSサーバーのコマンドプロンプトで以下を入力する。

ZonePrint
dnscmd /ZonePrint [ゾーン名]

こうするとゾーンに登録されているレコードが一気に出力される。
僕はサフィックスで分けているホスト名とかをまとめてみたい場合に、
上のコマンドをfindでパイプすることで出力したりしている。CUIはこういうところがいいよね。

以上

コマンドを羅列するだけじゃ味気ないと思って、簡単な解説も入れてみた。
間違えとかあったら指摘してください。

おまけ

CNAME

ちなみに、(レコードタイプ)CNAMEを追加する場合は

CNAMEを追加する場合
dnscmd /recordadd qiitasan.com host-name<登録済のホスト名> cname <登録したいホスト名>

CNAMEは
IPアドレス=ホスト名A でレコードに追加されていた場合、
ホスト名A=ホスト名B という関係を追加するものになる。

つまりIPアドレス=ホスト名Bということになるので、一つのIPアドレスに
2つめのホスト名を追加することができるようになる。

PTR

下記はPTRタイプと呼ばれる。

正引きと逆引きを同時に追加する場合
dnscmd /recordadd qiitasan.com host-name /createptr A xxx.xxx.xxx.xxx

これは正引きに加え逆引きを追加するコマンドになる。
正引きが「Aレコード」で、ホスト名をIPアドレスに変換することを意味する。
逆引きは「PTRレコード」と呼ばれ、IPアドレスをホスト名に変換することを意味する。

なんか意味あるの?という話だけど、一応セキュリティ対策として使うところはあるらしい。
でもIPv6の逆引きは大変だから今後は更に使われなくなる可能性もなくはない。