MACとIPを紐づけても、IPが固定しない
Kubernetesクラスターを構築しようと、Raspberry Piに Ubuntu Server 20.04 LTS の64bit版を導入しました。
IPアドレスを固定化 するため、いつものように 1 、ルーターのDHCPサーバーの設定で、Raspberry Piの MACアドレスとIPアドレスを紐づけましたが、うまくいきません。
【上図について】 raspi001~raspi003を、192.168.1.151~192.168.1.153に割り当てしようとしたものの(赤枠の部分でMACとIPの紐づけを設定)、動的に192.168.1.10xが割り当てられてしまいました。本来、Raspberry PiのMACアドレスは b8:27:eb
や dc:a6:32
、 e4:5f:01
で始まりますが 2 、raspi001~raspi003には、まったく異なる値が表示されています。
悩みましたが、下記の対応策で解決しました。
ルーター側で固定IPを設定するメリット
ちなみに、Raspberry Pi側で固定IPを設定せず、ルーター側で設定しているのは、 次のようなメリットがある からです。
- K8sクラスターを構成するすべてのRaspberry Pi(今回は3台)のIPアドレスを、ルーターで一括して設定できる
- 今後、ネットワーク構成に変更が生じても、ルーターの設定変更だけで済む
原因は‥
実は、Ubuntu(少なくとも20.04)では、DHCPのリクエスト時に、 端末識別子として MACアドレスとは別の識別子 を送信します。このため、ルーター(DHCPサーバー)でMACアドレスを指定しても、別の端末と見なされ、IPアドレスが動的に割り振られます。
対応策:識別子としてMACを使うように設定
これを回避するには、Ubuntuのネットワーク設定で、DHCPの識別子にMACアドレスを使うよう設定します。最近のUbuntuでは、ネットワークの設定にnetplanを用いるため、 /etc/netplan/99_config.yaml
を次のような内容で作成し、デフォルト設定を上書きします 3 (Raspberry Piの場合、有線のネットワークインターフェースは eth0
です)。
$ sudo vi /etc/netplan/99_config.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
dhcp-identifier: mac
次のコマンドで、設定を仮反映します。
$ sudo netplan try
新しいIPでSSHを接続し直し、問題がなければ、次のコマンドで確定反映します。
問題がある場合は、120秒間待つと、元の設定に戻ります。
$ sudo netplan apply
以上の設定にすると、ルーター側でIPアドレスを固定にすることができました。
【上図について】 raspi001~raspi003に、192.168.1.151~192.168.1.153が割り当てられました(赤枠の部分でMACとIPの紐づけを設定)。
なお、今回の設定は、netplanのドキュメントでは 4 Integration with a Windows DHCP Server
の設定例として書かれており、なかなかわかりづらかったです。
参考:Raspberry Pi側で固定IPを設定する場合
/etc/netplan/99_config.yaml
を次のような内容で作成します(反映方法は、DHCPの場合と同じです)。
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.151/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
-
Raspberry Pi OS(Raspbian)の場合は、問題ありません。 ↩