Raspberry Piの固定IP割当をルーターから指定する

  1. Raspberry Piを買っておうちKubernetesクラスタを作る
  2. おうちKubernetesにSealedSecretsを入れる
  3. 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固定する話しか出てこないので,メジャーじゃないのかもしれない.が,ようやく見つけた.

qiita.com

どうやら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はルータ側から割り当てることができた.