システム奮闘記:その110

DHCPサーバー入門



Tweet

(2019年1月15日に掲載)

はじめに  うちの会社でLANを設置した時、全てのパソコンにIPアドレスが割り当てられていた。  だが、当時は、パソコンの台数が少なかった上、ノートパソコンを持ちながら 出張する人はいなかった。  そのためIPアドレスを自動取得機能は必要なかった。  だが、ノートパソコンを持って、各営業所へ出張したりすると IPアドレスの変更が面倒になったり、来客者がネットを使いたい時 IPを割り当てていたのでは、設定するのも手間になる。  そこでDHCPサーバーの構築が必要になった。

DHCPサーバー構築

 DHCPサーバー構築といっても、Linuxにソフトを入れて設定するような 大層な事をするわけではない。  単に・・・  ヤマハのルーターでコマンドを打つだけ  なのだ。  ヤマハのルーターをDHCPサーバーとして使う事ができる。  以下のコマンドを打てば良いのだ。
ヤマハのルーターのDHCPサーバーの設定
dhcp service server
dhcp scope 1 192.168.10.10-192.168.19.29/24
上の設定の内容
1行目はDHCPサーバー機能を働かせる命令

2行目は自動取得で割り当てるIPアドレスの範囲指定。
上の設定では192.168.10.10〜192.168.10.19」としている。

 たったこれだけでDHCPサーバーの構築完了。
 だが、この時、あとで厄介な問題が起こる事は知る由もなかった。


IP自動取得ができない

 2016年くらいから、奇妙な現象が起こり始めた。  パソコンがネットにつながらへん!!  だった。  来客者のパソコンが社内LANに接続できない。  だが、LANケーブルを見ても問題はない。  不思議な事にIPアドレスを自動取得せずに プライベートIPアドレスを割り当てると問題が解消される。  その後も、同じような現象が出るようになった。  IPアドレスの自動取得がおかしいのでは?  と思ったが、ヤマハのルーターのIP自動取得の設定を見ても おかしな部分はない上、割り振りに使うIPアドレスは10個ある。  本社のパソコンでIPアドレスを自動取得しているパソコンはない。  そのため来客があっても、十分足りるはずの数だった。  そのため・・・  原因がわからへん!!  だった。  しかも厄介な事に、IP自動取得ができるパソコンもあったため・・・  余計に原因がわからへん!!  原因がわからないまま、ズルズルと日が過ぎていった。

APIPAとリンクローカルアドレス

 だが、来客が来るたびに、手動でIPアドレスを割り当てていたため 社内からは・・・  根本的な解決になってへん  とか  不便だから、早くなんとかしてくれ!!  の声が上がる。  声があがっても、原因がつかめない以上、どうしようもない。  だが、2018年4月。ある事がキッカケで解決する事ができた。  ある日の事。同僚から  パソコンがネットにつながらへん  という声が出た。  早速、そのパソコンを見に行った。  何気なく割り振られているIPアドレスを見てみた。  すると・・・  IPアドレスが169.254.XXX.XXX  だった。
パソコンに割り当てらていたIPアドレス
リンクローカルアドレス
IPアドレス自動取得すると、DHCPサーバーが割り当てるはずのIPアドレスとは異なるIPアドレスが
勝手に割り当てられている。

 そのため・・・

 こんなIPアドレス、見た事があらへん!!

 だった。
 予想外の現象が起こっていた。
 だが、DHCPサーバーの設定を見ても問題はない。


 そこでネットで検索してみると

 リンクローカルアドレス

 が出てきた。

リンクローカルアドレス
DHCPサーバーが機能していないとき、パソコンやスマートフォンは
自らIPアドレスを自動的に割り振る。
この時「169.254.0.0〜169.254.255.255」のIPアドレスが使われる。
自らIPアドレスを自動的に割り振る機能のことをAPIPAという。
IPアドレスの自動設定機能(Automatic Private IP Addressing)

 だが、DHCPサーバーでは、10個のIPアドレスを使えるようにしている。
 10台目以上のパソコンにIPアドレスを自動取得させる場合なら
このような現象が起こっても不思議ではないが、本社には10台どころか
来客以外は、IPアドレスはプライベートIPアドレスを割り当てている。

 頭を抱えてしまった。


ルーターのDHCP情報

 原因が何なのかがわからない。  そこでヤマハのルーターの設定本(RTX1000を買った時の付属本)を見て DHCPに関する設定を見てみる事にした。  すると、DHCPサーバーの状態を見るコマンド  show status dhcp  がある事がわかった。  早速、コマンドを使ってみた。
show status dhcpを使ってみる
Honsha:# show status dhcp
DHCPスコープ番号: 1
   ネットワークアドレス: 192.168.10.0
               割り当て中アドレス: 192.168.10.10
          (タイプ) クライアントID: (01) 00 27 0e 19 db 8e
                         ホスト名: XXXX
                     リース残時間: 2日 23時間 55分 9秒
               割り当て中アドレス: 192.168.10.11
 クライアントイーサネットアドレス: 00:22:5f:1d:2e:57
                         ホスト名: ubuntu
                     リース残時間: 2日 23時間 48分 44秒
               割り当て中アドレス: 192.168.10.12
          (タイプ) クライアントID: (01) bc 9f ef 44 ed e0
                         ホスト名: ran-ran
                     リース残時間: 2日 23時間 55分 26秒


(途中、省略)

 スコープの全アドレス数: 10
         除外アドレス数: 0
   割り当て中アドレス数: 10
     利用可能アドレス数: 0
Honsha:#
10個全部、埋まっていた。
IPアドレスを自動取得したパソコンを、LANから外しても
ヤマハのルーターでは、その情報を消さずに持ち続けるため
知らない間に、IPアドレス自動取得のために用意した10個のIPアドレスを
消費してしまったようだ。

この時は、赤色のリース時間を見落としていた。
これがDHCPサーバーが割り当てるIPアドレスが足らなくなる要因である事は
後になって知ったのだ。

 ほとんどの社内のパソコンはIPアドレスを割り当てている。
 自動取得しているのは2,3台くらいだ。

 原因は無線LAN

 だった。

 社員のスマホが無線を拾ってIP取得する

 という現象が起こっていた。


 そのためIPアドレスが10個だと枯渇してしまったのだ。
 そこで割り当てるIPアドレスを30個にした。

ヤマハのルーターのDHCPサーバーの設定
dhcp service server
dhcp scope 1 192.168.10.10-192.168.10.39/24
上の設定の内容
1行目はDHCPサーバー機能を働かせる命令

2行目は自動取得で割り当てるIPアドレスの範囲指定。
割り当て可能なIPアドレスを30個にするため
IPアドレスの範囲を「192.168.10.10〜192.168.10.39」とした。
 

DHCPでIPアドレスを取得する仕組み

 DHCPサーバー。  会社だけでなく自宅のパソコンや個人のスマホなど インターネットに接続する場合、DHCPサーバーからIPアドレスが割り当てられている。  どういう仕組みなのかだが・・・  全然、考えた事があらへんかった!!  だった。  そこでどういう仕組みなのか見てみる事にした。  ここで便利なのは通信パケットを取得・分析できる無料のソフトのwiresharkだ。  Wireshark プロジェクト日本語トップページ - OSDN  DHCPサーバーとのやりとりのパケットを捕らえる事ができた。
DHCPサーバーからIPアドレスを取得する時のやりとり
DHCPサーバーからIPアドレスを取得する時のやりとり
DHCPサーバーからIPアドレスが割り当てられるまでの間、以下のやりとりが行われている。

(1) クライアントからDHCPサーバーの探索
(2) DHCPサーバーからクライアントの提案
(3) クライアントからDHCPサーバーへの要求
(4) DHCPからクライアントへの応答

 まずはクライアントがDHCPサーバーの探索から見てみる。

DHCP探索
DHCP探索
クライアントのパソコンがDHCPサーバーを探す必要がある。
そこで同じネットワーク内の全ての端末に対して「DHCPサーバーはどれだ」という問い合わせを行う。

(補足)
読者の中には、ネットワークの知識のない人もいるかもしれないので補足説明。
IPアドレスが割り当てていない場合でも、同じネットワーク内は通信可能だ。
各端末に割り当てられているMACアドレスを使って通信を行っているためだ。


 クライアントの端末からDHCP探索のパケットを受け取ったDHCPサーバーは
クライアントに対して、IPアドレスなどの提案を送る。


クライアントに対して、IPアドレスなどの提案を送る
クライアントに対して、IPアドレスなどの提案を送る
クライアントに対して、割り当てる予定のIPアドレスなどを送る。

 DHCPサーバーからの提案を受け取ったクライアントの端末は
割り当てて欲しいIPアドレスを要求する。

クライアントの端末は割り当てて欲しいIPアドレスを要求する
クライアントの端末は割り当てて欲しいIPアドレスを要求する
ここで疑問に思った事は、DHCPサーバーから提案されたIPアドレスが気に食わないので
勝手に割り当てて欲しいIPアドレスを要求する場合があるかどうかだ。
実際、自分の目で確かめていないため、そういう状況があるのか何とも言えない。

(補足)
鋭い人は「なんでDHCPサーバーがわかっているのに、ブロードキャストなんだ」と思われるでしょう。
理由はわからないが、ブロードキャストになっています。それについては後述しています。

 DHCPサーバーは、クライアントから送られてきたIPアドレスの要求を受け取り
そして正式に割り当てるIPアドレスを送り返す。
DHCPサーバーは正式に割り当てるIPアドレスを送り返す
DHCPサーバーは正式に割り当てるIPアドレスを送り返す
DHCPサーバーは、クライアントの端末から要求があったIPアドレスを発行し
クライアントの端末に送り返す。

 2018年になって、ようやく・・・

 DHCPサーバーを使ったIP割り当ての仕組みがわかった

 のだ。


DHCPでIPアドレスを取得する際の詳細

 先ほどDHCPでのIPアドレス取得方法の概略がわかった所で、 パケットの中身を見ながら踏み込んで調べてみる事にした。

DHCP探索のパケットの中身

DHCP探索
DHCP探索
ネットワーク全体にパケットを送っている。そのパケットの中身を見てみる。

 ところでDHCP探索はブロードキャスト(ネットワーク内の全ての端末)にパケットを送っている。
 そのパケットをWiresharkで見てみる。

DHCP探索時のブロードキャスト通信の様子(MAC層のフレーム)
DHCP探索時のブロードキャスト通信の様子(MAC層のフレーム)
MAC層のフレームを見ると、送信先のMACアドレスが(ff:ff:ff:ff:ff:ff)になっている。
これは全ての端末という意味になる。
そして送信元のMACアドレス(私のパソコン:黒塗)の部分だ。
MAC層の上はIP層になっている。IP通信という意味だ。

 DHCP探索のパケットのIP層のフレームも見てみる。

DHCP探索時のブロードキャスト通信の様子(IP層のフレーム)
DHCP探索時のブロードキャスト通信の様子(IP層のフレーム)
トランスポート層はUDPになっている。
この時点では端末にはIPアドレスが割り当てられていないため
IPアドレスは「0.0.0.0」になっている。

 最後にUDP層のフレームを見てみる。

DHCP探索時のブロードキャスト通信の様子(UDP層のフレーム)
DHCP探索時のブロードキャスト通信の様子(UDP層のフレーム)
送信元のポート番号が68。送信先のポート番号は67になっている。
通常、TCP/IP(UDP/IP)通信を行う場合、クライアント側のポートは任意の場合が多いが
DHCPの場合は68で固定されている。

DHCPからの提案

 クライアントの端末からDHCP探索のパケットを受け取ったDHCPサーバーは クライアントに対して、IPアドレスなどの提案を送る。
クライアントに対して、IPアドレスなどの提案を送る
クライアントに対して、IPアドレスなどの提案を送る
クライアントに対して、割り当てる予定のIPアドレスなどを送る。

 DHCPサーバーから送られる提案(パケット)の中身をWiresharkを使ってみてみる。

DHCPサーバーからの提案の中身
DHCPサーバーからの提案の中身
クライアントに対して、割り当てる予定のIPアドレス、デフォルトゲートウェイのIP
サブネットマスク、DNSサーバーのIPが伝えられる。

DHCPサーバーへの要求

 DHCPサーバーからの提案を受け取ったクライアントの端末は 割り当てて欲しいIPアドレスを要求する。
クライアントの端末は割り当てて欲しいIPアドレスを要求する
クライアントの端末は割り当てて欲しいIPアドレスを要求する
この時のパケットを見てみる。

 まずはMAC層のフレームを見てみる、

クライアントからDHCPサーバーへIPアドレスの要求する様子(MAC層のフレーム)
クライアントからDHCPサーバーへIPアドレスの要求する様子(MAC層のフレーム)
MAC層のフレームを見ると、送信先のMACアドレスが(ff:ff:ff:ff:ff:ff)になっている。
これは全ての端末という意味になる。
そして送信元のMACアドレス(私のパソコン:黒塗)の部分だ。
MAC層の上はIP層になっている。IP通信という意味だ。

 この時・・・

 なんでブロードキャストやねん!!

 と思った。

謎の解明は先送り
DHCP探索の際、DHCPサーバーのMACアドレスが不明だからブロードキャストなのは理解できる。
でも、この時は、一度、DHCPサーバーからIPの提案を受けている。IPの提案を受けた際に
どのMACアドレスの装置から提案を受けているのかはわかるはず。

そのため、なぜ、ブロードキャストの仕様になっているのかは不明なのだ。

 次にIP層のフレームを見てみる。

クライアントからDHCPサーバーへIPアドレスの要求する様子(IP層のフレーム)
クライアントからDHCPサーバーへIPアドレスの要求する様子(IP層のフレーム)
この段階ではクライアントにはIPアドレスが割り当てられていないため
IPアドレスが「0.0.0.0」になっている。

 そして肝心のDHCPサーバーに送りたいデータの中身を見る。

クライアントからDHCPサーバーへIPアドレスの要求する様子(アプリケーション層のフレーム)
クライアントからDHCPサーバーへIPアドレスの要求する様子(アプリケーション層のフレーム)
クライアント自身のMACアドレス、取得したいIPアドレス。ホスト名などの情報がある。
これらの情報がDHCPサーバーへ登録されるのだ。


DHCPサーバーからクライアントへの応答

 DHCPサーバーは、クライアントから送られてきたIPアドレスの要求を受け取り
そして正式に割り当てるIPアドレスを送り返す。
DHCPサーバーは正式に割り当てるIPアドレスを送り返す
DHCPサーバーは正式に割り当てるIPアドレスを送り返す
DHCPサーバーは、クライアントの端末から要求があったIPアドレスを発行し
クライアントの端末に送り返す。

 どんな内容がクライアントに送られているのか見てみる事にした。

DHCPサーバーからの応答の内容
DHCPサーバーからの応答の内容
DHCPサーバーは、クライアントの端末から要求があったIPアドレスを発行する。
青く囲んだ部分は、割り当てたIPアドレスの貸出期間に関するものだ。
貸出期間は4時間。他にもRenewing期間、Rebinding期間がある。


IPアドレスのリース期間

 DHCPサーバーはクライアント(端末)IPアドレスに割り当てるが、 貸出期間が設けられている。貸出期間を「リース時間」と言う。  だが、リース期間といっても種類があるので、ややこしい。  DHCPサーバーから応答の中身のパケットを、もう1度見てみる。
DHCPサーバーからの応答の内容
DHCPサーバーからの応答の内容
青く囲んだ部分は、割り当てたIPアドレスの貸出期間に関するものだ。
リース期間、Renewing期間、Rebinding期間だ。

リース期間は4時間。Renewing期間は2時間。Rebinding期間3時間30分になっている。

 ところで・・・

 Renewing期間、Rebinding期間って何やねん!!

 なのだ。

Renewing期間

 リース期間とは別にRenewing期間があるのを知った。  調べてみると・・・  Renewing期間に達すると  DHCPサーバーにリース期間を延長せんとアカン  というのだ。  なぜ、こんなものを設けるのかは謎だ。  上図の場合でも、リース期間は4時間で、Renewing期間は2時間だ。

Rebinding期間

 Rebinding期間を調べてみると・・・  Rebinding期間に達すると  DHCPサーバーに再度IPアドレス取得を申請せんとアカン  というのだ。  なぜ、こんなものを設けるのかは謎だ。  考えられるのは、円滑にIPアドレスが継続取得できるために編み出された物だと思う。

リース期間の変更

 ヤマハのルーターでDHCPサーバーを構築した時、リース期間は2種類ある。
2種類のリース期間(ヤマハのルーター)
expire リース期間
maxexpire 最大リース期間。
初期値(expire)よりも長い時間のリース期間の申請があった場合、最大割り当て可能なリース期間となる。

 初期値は両方とも72時間になっている。

2種類のリース期間の初期値(ヤマハのルーター)
expire 72時間(3日間)
maxexpire 72時間(3日間)

 さて、DHCPサーバー(ヤマハのルーター)のリース期間を初期設定の状態にして
パソコンをIP自動取得してみた。

 リース期間を見る事ができる。

IPアドレスのリース期間が表示される
リース期間が表示される
リース開始日時と、リース有効期限が表示される。
リース期間が初期値通りの72時間になっている。

 そこで初期値を変更してみる事にした。

ヤマハのルーターの設定
dhcp scope 1 192.168.10.10-192.168.10.39/24 expire 0:30 maxexpire 48:00
リース期間は30分。最大リース期間は48時間にした。

 そしてクライアントのパソコンを見てみた。

リース期間が30分になった
DHCPサーバーからの応答の内容
IPアドレスのリース期間が30分になった。


最後に  ヤマハのルーターを使えば、コマンドを叩くだけで 簡単にDHCPサーバーを構築・運用できると思っていましたが IPアドレスが不足する問題を体験する事で、DHCPの仕組みを知る事ができた。  システム奮闘記の連載が始まって18年経っても、まだまだ知らない事ばかりだと感じました。

前章:「メールサーバーをレンタルサーバーへ移行」を読む
目次:システム奮闘記に戻る