t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

ラズパイをGUIから固定IP化するとDHCP INFORMパケットがネットワークに溢れてしまう件

昨日ラズパイでDHCPサーバーを立てる検証をしたという記事を書いた。
thom.hateblo.jp

実はあの後、ラズパイ3B+で本番DHCPサーバ兼DNSサーバーを構築して、このようにPoE給電で稼働している。(DNSも兼務)
f:id:t-hom:20220321224715p:plain

※PoEもLAN挿しただけでは電源が入らずに何時間も悩んだんだけど、そっちは活線挿抜がご法度だったことを思い出してスイッチごと電源落とした状態で接続してスイッチ電源入れたら無事に稼働した。

さて、安定稼働しているように思えたのだが、M5 Stackからの接続に時折失敗するということに気づいてsyslogを調査していたところ、やけにDHCP関連のログが多い。

こちらはラズパイメイン機(192.168.1.101)からラズパイDHCP機(192.168.1.101)へDHCP Informパケットが流れている様子。
f:id:t-hom:20220321223930p:plain

よく見たら多いなんてもんじゃなくて、秒単位でガンガン送ってる。

やめろ。。。ブロードキャストだぞこれ。。

それで色々検索してみると、/etc/dhcpcd.confのipアドレス設定がstaticではなくてinformになってることが原因だということが分かった。
forums.raspberrypi.com

どうやらラズパイのGUIから固定IPアドレスを設定すると、StaticではなくてInformという設定になってしまうらしい。

今回の対処としてはstaticではなくて、結局DHCP取得に戻すことにした。
理由としてはローカルドメイン名(local.thom.jp)も併せてDHCPで配布しないとホスト名だけでの名前解決ができないので、結局DHCPに頼ることになる為である。ローカルドメインもスタティックに指定するという方法はあるが、それはそれで複数台もってると管理が面倒くさくて一元管理したくなる。

DHCPに戻すときは単にGUIから設定をクリアするだけ。
f:id:t-hom:20220322001649p:plain

Staticにしたい時はGUIは使わずに/etc/dhcpcd.confを編集する。

設定が終わったらDHCPクライアントサービスを再起動しておく。

sudo systemctl restart dhcpcd.service

以上でクライアント側の設定修正完了。

あと今回の事象とは直接の関係はないけど、そもそもDHCPのIPアドレスのリース期間が600秒は短すぎた。
クライアントは期限切れの半分の時間で延長リクエスト出してくるので、実際には300秒=5分毎にIPアドレス更新をリクエストされる。
公衆ネットワークの場合は使わないIPはなるべく早く返却してもらって次の端末の為に開放する必要があるためリース期間を短くするが、自宅や会社などではクライアントが概ね固定なので普通は長めにとるらしい。

ということでDHCPサーバーの/etc/dhcp/dhcpd.confのリースタイムを次のように編集。

default-lease-time 172800;
max-lease-time 604800;

デフォルトが48時間(172800秒)で、クライアントがそれ以上を要求した場合の最大値が7日(604800秒)とした。
ちょうど半分の24時間でアドレス更新リクエストが来るイメージ。

この設定が終わったらDHCPサーバーのサービスも再起動しておく。

sudo systemctl restart isc-dhcp-server.service

これでサーバー側も修正作業完了。

終わりに

今回はDHCPサーバー立てたおかげでDHCPクライアント側のおかしな挙動に気づくことが出来た。
またログが出るので自分でDHCPがどうなってるのか理解できるようになったのも大きい。より本格的にやるならパケットキャプチャ―になるんだろうけど、DHCPサーバーのsyslogを見るだけでも割と勉強になる。

以下はクライアントからのリクエストに応えているログ

Mar 21 22:26:08 raspberrypi dhcpd[1001]: DHCPDISCOVER from b8:27:eb:XX:XX:XX via eth0
Mar 21 22:26:08 raspberrypi dhcpd[1001]: DHCPOFFER on 192.168.1.101 to b8:27:eb:XX:XX:XX via eth0
Mar 21 22:26:08 raspberrypi dhcpd[1001]: DHCPREQUEST for 192.168.1.101 (192.168.1.100) from b8:27:eb:XX:XX:XX via eth0
Mar 21 22:26:08 raspberrypi dhcpd[1001]: DHCPACK on 192.168.1.101 to b8:27:eb:XX:XX:XX via eth0

上の会話を翻訳するとこんな感じかな。
DHCPDISCOVER … (クライアント)IPアドレス探してます!
DHCPOFFER … (サーバー)この番号どうですか?
DHCPREQUES … (クライアント)あ、じゃあそれください。
DHCPACK … (サーバー)はいどうぞ。

あ、あとNTTホームゲートウェイの方はDHCPもWi-Fiも無効化することが出来たので今やほぼ只のONUと化している。
そのせいか、ホームゲートウェイの再起動がすぐに完了するようになった。だからどうしたという話ではあるけど。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。