差し込むだけで動く
新入社員が、会議室の壁のコネクタにノートPCを差し込み、社内のウェブページを開きます。アドレスも、サーバーの名前も、誰も入力していません。
二つの小さなサービスが、一秒もかけずにそれをしました。一つはPCにアドレスを貸し、もう一つは名前を番号に変えます。
今日はこの二つを開きます。
このレッスンのゴール
メモ
機器がアドレスと名前をもらう仕組みを説明できる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| DHCP | 頼まれた機器に、アドレスを貸すサービス | |
| リース | 期限を決めて、アドレスを貸すこと | 12時間 |
| スコープ | DHCPサーバーが貸してよいアドレスの範囲 | 10.0.10.100から10.0.10.150 |
| 予約 | 機器のハードウェアアドレスに、決まったアドレスをいつも渡す設定 | |
| DNS | 名前をアドレスに変えるサービス | |
| レコード | DNSサーバーが名前について持っている、一つの事実 |
学生が入力するセルは、このプレビューでは空白です。
アドレスの無い機器が頼む
新しい機器は、まだ自分のアドレスを持たず、DHCPサーバーの場所も知りません。そこで最初の知らせを、同じ線の全員に送ります。これがブロードキャストです。
DHCPサーバーが答えます。二者はDiscover、Offer、Request、Acknowledgeの4つの段階で話します。頭文字を取って、DORAと覚えましょう。
例: 四つの段階
| 段階 | 送る側 | 言っていること |
|---|---|---|
| Discover | 機器 | ここにDHCPサーバーはいますか |
| Offer | サーバー | このアドレスを使えます |
| Request | 機器 | そのアドレスをください |
| Acknowledge | サーバー | この時刻まで、あなたのものです |
学生が入力するセルは、このプレビューでは空白です。
サーバーと二台のクライアント
dnslab statusここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
pc1にアドレスを頼ませる
sudo dnslab renew pc1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
答えが言うこと
最初の実行は、server にはアドレスがあり、pc1 と pc2 には無いことを示します。
次の実行は約3秒待って、pc1 was given nothing: no DHCPOFFER came back と出します。Discoverは出ましたが、Offerは戻りませんでした。
アドレスは貸すもの
リースには期限があります。機器は、期限が切れる前に延長を頼まなければなりません。機器が消えたら、アドレスは貸し出しの場所に戻ります。
スコープは、サーバーが貸してよい範囲です。予約は、一つのハードウェアアドレスと一つの固定アドレスを結びます。プリンターに、いつも同じアドレスを渡せます。
例: リースファイルの1行
| 項目 | 例 | 意味 |
|---|---|---|
| 期限 | 1761300000 | 1970年からの秒数。0なら期限なし |
| ハードウェアアドレス | 02:00:00:00:00:0a | 借りている機器 |
| アドレス | 10.0.10.101 | 貸したアドレス |
| 名前 | till1 | 機器が名乗った名前。無ければ星 |
| クライアントID | 01:02:00:00:00:00:0a | 二つ目の目印。無ければ星 |
学生が入力するセルは、このプレビューでは空白です。
クライアントのハードウェアアドレス
sudo ip netns exec pc1 ip -o link show eth0ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
サーバーの設定ファイルを読む
cat /etc/dnsmasq.d/lab.confここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
サーバーが何も貸さない理由
最初の実行は link/ether 02:00:00:00:00:01 を含む行を出します。サーバーは、このハードウェアアドレスで pc1 と pc2 を見分けます。
次の実行は、コメントの3行だけを出します。スコープが書かれていないので、dnsmasqには貸せるアドレスがありません。
DNSは名前をアドレスに変える
人は名前を覚え、ルーターは番号で動きます。DNSサーバーは、その二つを結ぶレコードを持っています。
機器は、設定されたDNSサーバーに聞きます。サーバーは、自分のレコードから答えるか、別のサーバーに聞いて、その返事をしばらく覚えます。
どのDNSサーバーを使うかは、DHCPが機器に教えます。
例: よくあるレコードの種類
| 種類 | 答えること | 例 |
|---|---|---|
| A | この名前のIPv4アドレスは | files.lab は 10.0.10.20 |
| AAAA | この名前のIPv6アドレスは | files.lab は長い16進数 |
| CNAME | この名前は、別の名前の別名か | www は shop と同じ |
| MX | このドメインのメールを受けるサーバーは | mail.example.org |
| PTR | このアドレスの名前は | 10.0.10.20 は files.lab |
| TXT | 付いているメモは | 短い文字列 |
学生が入力するセルは、このプレビューでは空白です。
サーバーに名前を聞く
sudo ip netns exec server dig +noall +comments @10.0.10.1 files.labここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
pc1のDNSサーバーの一覧を読む
cat /etc/netns/pc1/resolv.confここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「DHCPとDNSは同じサービス」と思う人が多いです。仕事は別です。DHCPは機器にアドレスを貸し、DNSは名前についての質問に答えます。ここのdnsmasqのように一つのプログラムが両方をしても、仕事は二つのままです。
発展: 二回目のリース
ラボで設定が動いたら、sudo dnslab renew pc1 を1分あけて2回実行しましょう。
毎回、sudo cat /run/dnslab/dnsmasq.leases でサーバーのリースファイルを読みます。pc1は同じアドレスをもらえましたか。その行の何が変わり、なぜ変わったのでしょう。ファイルを自分の active_leases に渡して確かめましょう。