私はラズベリーパイで自作サービスやサーバーを24時間運用しようと意気込んだものの、 「なぜか丸1日経つと別PCからSSHアクセスできなくなる」 現象に悩まされていました… 「ラズパイを再起動すれば直るけど、毎日やるのは面倒だし、根本的な解決になっていない…」
原因はRaspberry Pi OSの世代交代(Bookworm)と、ネットワークの基本的な仕組みが原因かもしれません。
症状:なぜ「再起動で直る」のに「1日」でダメになるのか
ラズパイが以下のような状態で悩んでいました。
- 丸1日(約24時間)経過すると、突然SSH接続ができなくなる。
- ラズパイを物理的に再起動(電源抜き差し等)すると、直る。
- 「Raspberry Pi Connect」でのブラウザ接続は通じる。
最後の「Raspberry Pi Connectは通じる」というのが、真犯人を特定する最大のヒントです。これは 「ラズパイ本体はフリーズしておらず、インターネット(外向き)には繋がっているが、ローカルネットワーク内の住所(IPアドレス)を見失っている」 ことを示唆しています。
真犯人は「DHCPのリース切れ」
多くの家庭用ルーターは、 DHCP という機能で機器にIPアドレスを自動割り当てします。この割り当てには「リース期間(有効期限)」があり、多くの場合 24時間 に設定されています。
- 起動時: ルーターから「今は
.125を使っていいよ(期限は1日)」と許可される。 - 再起動時(一時しのぎ): ラズパイが例えば「前と同じ
.125でいい?」と聞き、ルーターが「OK」と返す(暗黙の再利用)。 - 1日後: 期限切れ。Wi-Fiの瞬断などで更新に失敗すると、ルーターは
.125を回収し、ラズパイに 新しいIPアドレス(例: .133) を割り当てます。 - 結果: あなたのPCは古い
.125にアクセスしようとしますが、ラズパイは.133に引っ越しているため、SSHがつながらなくなります。
Raspberry Pi Connectを活用しよう
ネット上の多くの記事は「とりあえず設定を見直せ」と書いてありますが、私はRaspberry Pi Connectを使って 原因を見つけました。
SSHが繋がらなくなった時、 Raspberry Pi Connect でログインし、ターミナルで以下のコマンドを打ってみるのもありかも。
# 普段SSHで使っているIPと比較する
hostname -I
もし、 普段と違うIPアドレス が表示されたら、ビンゴです。原因はIPアドレスの変動です。
【Bookworm対応】最新の固定IP設定術 (nmcli 編)
原因がわかれば、対策は 「IPアドレスを固定する」 ことです。
ここで最大の注意点があります。ネットで検索すると未だに /etc/dhcpcd.conf を編集する記事が上位に来ますが、 Raspberry Pi OS (Bookworm以降) ではその手法は非推奨(動作しない場合が多い) です。
最新OSでは、ネットワーク管理が NetworkManager に移行しており、nmcli コマンドを使うのが「正しい」方法です。
準備:現在の接続名を確認する
nmcli connection show
出力された NAME 欄を確認します。
- 有線の場合: 大抵は
有線接続 1 - Wi-Fiの場合:
netplan-wlan0-で始まるSSID名のもの
以下では、有線(eth0)とWi-Fi(wlan0)それぞれの固定IP設定コマンドを例示します。 [あなたの接続名] や IPアドレス は、ご自身の環境に合わせて書き換えてください。
方法A:有線(イーサネット)を固定する(推奨)
サーバー運用なら、安定した有線が一番です。
IPアドレス、ゲートウェイ、DNSを設定する (例: IPを
192.168.10.125、ルーターを192.168.10.1にする場合)# IPとサブネットマスク sudo nmcli connection modify "有線接続 1" ipv4.addresses 192.168.10.125/24 # ゲートウェイ sudo nmcli connection modify "有線接続 1" ipv4.gateway 192.168.10.1 # DNS(ルーターと、予備でGoogle DNS) sudo nmcli connection modify "有線接続 1" ipv4.dns "192.168.10.1,8.8.8.8"割り当て方法を「手動」に変更し、反映する
sudo nmcli connection modify "有線接続 1" ipv4.method manual sudo nmcli connection up "有線接続 1"
方法B:Wi-Fiを固定する
設定コマンドを実行 (例: 接続名が
netplan-wlan0-mywifiの場合)sudo nmcli connection modify "netplan-wlan0-mywifi" ipv4.addresses 192.168.10.125/24 sudo nmcli connection modify "netplan-wlan0-mywifi" ipv4.gateway 192.168.10.1 sudo nmcli connection modify "netplan-wlan0-mywifi" ipv4.dns "192.168.10.1,8.8.8.8"「手動」に変更し、反映
sudo nmcli connection modify "netplan-wlan0-mywifi" ipv4.method manual sudo nmcli connection up "netplan-wlan0-mywifi"※反映コマンド実行時、Raspberry Pi Connectの接続が一度切れますが、自動で再接続されます。
有線と無線の優先順位(Metric値)を設定する
有線とWi-Fiの両方を繋いでいる場合、OSがどちらを優先するかを明示的に設定しておくと、さらに安定します。 「メトリック(Metric)」 という値を使います(数字が小さいほど優先)。
# 有線(NAME: 有線接続 1)の優先度を上げる(100)
sudo nmcli connection modify "有線接続 1" ipv4.route-metric 100
# Wi-Fi(NAME: netplan-wlan0-mywifi)の優先度を下げる(600)
sudo nmcli connection modify "netplan-wlan0-mywifi" ipv4.route-metric 600
これで、 「有線があればそちらを使い、抜いた時だけWi-Fiに切り替わる」 という、冗長性のある構成になります。
まとめ
私の環境の場合、「1日でラズパイにアクセスできなくなる」問題の正体は、OSの世代交代と、DHCPによるIPアドレスの変更でした。
- 旧OS ( dhcpcd.conf ) の知識は捨て、最新OS ( nmcli ) にアップデートする。
- Raspberry Pi Connectを診断ツールとして賢く使う。
- IPアドレスを固定し、メトリック値で優先順位をつける。
この対策を行うことで、ラズパイは安定したサーバーになります。同様の現象に悩む方の助けになれば幸いです。
(対処法が書いてあるサイトがなかったので苦労した…)