情報工学徹底攻略実験とレポートの私的学習ガイド

補足資料4日目のページから参照

付録2 DNSサーバー(BIND9)

名前からIPアドレスを調べる仕組み「DNS」を、自分のサーバーで動かします。www.t3.metro-cit.internal という名前を、自分のサーバーのIPアドレスに結びつけ、Windowsから問い合わせて確かめます。

どのレポートにまとめるか

付録2のエビデンスは「図表のルールにしたがってレポートにまとめること」とされていますが、どのレポート課題に含めるかは書かれていません。4日目のページから参照されているので、課題4と一緒に扱う可能性が高いと考えられますが、授業で確認してください。

名前解決とは

人は www.t3.metro-cit.internal のような名前のほうが覚えやすく、コンピュータはIPアドレスでしか通信できません。その間を取り持つのが名前解決です。名前からIPアドレスを調べることを正引き、IPアドレスから名前を調べることを逆引きと呼びます。

名前解決の方法には、大きく2つあります。

hostsファイル
その機械の中にあるファイルに、名前とIPアドレスの組を書いておく。OSは、多くの場合DNSに問い合わせる前にまずこのファイルを見る。書いた内容はその1台にしか効かない
DNS
ネットワーク上のDNSサーバーに問い合わせる。名前の管理は世界中で分担されていて、答えはしばらくの間キャッシュ(記憶)される

DNSの階層

ドメイン名は、右から左へ、大きな範囲から小さな範囲へと並んでいます。www.example.com なら、いちばん右(見えないが、最後に「.」がある)が全体の根元(ルート)、次が com、次が example、最後が www です。名前の管理はこの階層に沿って分担されていて、それぞれの階層を担当するDNSサーバーが、次の階層の担当者を知っています。

あなたのPC (問い合わせる側) フルサービスリゾルバ 代わりに探してくる係 答えはしばらく記憶する www.example.com は? ④ 203.0.113.10 ルートサーバー(.) 「com のことは、com の係に聞いて」 com のDNSサーバー 「example.com は、あの係に聞いて」 example.com の権威DNSサーバー 「www は 203.0.113.10 です」 ① ② ③
図1DNSの問い合わせの流れ(名前とアドレスは説明用の例)。リゾルバが、ルートから順に「次は誰に聞けばよいか」を教えてもらいながら、最後に正式な答えを持つサーバーにたどり着く。一度得た答えは、決められた時間(TTL)のあいだ記憶され、次からは①〜③を省略できる。
ルートサーバー
階層のいちばん上。各トップレベルドメイン(com、jp など)の担当者を知っている
権威DNSサーバー
あるまとまり(ゾーン)について正式な答えを持つサーバー。付録2で作るBIND9はこれ
フルサービスリゾルバ
利用者の代わりに階層をたどり、答えを記憶しておくサーバー。この実験のネットワークでは 192.168.100.1 がその役割

課題2では、www.metro-cit.ac.jp という、もう1段階深い名前について、この流れを説明することが求められています。階層のどこで担当のサーバーが分かれているか(ゾーンの区切り)は、ドメインごとに決まっていて、いくつかの階層を1つのサーバーがまとめて担当していることもあります。実際の流れは、Ubuntuで次のコマンドを実行すると観察できます(学内のネットワークの設定によっては、外部に直接問い合わせられず使えないことがあります)。

Windows 11 ターミナル(SSH接続)bash
dig +trace www.metro-cit.ac.jp

表示の中の IN NS の行が「次は誰に聞けばよいか」、最後の IN A の行が答えです。考察のヒント課題2では、答えが記憶(キャッシュ)されている場合とされていない場合で、問い合わせの流れが変わる点にも触れます。dig +trace が使えれば、実際の問い合わせの順番をエビデンスとして示せます。

hostsファイルとDNSの関係

1日目のhostsファイルとDNSは、どちらも「名前 → IPアドレス」を答えますが、仕組みが違います。hostsファイルは各機械の中の手書きのメモで、書いた機械だけに効きます。DNSはネットワーク越しに問い合わせる共有の電話帳で、サーバーの設定を1か所変えれば、そのサーバーに問い合わせるすべての機械に効きます。付録2の手順4が「1日目で設定した hosts を前提に」としているのは、両方の結果を見比べられるようにするためと考えられます。課題4は、この違いから利点と制約を考えるものです。考察のヒント名前とIPアドレスの対応を変えたいとき、hostsなら全部の機械を、DNSならサーバー1か所を直します。機械が10台、1000台に増えたらどうなるか、サーバーが止まったらどうなるかを考えると、利点と制約が見えてきます。

手順の解説

スクリーンショット(エビデンス)を撮るところ。マウスを乗せると撮るタイミングが表示され、押すとページ下のエビデンス一覧の該当項目へ移動します。考察を書くときに知っておきたいこと。マウスを乗せる(スマホでは押す)とヒントが表示されます。

手順 1Windows 11 ターミナル(SSH接続)

BIND9を入れ、53番を開ける

Windows 11 ターミナル(SSH接続)bash
sudo apt install -y bind9 dnsutils
sudo ufw allow 53/udp

bind9 がDNSサーバー本体、dnsutils は確認に使う dig などの道具です。DNSの問い合わせはUDPの53番に届くので、ufwで許可します(BIND9はDockerではなくUbuntuに直接入れるので、ufwの設定がそのまま効きます)。

手順 2Windows 11 ターミナル(SSH接続)

ゾーンを設定する

指導書には「/etc/bind/named.conf.local にゾーン設定を追加し、ゾーンファイルを作成して、www.t3.metro-cit.internal を自分のサーバーIPに対応付ける」とだけ書かれています。ファイルの中身の例を示すので、意味を理解してから、授業の指示に合わせて書いてください。

(1) 「このゾーンを担当する」と宣言する

Windows 11 ターミナル(SSH接続)bash
sudo nano /etc/bind/named.conf.local
ファイルの中身/etc/bind/named.conf.local(末尾に追加する例)confエディタで書く内容(ターミナルに打ち込まない)
zone "t3.metro-cit.internal" {
    type master;
    file "/etc/bind/db.t3.metro-cit.internal";
};

「t3.metro-cit.internal というゾーンの正式な担当(master)はこのサーバーで、中身は指定したファイルに書いてある」という意味です。新しい版のBINDでは master の代わりに primary とも書けます。行末の ; と、最後の }; を忘れないようにします。

(2) ゾーンファイルを書く

ひな形として、BIND9に付いてくる db.local をコピーしてから書き換えると楽です。

Windows 11 ターミナル(SSH接続)bash
sudo cp /etc/bind/db.local /etc/bind/db.t3.metro-cit.internal
sudo nano /etc/bind/db.t3.metro-cit.internal
ファイルの中身/etc/bind/db.t3.metro-cit.internal(例)dnsエディタで書く内容(ターミナルに打ち込まない)
$TTL    86400
@       IN      SOA     ns.t3.metro-cit.internal. admin.t3.metro-cit.internal. (
                        2026092901  ; Serial
                        3600        ; Refresh
                        900         ; Retry
                        604800      ; Expire
                        86400 )     ; Negative Cache TTL
;
@       IN      NS      ns.t3.metro-cit.internal.
ns      IN      A       192.168.100.xxx
www     IN      A       192.168.100.xxx
表1ゾーンファイルの読み方
書き方意味
$TTL 86400答えを記憶してよい時間の既定値(TTL)。86400秒=1日
@このゾーン自身(t3.metro-cit.internal.)の省略形
INインターネット用の情報であることを示す決まり文句
SOAゾーンの基本情報。担当サーバーの名前、管理者の連絡先(@ を . に置き換えた形)、版番号、時間の設定が続く
2026092901 ; Serialゾーンの版番号(シリアル番号)。日付+2桁の連番にすることが多い。中身を変えたら増やす
; から後ろコメント
NSこのゾーンを担当するDNSサーバーの名前
A名前 → IPv4アドレスの対応。www は www.t3.metro-cit.internal の省略形

名前の最後の「.」の有無で意味が変わる

ns.t3.metro-cit.internal. のように最後に . がある名前は「これで完全な名前」という意味です。. がない名前は、後ろに自動でゾーン名が付け足されます。www と書けば www.t3.metro-cit.internal になり便利ですが、完全な名前のつもりで最後の . を忘れると、ns.t3.metro-cit.internal.t3.metro-cit.internal のようなおかしな名前になります。考察のヒント最後の「.」の付け忘れは書式としては正しいので、named-checkzone でも見逃されることがあります。課題3では、検査で見つけられる誤り(書式)と見つけられない誤り(意図と違う内容)を分けて論じると深まります。

手順 3Windows 11 ターミナル(SSH接続)

設定を検査してから反映する

Windows 11 ターミナル(SSH接続)bash
sudo named-checkconf
sudo named-checkzone t3.metro-cit.internal /etc/bind/db.t3.metro-cit.internal
sudo systemctl restart bind9
sudo systemctl status bind9
named-checkconf
設定ファイル(named.conf とその仲間)の書式を検査する。何も表示されなければ問題なし
named-checkzone ゾーン名 ファイル
ゾーンファイルの中身を検査する。成功すると下のように表示される
画面の表示例打ち込むものではなく、表示の例
zone t3.metro-cit.internal/IN: loaded serial 2026092901
OK

検査に通ってから再起動します。考察のヒント書き間違えたまま再起動すると、DNSのサービスそのものが起動できなくなり、その名前を使っている全員が困ります。影響の大きさから、検査の意義を論じられます。status では、サービスの正式名である named.service として表示されます(bind9 は別名)。active (running) を確かめます。エビデンス2の撮影ポイント撮影ポイント エビデンス2手順3で検査に通り、sudo systemctl restart bind9 のあとに sudo systemctl status bind9 を実行した直後。active (running) が見えるように撮る。エビデンス一覧の項目へ移動 ↓

手順 4Windows 11 ターミナル

Windowsから問い合わせる

Windows 11 ターミナルpowershell
nslookup www.t3.metro-cit.internal 192.168.100.xxx
nslookupDNSに問い合わせる
www.t3.metro-cit.internal調べたい名前
192.168.100.xxx問い合わせ先のDNSサーバー(自分のサーバー)
画面の表示例表示の例打ち込むものではなく、表示の例
サーバー:  UnKnown
Address:  192.168.100.107

名前:    www.t3.metro-cit.internal
Address:  192.168.100.107

下の「名前」と「Address」が答えです。エビデンス3の撮影ポイント撮影ポイント エビデンス3手順4で、Windowsのターミナルから nslookup www.t3.metro-cit.internal 192.168.100.xxx を実行した直後。打ったコマンドの行と、「名前」「Address」の行が1枚に入るように撮る。エビデンス一覧の項目へ移動 ↓上の「サーバー: UnKnown」は、問い合わせ先のDNSサーバー自身の名前を逆引きできなかった、という意味で、正引きの答えが出ていれば問題ありません。考察のヒント「サーバー: UnKnown」は、DNSサーバー自身の逆引きができなかったという表示です。正引きと逆引きが別々に登録される情報であることを、自分の結果から示せます(課題1)。

結果の読み方(dig)

Windows 11 ターミナル(SSH接続)bash
dig @localhost www.t3.metro-cit.internal
systemctl status bind9
画面の表示例dig の表示の例(抜粋)打ち込むものではなく、表示の例
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;www.t3.metro-cit.internal.     IN      A

;; ANSWER SECTION:
www.t3.metro-cit.internal. 86400 IN     A       192.168.100.107

;; SERVER: 127.0.0.1#53(localhost) (UDP)
@localhost
問い合わせ先。自分自身のBIND9に聞いている
status: NOERROR
正常に答えが返った。NXDOMAIN なら「そんな名前はない」
flags: … aa …
aa は authoritative answer(正式な担当者からの答え)
ANSWER SECTION
答えの本体。名前・TTL(秒)・種類(A)・IPアドレス

この画面がエビデンス1です。エビデンス1の撮影ポイント撮影ポイント エビデンス1BIND9を再起動したあと、Ubuntuで dig @localhost www.t3.metro-cit.internal を実行した直後。status: NOERROR と ANSWER SECTION の行が1画面に入るように撮る。エビデンス一覧の項目へ移動 ↓

エビデンス(スクリーンショット3点)

課題を考えるための材料

課題1DNSの「正引き」と「逆引き」の違いは何か。
  • 何を手がかりに、何を調べるのかの違いを、この実験の具体的な値で説明できるか
  • 逆引きには専用の仕組みがある。IPアドレスを逆順に並べた特別なゾーン(192.168.100.0/24 なら 100.168.192.in-addr.arpa)に、PTRレコードとして登録する
  • 手順4の「サーバー: UnKnown」は、どちらの失敗か
  • 逆引きは、どんな場面で使われるか(ログに残ったIPアドレスを人が読める名前にする、など)
課題2http://www.metro-cit.ac.jp にアクセスする際、DNSはどのような順序でIPアドレスを問い合わせるか。ドメインの階層構造(.jp、.ac、.metro-cit等)を含めて説明せよ。
  • 図1の流れを、この名前に当てはめるとどうなるか。まず名前を右から順に分解する
  • 最初に問い合わせるのは誰か(ブラウザ・OS・リゾルバ・ルート…)。登場人物を順番に並べる
  • キャッシュがある場合とない場合で、流れはどう変わるか
  • 可能なら dig +trace の実際の結果を示し、階層の区切りが実際にどこにあるかを確かめる(結果の抜粋はエビデンスとして使える)
課題3DNS設定ファイルの編集後に named-checkconf や named-checkzone を実行することには、どのような意義があるか考察せよ。
  • 書式を間違えたまま再起動したら、DNSサーバーはどうなるか。そのとき、このサーバーに名前を問い合わせているほかの機械はどうなるか
  • この実験には、同じ「反映する前に検査する」考え方が何度も出てくる(sshd -t、docker compose config、nginx -t など)。共通する目的は何か
  • ゾーンファイルの版番号(Serial)を増やし忘れると、ほかのDNSサーバーとの間で何が起きうるか
課題4hostsファイルによる名前解決とDNSによる名前解決には、それぞれどのような利点と制約があるか。
  • 名前とIPの対応を変えたいとき、それぞれ何か所を直す必要があるか。機械が10台、1000台だったら
  • サーバーが止まっていたり、ネットワークが切れていたりするとき、それぞれは使えるか
  • どちらが先に参照されるか。それによって、どんな便利さと、どんな混乱が起きうるか
  • 1日目のhostsと付録2のDNSを両方設定したとき、自分の環境で実際にどうなったか

あなたの番号を設定

学生番号の下2桁を入れると、このサイトのコマンド例に出てくるIPアドレスやVM IDが、あなた用の値に置き換わります。値はこのブラウザの中だけに保存され、どこにも送信されません。