DNS(Domain Name System)は、『182.22.71.250』のようなIPアドレスを『www.yahoo.co.jp』のようなドメイン名(及びホスト名)と対応づけをしてくれるシステムです。(メールの宛先ホストを指示なども行っているようです。)
Windowsのローカル環境だと、
C:¥Windows¥System32¥drivers¥etc¥hosts
ファイルで簡易的なDNSを担ってる?と思われます。
各OSのhostsファイルの場所
OS名 | 格納場所 |
---|---|
UNIX/Linux | /etc/hosts |
Windows NT系列 | %SystemRoot%¥System32¥drivers¥etc¥hosts |
Windows 95系列 | %WINDOWS%¥hosts |
macOS | /etc/hosts(シングルユーザーモードでのみ有効) |
BeOS | /boot/beos/etc/hosts |
⇩ DNSの仕組みについては下記サイトへ
・IPアドレスとドメインを結びつける、DNSサーバの役割と名前解決の仕組み | OXY NOTES
DNSクライアントとDNSサーバ
DNSクライアントに関しては、 WindowsではWindows DNS クライアントというものがあらかじめパソコンに内蔵されているみたいです。
DNSサーバが、実際にIPアドレスとドメイン名(及びホスト名)をデータベースとして保持しているようです。このデータベースが持つデータを「リソースレコード」と呼ぶようです。
DNSはサーバ・クライアントモデルとなっていて,DNSサーバとDNSクライアントの両方が必要です。
リソースレコード
リソースレコードの中身は
種類 | データ長 | 意味 |
---|---|---|
所有者(Owner) | — | そのドメインの名前 |
名前(NAME) | 可変長 | リソースレコードの名前 |
タイプ(TYPE) | 16bit | リソースのタイプ |
クラス(class) | 16bit | クラス。使用プロトコルが入る。通常は0x0001の値を取る。 |
TTL (Time to Live) | 32bit | リソースレコードのキャッシュ時間(秒) |
RD長(RDLength) | 16bit | RDATAの長さ(オクテット) |
RDATA | 可変長 | リソースの中身。TypeとClassによって中身が変化する。 |
リソースレコードの例
Owner | Name | Type | class | TTL | RDLength | RDATA |
---|---|---|---|---|---|---|
gahoon.co.jp | www | 0001 | 0001 | 86400 | 4 | 192.168.0.1 |
⇩ 下記サイトを参考にしてます。
リソースレコードにはいくつかの種類(レコードタイプ)が存在し、一般的に使用されている主なリソースレコードには次のものがあるようです。
リソースレコードのType
値 | レコードタイプ | 役割 |
---|---|---|
1 | A(アドレス) | ホストのアドレス |
2 | NS(ネームサーバ) | そのドメインが管理するネームサーバ |
5 | CNAME(キャノニカルネーム) | ホストの別名(エイリアス) |
6 | SOA(スタートオブオーソリティ) | ゾーンの情報 |
12 | PTR(ポインターレコード) | ポインタ。逆引きに使用する |
15 | MX(メールエクスチェンジ) | そのドメインのメールサーバ |
Aレコード
Aレコードはドメイン名とIPアドレスの対応を記述するようです。
ドメイン名とIPアドレスの対応は必ずしも1対1である必要はなく、1つのドメイン名に複数のIPアドレスを対応させることもできるようです。
・ASCII.jp:リソースレコードの種類と役割とは (1/2)|DNSのキホン
この場合、gahoon.co.jpは3つのIPアドレスと紐づいているので、DNSサーバー側には3つのAレコードがあることになります。
実際に、WindowsでもLinuxなどで使われているdigコマンドをインストールすることでDNSサーバーの動作状況を確認できるようです。(Windowsの標準装備のnslookupコマンドでも可能ですが、将来的にnslookupは廃止される可能性もあるとのこと。)
「BIND」に付属しているdigコマンドをインストール
BINDとは、Wikipediaによると、
BIND(Berkeley Internet Name Domain)
以前の呼名はBerkeley Internet Name Daemon。
インターネットでもっとも利用されている DNSサーバである。
Unix系システムにおいては特にその傾向が著しい。
ISC(Internet Systems Consortium)によってサポートされているが、元はポール・ヴィクシーがDECに在籍中の1988年に作り上げたソフトウェアである。
新しいバージョンのBIND9は、古いバージョンのBINDのコードが保守しづらくなったことと、DNSSEC(DNS Security Extensions)への対応のためにゼロから書き起こされた。
他の重要なBIND9の特徴としては、TSIG、DNS notify、nsupdate、IPv6、rndc flush、view、マルチプロセッサのサポート、そしてアーキテクチャーの移植性の向上がある。
http://www.isc.org/downloads/ のページで「BIND」をクリックして表示される一覧から、「Current-Stable」(現行の安定版)であるバージョンをダウンロード。
お使いのパソコンに合わせたものを選択します。自分は『BIND9.11.0-P2-win 64bit』を選択しました。
ダウンロードしたzipフォルダの中で『BindInstall.exe』を実行しようとすと怒られるので、まずは適当な場所に『展開(解凍)』しましょう。
とりあえず、Cドライブ直下にbindというフォルダを作り、そこに展開しました。
今度こそ、『BindInstall.exe』を実行(※管理者権限で実行してください。)。『Tools Only』にだけチェックをし、『Install』をクリックします。ここから先は管理者権限で実行しなかったための失敗例です。
途中でVisual C++ランタイムのインストールが求められることがあるようで、64bit版と32bit版でインストールすべきVisual C++ランタイムのバージョンも違うようです。
失敗しとるやん!
失敗しとるやん!!!
管理者権限で実行することを知らなかったので、やり直し。
管理者権限で『BindInstall.exe』を実行。
『Tools Only』にだけチェックをし、『Install』をクリック。
Visual C++ランタイムの『repair』とか聞かれて、これを選択すると強制的にパソコンの再起動が始まって、上手くInstallerが成功にならなかったので、Visual C++ランタイムの部分は一度インストールしてしまった後は『いいえ』でいいかと、たぶん。
インストールに成功すると、
となるので、コマンドプロンプトでdigコマンドを試してみましょう。まだ環境変数を設定してないので、cdコマンドで、C:¥に移動してからインストールした場所にあるdig.exeまでのパスの後に半角スペースを入れ『-v』としてdigのバージョンが表示されればOKです。
Windowsの『システム』>『システムの詳細設定』で 『環境変数』を選択し、pathに
C:¥Program Files¥ISC BIND 9¥bin;
を加えます。再度コマンドプロンプトを起動し、『dig -v』コマンドを実行してバージョンが表示されれば環境変数の設定もOKです。
dig google.com
とコマンドを打つと、
いろいろ表示されます。
norecurseオプション(+norec)をつけると再帰的に問い合わせになるようです。
C:\>dig +norec @192.168.1.1 google3. com A
; <<>> DiG 9.11.0-P2 <<>> +norec @192.168.1.1 google3. com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7808
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google3. IN A
;; AUTHORITY SECTION:
. 149590 IN NS f.root-servers.net.
. 149590 IN NS h.root-servers.net.
. 149590 IN NS a.root-servers.net.
. 149590 IN NS l.root-servers.net.
. 149590 IN NS j.root-servers.net.
. 149590 IN NS i.root-servers.net.
. 149590 IN NS d.root-servers.net.
. 149590 IN NS k.root-servers.net.
. 149590 IN NS m.root-servers.net.
. 149590 IN NS b.root-servers.net.
. 149590 IN NS g.root-servers.net.
. 149590 IN NS c.root-servers.net.
. 149590 IN NS e.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 63252 IN A 198.41.0.4
b.root-servers.net. 470323 IN A 192.228.79.201
c.root-servers.net. 154126 IN A 192.33.4.12
d.root-servers.net. 412397 IN A 199.7.91.13
e.root-servers.net. 139741 IN A 192.203.230.10
f.root-servers.net. 457832 IN A 192.5.5.241
g.root-servers.net. 565566 IN A 192.112.36.4
h.root-servers.net. 565566 IN A 198.97.190.53
i.root-servers.net. 598829 IN A 192.36.148.17
j.root-servers.net. 565566 IN A 192.58.128.30
k.root-servers.net. 170033 IN A 193.0.14.129
l.root-servers.net. 56944 IN A 199.7.83.42
m.root-servers.net. 64410 IN A 202.12.27.33
;; Query time: 15 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Jan 22 22:28:40 ???? (?W???) 2017
;; MSG SIZE rcvd: 455
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42571
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;com. IN A
;; AUTHORITY SECTION:
com. 152836 IN NS d.gtld-servers.net.
com. 152836 IN NS i.gtld-servers.net.
com. 152836 IN NS l.gtld-servers.net.
com. 152836 IN NS j.gtld-servers.net.
com. 152836 IN NS f.gtld-servers.net.
com. 152836 IN NS g.gtld-servers.net.
com. 152836 IN NS m.gtld-servers.net.
com. 152836 IN NS h.gtld-servers.net.
com. 152836 IN NS c.gtld-servers.net.
com. 152836 IN NS k.gtld-servers.net.
com. 152836 IN NS b.gtld-servers.net.
com. 152836 IN NS a.gtld-servers.net.
com. 152836 IN NS e.gtld-servers.net.
;; ADDITIONAL SECTION:
a.gtld-servers.net. 60548 IN A 192.5.6.30
b.gtld-servers.net. 79161 IN A 192.33.14.30
c.gtld-servers.net. 76538 IN A 192.26.92.30
d.gtld-servers.net. 786 IN A 192.31.80.30
e.gtld-servers.net. 68737 IN A 192.12.94.30
f.gtld-servers.net. 74411 IN A 192.35.51.30
g.gtld-servers.net. 76063 IN A 192.42.93.30
h.gtld-servers.net. 8968 IN A 192.54.112.30
i.gtld-servers.net. 76415 IN A 192.43.172.30
j.gtld-servers.net. 73029 IN A 192.48.79.30
k.gtld-servers.net. 84807 IN A 192.52.178.30
l.gtld-servers.net. 72547 IN A 192.41.162.30
m.gtld-servers.net. 81464 IN A 192.55.83.30
;; Query time: 17 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Jan 22 22:28:40 ???? (?W???) 2017
;; MSG SIZE rcvd: 464
再帰的問い合わせ
C:\>dig @192.168.1.1 google3. com A
; <<>> DiG 9.11.0-P2 <<>> @192.168.1.1 google3. com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 56674
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google3. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017012200 1800 900 604800 86400
;; Query time: 18 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Jan 22 22:32:47 ???? (?W???) 2017
;; MSG SIZE rcvd: 111
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62764
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;com. IN A
;; AUTHORITY SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1485091950 1800 900 604800 86400
;; Query time: 18 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Jan 22 22:32:47 ???? (?W???) 2017
;; MSG SIZE rcvd: 105
・dig コマンドを理解する - プログラマ 福重 伸太朗 ~基本へ帰ろう~
参考にさせていただいたサイトとdigコマンドの結果がだいぶ違ってはいますが、digコマンド少しずつ調べていきたいと思います。
CNAMEレコード
1つのIPアドレスに複数のドメイン名を持たせることができるようです。
IPアドレスが変更になるとき、CNAMEを使っていると手間を軽減させることができるようです。
CNAME利用前
- www.gahoon-01.com A 192.168.10.1
- www.gahoon-02.com A 192.168.10.2
- www.gahoon-03.com A 192.168.10.3
- www.gahoon-04.com A 192.168.10.4
- www.gahoon-05.com A 192.168.10.5
CNAMEを使うと変更するレコードを1つにすることができます。
CNAME利用後
- www.gahoon-01.com A 192.168.10.1
- www.gahoon-02.com CNAME www.gahoon-01.com
- www.gahoon-03.com CNAME www.gahoon-01.com
- www.gahoon-04.com CNAME www.gahoon-01.com
- www.gahoon-05.com CNAME www.gahoon-01.com
・CNAMEレコードとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
DNSの触りの部分でもよく理解できないので、どこかでもう一度整理しないとです。
今回はこのへんで。