DNSの観測
- 前提の確認
手元の仮想マシンにはDNSサーバがインストールされておりwww.sample.local
を172.16.0.100に名前解決する設定になっています。
127.0.0.1のポート53番に送信したDNSリクエストがNATのポートフォワードによって仮想マシンに転送されます。
仮想マシンを利用するためにWindowsのTCP/IPv4のプロパティを変更します。 この設定によりWindowsから仮想マシン上のDNSを参照できるようになります。 但しインターネット接続が出来なくなるため最後に設定を元に戻すことを忘れないでください。
- DNSリクエスト・レスポンスの確認
DDNSリクエストを発行するためにWindowsコマンドプロンプトからnslookupを使いwww.sample.local
のIPアドレスを問い合わせます。
> nslookup www.sample.local
サーバー: localhost
Address: 127.0.0.1
名前: www.sample.local
Address: 172.16.0.100
この時のパケットから抜粋したDNSメッセージ(リクエストとレスポンス)を以下に示します。
主に確認すべき項目はQueries(IPアドレスを問い合わせたいホスト名)とAnswers(IPアドレス)です。
www.sample.local
を問い合わせた結果172.16.0.100が返されていることが読み取れます。
Domain Name System (query)
Transaction ID: 0x0002
Flags: 0x0100 Standard query
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
www.sample.local: type A, class IN
Name: www.sample.local
[Name Length: 16]
[Label Count: 3]
Type: A (Host Address) (1)
Class: IN (0x0001)
Domain Name System (response)
Transaction ID: 0x0002
Flags: 0x8580 Standard query response, No error
Questions: 1
Answer RRs: 1
Authority RRs: 1
Additional RRs: 1
Queries
www.sample.local: type A, class IN
Name: www.sample.local
[Name Length: 16]
[Label Count: 3]
Type: A (Host Address) (1)
Class: IN (0x0001)
Answers
www.sample.local: type A, class IN, addr 172.16.0.100
Name: www.sample.local
Type: A (Host Address) (1)
Class: IN (0x0001)
Time to live: 86400
Data length: 4
Address: 172.16.0.100
前置き
インターネット上のサーバの位置を識別する為にwww.yahoo.com
やwww.google.com
のようなホスト名を使います。
www.yahoo.com
はyahoo.com
ドメインに属するwww
という名前のホストです。
このホストはyahoo.com
ドメインを運営している組織が管理しています。
組織によってはhost01.blog.yahoo.com
やhost02.auction.yahoo.com
のようにサブドメインを定義することもあります。
blog.yahoo.com
やauction.yahoo.com
がドメインでhost01
やhost02
がホストです。
yahoo.com
のDNSサーバに問い合わせればblog.yahoo.com
のDNSサーバを介してhost01.blog.yahoo.com
のIPアドレス
を知ることが出来ます。
世界中の組織がこのようなドメインを運営しています。
yahoo.com
のDNSにhost.google.com
のIPを問い合わせても答えは返ってこないのでgoogle.com
のDNSに問い合わせる必要があります。
どうやって各ドメインのDNSの位置を把握すれば良いのでしょうか。
DNSの階層構造
DNSは階層構造の分散データベースとして設計されています。
トップレベルドメインであるcom
やnet
等をまとめるルートネームサーバ
があり、その配下にサブドメインが連なっています。
ルートネームサーバから順にDNSを辿ることで目的のドメインのDNSの位置を把握することが出来ます。
各組織のDNSには自身のドメイン情報を記述したゾーンファイル
を用意します。
インターネットからアクセスしてもらう為には上位ドメインのDNSに情報を追加してもらう必要があるためドメインが重複することは有りません。
DNSレコードの登録
- 既存設定の確認
手元の仮想マシンのDNSにはwww.sample.local
の設定が既に登録されています。
DNSの設定はゾーン
という単位で管理します。
1台のDNSサーバが複数のゾーン情報を持つことが出来ます。
以下の例ではsample.localドメインに3つのホスト名が登録されている事が分かります。
sample.localのゾーンを確認する
# cat /var/named/sample.local.zone
@ IN SOA sample.local. root.sample.local. (
2018062901
10800
3600
604800
86400 )
;
IN NS ns.sample.local.
;
IN MX 0 mail.sample.local
;
ns IN A 172.16.0.100
www IN A 172.16.0.100
mail IN A 172.16.0.100
ゾーンの情報を読み込むためにDNSサーバの設定も必要です。
DNSサーバの設定ファイルを確認する
# cat /etc/named.conf
...省略
zone "sample.local" IN {
type master;
file "sample.local.zone";
};
...省略
- ゾーンの追加
www.practice.local
=172.16.0.200という設定を追加するケースを考えます。
入力待ち受け状態に遷移する
END という文字が渡されるまで入力された文字をファイルに書き込み続ける
# cat >> /var/named/practice.local.zone << END
渡す文字列(この下の行からENDまでコピー&ペーストする)
@ IN SOA practice.local. root.practice.local. (
2018062901
10800
3600
604800
86400 )
;
IN NS ns.practice.local.
;
IN MX 0 mail.practice.local
;
ns IN A 172.16.0.200
www IN A 172.16.0.200
mail IN A 172.16.0.200
END
- DNSサーバ設定追加
practice.local
のゾーン情報を読み込むための記述を追加します。
入力待ち受け状態に遷移する
# cat >> /etc/named.conf << END
渡す文字列(この下の行からENDまでコピー&ペーストする)
zone "practice.local" IN {
type master;
file "practice.local.zone";
};
END
- DNSサーバ再起動
再起動することで設定を読み込みます。 もし誤りがあれば再起動に失敗するのでエラーメッセージからトラブルシューティングを行います。
# systemctl restart named