LoginSignup
33
25

More than 3 years have passed since last update.

YAMAHA ルータで DHCP 固定割当できない問題と Client Identifier

Last updated at Posted at 2021-04-12

YAMAHA 製のルータ内で DHCP サーバが動いている状況で、特定のクライアントに対して DHCP サーバから固定の IP アドレスを払い出すように設定したい。

dhcp scope bind 1 192.168.0.2 XX:XX:XX:XX:XX:XX

とりあえず「IP アドレスと MAC アドレスを紐付けたらいいでしょ」と考えてこのようなコマンドを実行したが、IP アドレスは固定できなかった。

3行まとめ

  • DHCP の仕様 (RFC2131) で定義されている Client Identifier という機能があり、DHCP クライアントは任意の識別子を DHCP サーバに伝えることができる
  • YAMAHA ルータの DHCP サーバは初期設定では Client Identifier を用いた固定割当 (use-clientid 機能) を優先するようになっており、その場合は MAC アドレスで固定割当を設定しても動作しないことがある
  • YAMAHA ルータの設定で use-clientid 機能を無効にすることで MAC アドレスによる固定割り当て設定を動作させることができる

原因調査をする

15.1.5 DHCP 予約アドレスの設定 - RTpro - ヤマハ

公式ドキュメントを読むと、こう書いてある。

[書式]
dhcp scope bind scope_num ip_address [type] id
dhcp scope bind scope_num ip_address mac_address
...

DHCP 固定割当をするコマンドには複数のフォーマットがあるらしい。
さきほど実行してうまくいかなかったのは第2書式に当たる。

コマンドの第 2 書式による MAC アドレスでの予約は、クライアントの識別に DHCP パケットの chaddr フィールドを用いる。この形の予約機能は、RT の設定が dhcp server rfc2131 compliant off あるいは use-clientid 機能を使用しない設定になっているか、もしくは DHCP クライアントが DHCP パケット中に Client-Identifier オプションを付けてこない場合でないと動作しない。

つまり、「設定で use-clientid 機能が有効になっている」かつ「DHCP パケット中に Client-Identifier オプションが付いている」場合は、第2書式で指定した固定割当は動作しない。

15.1.2 RFC2131 対応動作の設定 - RTpro - ヤマハ

公式ドキュメントを読むと、use-clientid 機能は初期状態で有効になっていることがわかる。

また、show status dhcp を実行した結果を見ると、ほとんどのクライアントで (タイプ) クライアントID: (01) xx xx xx xx xx xx と表示されることから、ほとんどの DHCP クライアントのパケットに「Client-Identifier オプションが付いている」ことがわかる。

DHCP の Client Identifier とは何か

以下のサイトが詳しかった。

DHCPのクライアントIDオプション:プログラマー社長のブログ:オルタナティブ・ブログ

要点を抜粋すると、

  • Client Identifier は DHCP の仕様 (RFC2131) に記載されている仕様で「クライアントからクライアント ID が送られてきたら MAC アドレスの代わりにクライアント IDでクライアントを識別せよ」という機能のこと
    • この仕様の趣旨は「ネットワークボードを交換しても同じ払い出しを受けられるようにする」ため
  • 実際の DHCP クライアントは、ほとんどがクライアント ID として「0x01 + MAC アドレス」を指定してくる
    • 先頭の 0x01 は種別が MAC アドレスだという意味で、事実上 MAC アドレスで識別しているのと変わらない
  • macOS ではネットワーク設定画面から簡単にこのクライアント ID を任意の値に設定できる
    • 同一セグメント内で「クライアント ID」が重複するように設定できてしまう
  • 上記サイトの筆者 (長年 DHCP 製品を開発) は、クライアント ID による識別が必要なケースに出会ったことがない

クライアント ID による識別、やらないほうがいいのではないか???

クライアント ID による識別を無効にする

YAMAHA ルータでは、以下のコマンドでクライアント ID による識別を無効にすることができる。

dhcp server rfc2131 compliant except use-clientid

これを設定しておけば、冒頭の

dhcp scope bind 1 192.168.0.2 XX:XX:XX:XX:XX:XX

このようなコマンド (第2書式) で MAC アドレスによる固定割当が動作するようになる。

補足: use-clientid を有効にしたまま固定割当する方法

何らかの事情で use-clientid を無効にできない場合かつクライアントからクライアント ID が送られてくる場合は、第2書式は使えないので第1書式で指定するほかないが、第1書式での指定方法もいくつかある。

(クライアントからクライアント ID が送られてくるかどうかは、一度 IP を払い出してみて show status dhcp したらわかる。)
(use-clientid が有効であっても、クライアント ID が送られてこないクライアントに対しては第2書式は使える)

クライアント ID を指定する方法

MAC アドレスではなくクライアント ID を指定することで固定割当できる。

dhcp scope bind 1 192.168.0.2 <クライアントID>

<クライアントID> はたいてい 01 XX XX XX XX XX XX (01 + MAC アドレスをスペース区切りにしたもの) が送られてくるが、クライアントが変則的なフォーマットでクライアント ID を指定してくる場合はそれに対応しなければならない。

type ethernet を指定する方法

type ethernet を明示することで、クライアント ID が送られてくる場合であっても MAC アドレスによる固定割当ができる。

dhcp scope bind 1 192.168.0.2 ethernet <MACアドレス>

3行まとめ (再掲)

  • DHCP の仕様 (RFC2131) で定義されている Client Identifier という機能があり、DHCP クライアントは任意の識別子を DHCP サーバに伝えることができる
  • YAMAHA ルータの DHCP サーバは初期設定では Client Identifier を用いた固定割当 (use-clientid 機能) を優先するようになっており、その場合は MAC アドレスで固定割当を設定しても動作しないことがある
  • YAMAHA ルータの設定で use-clientid 機能を無効にすることで MAC アドレスによる固定割り当て設定を動作させることができる
33
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
25