Raspberry Pi OSのIPアドレスの固定化の設定方法を紹介します。
近年はRaspberry Pi Imagerによってセットアップ時にRaspberry Pi OSにホスト名を設定できるようになったことで、IPアドレスの代わりにraspberrypi.localなどのようにホスト名でSSHなどで接続できるようになりました。DHCPによって自動的に振られるIPアドレスがわからないので、SSHで繋げられないというハードルが解消し、手軽にモニタなしでRaspberry Piをセットアップ、運用できるようになりました。
なぜraspberrypi.localでSSHなどが接続できるのか?
ちょっとネットワークをかじったことがある人ならば「DNSサーバーに登録したわけでも、hostsファイルに追加したわけでもないのに、なぜraspberrypi.localでSSHが接続できるのだろう?」と思うでしょう。これはmDNS(マルチキャストDNS)という仕組みによるものです。
DNSはDNSサーバーに「raspberrypiのIPアドレスは192.168.1.100ね」と登録しておき、Raspberry Piにアクセスする時にDNSサーバーに「raspberrypiのIPアドレスって何番ですかね?」と問い合わせる仕組みですが、通常は家庭内にDNSサーバーはありません(Wi-Fiルーターに簡易的なものが組み込まれていますが)
mDNSを簡単に説明すると、接続元が「raspberrypi.localっておる?」と大声で聞くと、接続先のRaspberry Piが「僕です!IPアドレスは192.168.1.100です!」と答えてくれる仕組みです。もちろん、接続元と接続先が両方ともにmDNSに対応している必要があります。
Raspberry Pi OSにはデフォルトでこのmDNSの仕組みがセットアップされているため、IPアドレスがわからなくてもraspberrypi.localなどのホスト名で接続できるのです。
Raspberry PiのIPアドレスを固定化した方が良い理由
ところが、説明したように接続元も接続先もmDNSに対応している必要があります。Raspberry Piは対応していますが、接続元のソフトウェアがmDNSに対応していないとホスト名では接続することはできません。私の場合はRealVNCのVNC Viewerでホスト名で接続先を指定すると問題が出たりしました。
そんな訳で、やはりモニターなしで運用されるRaspberry PiのIPアドレスは固定化しておいた方が良いでしょう。
ちなみに、私の場合はこのRaspberry PiでNASを作るつもりですので、速度的に有利な有線LANのIPアドレスを固定化しました。ただし、無線LANの方もDCHPのまま有効にしています。こうしておくと、有線LANの設定をミスったりしてもraspberrypi.localで無線LANの方に接続できるからです。
IPアドレス、デフォルトゲートウェイ、DNSサーバーの決め方
Raspberry PiのIPアドレスを固定化するためには、IPアドレス以外にデフォルトゲートウェイやDNSサーバーのIPアドレスも必要です。厳密に説明するとケースバイケースで、これだけで数記事必要なほどなのですが、ここでは「大抵の場合はこれ」という内容を説明します。ここを読むレベルの人で、この記載通りでダメな場合は詳しい人に協力を仰ぐ必要があるでしょう。
まずは、他のPCでネットワークの設定を確認します。Windowsの場合にはコマンドプロンプトもしくはターミナルでipconfigというコマンドを実行するとネットワークの設定を確認することができます。
下半分の「VirtualBox Host・・・・」というところは無視してください。このPCには192.168.1.201が割り振られていますね。大抵の場合はサブネットマスクが255.255.255.0となっています。この場合にはRaspberry Piに設定するIPアドレスはxxx.yyy.zzz.aaaの内でxxx.yyy.zzzまでは同じ値にして、aaaを任意の値に固定化します。サブネットマスクが255.255.255.0以外の場合には詳しい人に頼るか、サブネットマスクについて勉強してください。
Raspberry Piに限った話ではありませんが、Wi-Fiルーターに内蔵されているDHCPによって既に他の機器に割り振られたIPアドレスを避ける必要があります。本来であればWi-FiルーターにDHCPで割り振るIPアドレスの範囲を設定して、その範囲外のIPアドレスにするのですが、私は面倒なので適当に少し大きめの値を設定しています。今回の場合は192.168.1.100です。一応その時点でその他の機器と重複していないかをpingコマンドで確認します。
応答がありませんので、少なくともこの時点では空いているIPアドレスのようです。こんな決め方をして、あとからDHCPが他の機器に同じ値を割り振ったりしないのかな?と思いますが、私は今までそのようなトラブルになったことはありませんので、恐らくDHCPも重複がないかを確認してから付与しているのではないでしょうか。
デフォルトゲートウェイは、上記のipconfigで表示されたデフォルトゲートウェイと同じものを設定すればOKです。ここでは192.168.1.1ですね。デフォルトゲートウェイは「知らないIPアドレスの時にとりあえず向かうIPアドレス」です。大抵はWi-FiルーターのIPアドレスです。つまり、私のWi-Fiルーターのアドレスは192.168.1.1ということです。
次にDNSサーバーです。ipconfigには表示されていませんが、大抵の場合はルーターが中継するのでルーターのIPアドレス、つまりデフォルトゲートウェイと同じIPアドレスなのですが、Wi-Fiルーターを無視してGoogleのDNSサーバーである8.8.8.8を設定するのが流行りです。記事を書くのにも都合が良いので以下も8.8.8.8で記載しています。他にもプロバイダのDNSサーバーを指定した方が速度が出るという話もありますが、よくわからない人は8.8.8.8を指定しておけばOKです。
Raspberry PiのIPアドレスの固定化方法(SSHなどのコマンドライン)
ここでは、SSHで接続するなどして、コマンドライン(CUI)で設定する方法を解説します。いまどきコマンドポチポチとか昭和かよ!と思うかもしれませんが、VNCなどのGUIでのリモートアクセスができない時には必要です。通常は後述するGUIでの設定で良いと思います。
無線LAN
設定ファイル(dhcpcd.conf)を編集します。
sudo nano /etc/dhcpcd.conf
上のコマンドでnanoというRaspberry Pi標準のテキストエディタを開き、一番下に下記を追記します。
interface wlan0 static ip_address=「Raspberry Piに設定するIPアドレス」/24 static routers=「デフォルトゲートウェイのIPアドレス」 static domain_name_servers=「ドメインネームサーバーのIPアドレス」
Ctrl + Xでエディタを終了しようとすると保存するかを聞いてきますので、Yを入力して保存します。
ファイル名を確認してきますので、enterキーを押下すれば保存されてエディタが終了します。
rebootコマンドでRaspberry Piを再起動します。
sudo reboot
再起動したら再びSSHで接続して、ifconfigコマンドで確認します。
ifconfig
無線LANの設定は「wlan0」です。設定したIPアドレスになっていることが確認できますね。これでraspberrypi.localでも、IPアドレスでも接続できるようになりました。
ちなみに、ググっていると/etc/wpa_supplicant/wpa_supplicant.confという設定ファイルを編集している記事もありますが、これは無線LANの接続先の設定で、「Rspberry Pi Imager」でのセットアップ時にWi-Fiを設定してあれば、既に書き込まれています。
試しに私の環境で設定ファイルの中身をのぞいてみます。
sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
SSIDなどが書き込まれていますね。今まで有線LANでしか接続していなかった場合などで、なければ設定を追加する必要がありますが、PSKを取得するためには別途手順が必要ですので、その場合はGUIでの設定をおすすめします。
有線LAN
設定ファイル(dhcpcd.conf)を編集します。
sudo nano /etc/dhcpcd.conf
上のコマンドでnanoというRaspberry Pi標準のテキストエディタを開き、一番下に下記を追記します。
interface eth0 static ip_address=「Raspberry Piに設定するIPアドレス」/24 static routers=「デフォルトゲートウェイのIPアドレス」 static domain_name_servers=「ドメインネームサーバーのIPアドレス」
Ctrl + Xでエディタを終了しようとすると保存するかを聞いてきますので、Yを入力して保存します。
ファイル名を確認してきますので、enterキーを押下すれば保存されてエディタが終了します。
rebootコマンドでRaspberry Piを再起動します。
sudo reboot
再起動したら再びSSHで接続して、ifconfigコマンドで確認します。
ifconfig
有線LANの設定は「eth0」です。設定したIPアドレスになっていることが確認できますね。これでraspberrypi.localでも、IPアドレスでも接続できるようになりました。
Raspberry PiのIPアドレスの固定化方法(VNCなどのGUI)
無線LAN
VNCなどでリモートデスクトップ接続したら、右上のWi-Fiのアイコンを右クリックします。
表示されたメニューの一番上の「Wireless & Wired Network Settings…」をクリックします。
表示された設定画面の右上のコンボボックスから「wlan0」を選択し、下記のように各IPアドレスを入力します。
IPv4 Address : Raspberry Piに設定するIPアドレス Router : デフォルトゲートウェイのIPアドレス DNS Servers : DNSサーバーのIPアドレス
入力できたら「Apply」をクリックして保存します。
左上のラズベリーパイアイコンからメニューを開き「Shutdown」をクリックします。
表示されたウインドウで「Reboot」をクリックするとRaspberry Piが再起動し、VNCの接続も切れます。
これで、raspberrypi.localでも、IPアドレスでも接続できるようになりました。
有線LAN
VNCなどでリモートデスクトップ接続したら、右上の↑↓のアイコンを右クリックします。ちなみに無線LANが有効になっていると無線LANのアイコンになっていますので、それを右クリックします。
表示されたメニューの一番上の「Wireless & Wired Network Settings…」をクリックします。
表示された設定画面の右上のコンボボックスから「eth0」を選択し、下記のように各IPアドレスを入力します。
IPv4 Address : Raspberry Piに設定するIPアドレス Router : デフォルトゲートウェイのIPアドレス DNS Servers : DNSサーバーのIPアドレス
入力できたら「Apply」をクリックして保存します。
左上のラズベリーパイアイコンからメニューを開き「Shutdown」をクリックします。
表示されたウインドウで「Reboot」をクリックするとRaspberry Piが再起動し、VNCの接続も切れます。
これで、raspberrypi.localでも、IPアドレスでも接続できるようになりました。
GUIの方が簡単ですね。GUIならこんな記事を見なくてもなんとなく画面を触っていればわかるレベルです。なんならWindowsよりも簡単なくらいですね。