- Raspberry Piを買っておうちKubernetesクラスタを作る
- おうちKubernetesにSealedSecretsを入れる
- Raspberry Piの固定IP割当をルーターから指定する <- イマココ
以前の記事で,IP固定を行う際に /etc/netplan/99-manual-conf.yaml
を編集してIPを固定していた.
network: wifis: wlan0: dhcp4: false access-points: "access_point": password: "password" addresses: - 192.168.0.50/24 routes: - to: default via: 192.168.0.1 nameservers: addresses: - 192.168.0.1 - 8.8.8.8 search: [] version: 2
これを止めて,ルータ側で固定IPを指定する方式に変更した.
ルータで指定するかマシン側で指定するか
どちらでもいいんだけど,今まで他のマシンはすべてルータ側で指定しており,そちらに揃えたいという思いは最初からあった.
もう一点,長期間運用していると稀にRaspberry PiがLANにアクセスできなくなるトラブルに見舞われた. 何かしらの要因によりネットワークが再設定されるようなイベントが観測できているのだが
systemd-timesyncd[599]: Network configuration changed, trying to establish connection.
このあとマシンがLANに接続できなくなる.もちろんルータにもつながっていないのでインターネットにつながることもできずに,孤立してしまう. OOMや他のトラブルを疑ったが,どうやらそうではないらしい.
どうも現象としてはIP固定に起因する部分がかなり怪しい.というのもsystemd-networkdとしてはなにもエラーを出しておらず,もちろんsystemd-networkdを再起動しても状況が変わらない.
そして,ip a
する限りIPは割り当てられているように見える.が,この現象はたまに固定IPの設定でミスって,ルータ側からIPを割り当てられていない状態に見える.
なお,再起動すると正常にIPが割り当てられて接続できる.この状態で固定IP割当を無効化し,netplan apply
すると,自動割当のIPが割り振られて接続が復活するのである.
というわけで,どうもこの辺の挙動が怪しいため,ルータ側で固定IPを指定するようにした.
送っている識別子がMACアドレスじゃない
今までのUbuntu Desktop等では,適当にMACアドレスと固定IPの対応をルータ側に設定するだけで事足りていた.
しかしRaspberry Pi 4に関してはどうにもこの方式でうまく行かなかった.
というかみんなマシン側でIP固定する話しか出てこないので,メジャーじゃないのかもしれない.が,ようやく見つけた.
どうやらDHCPリクエスト時に送る識別子が MACアドレスではない らしい.これはRaspberry Pi固有の問題というより,おそらくsystemd-networkdの挙動なんじゃないかと思っているけれども.
とりあえず,これをMACにしてやればよい.
network: version: 2 wifis: wlan0: dhcp4: true dhcp-identifier: mac access-points: "access_point": password: "password"
$ sudo netplan apply
これで固定IPはルータ側から割り当てることができた.