YAMAHA RTXでDHCP固定割当する際の落とし穴
15.1.5 DHCP 予約アドレスの設定
YAMAHAの公式コマンドリファレンスを参考に下のようなDHCP予約をするコマンドを実行した
code:command
dhcp scope bind 1 <固定したいIPアドレス> <IPアドレスを固定したい機器のMACアドレス>
しかしなぜかうまく割り当てられなかった
リース情報を消してもダメ、つなぎ直してもダメ、DHCP再要求してもダメ
調べたところこの記事が見つかった
【Qiita】 YAMAHA ルータで DHCP 固定割当できない問題と Client Identifier
YAMAHAルータの初期設定はMACアドレスでの識別より、クライアントIDでの識別を優先する設定になっているらしい
RFC2131で定義されたClient Identifierという機能
YAMAHAルータの中ではuse-clientid 機能という
RFCで定義されてる動作なのでYAMAHA製ルータ以外でも実装されている可能性アリ
解決策1:use-clientid 機能を無効にしてしまう
code:command
dhcp server rfc2131 compliant except use-clientid
このコマンドを実行したあと、冒頭のコマンドを実行すればOK
use-clientid 機能が有効になっていることのメリットは少ないようなので、これでもアリ
解決策2:Client Identifierに対して、DHCP固定割当を行う
code:command
dhcp scope bind 1 <固定したいIPアドレス> <クライアントID>
クライアントIDを知る必要がある
クライアントIDの中身に詳しいのはこのブログ
DHCPのクライアントIDオプション:プログラマー社長のブログ:オルタナティブ・ブログ
要点を抜粋すると
実際の DHCP クライアントは、ほとんどがクライアント ID として「0x01 + MAC アドレス」を指定してくる
先頭の 0x01 は種別が MAC アドレスだという意味で、事実上 MAC アドレスで識別しているのと変わらない
macOS ではネットワーク設定画面から簡単にこのクライアント ID を任意の値に設定できる
同一セグメント内で「クライアント ID」が重複するように設定できてしまう
解決策3:type ethernet を指定する方法
code:command
dhcp scope bind 1 192.168.0.2 ethernet <MACアドレス>
type ethernet を明示することで、もしクライアント ID が送られてくる場合であっても MAC アドレスによる固定割当ができる