読者です 読者をやめる 読者になる 読者になる

Status Code 303 - See Other

Java, C, C++, C#, Objective-C, Swift, bash, perl, ruby, PHP, Python, Scala, Groovy, Go, DevOps, Raspberry Pi など。情報の誤りや指摘・意見などは自由にどうぞ。

RaspberryPi で複数 Wifi 環境に個別設定を行う方法

概要

勉強会参加するときに RaspberryPi3 を持ち歩いているのだが、
自宅・外出先で Wifi のプライベートアドレス構成が微妙に異っており、事前に設定しておかないといけなかった。
もし設定を忘れた場合、その場でディスプレイ・マウス・キーボードを借りて設定するという若干手間になっていた。

文献がない

RaspberryPi に固定 IP を設定する方法はかなりの数存在する。

しかし、これが複数 Wifi に設定を適応するとなると途端に記事は少なくなる。
その中でも見つけたのがコレ。
Raspberry Piで複数Wifiで個別の固定IPを指定する方法 – 1ft-seabass.jp.MEMO

設定方法をザックリいってしまえば。

  • Wifi の設定は /etc/wpa_supplicant/wpa_supplicant.conf
  • ネットワーク設定は /etc/network/interfaces

そして、wpa_supplicant.conf にネットワークごとの識別子(id_str要素)を作成しておき、
それを interfaces で認識して各々設定するというもの。

設定例

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB

network={
        ssid="SSID-xxxx"
        psk="pass_phrase"
        key_mgmt=WPA-PSK
        id_str="home"
}
network={
        ssid="SSID-yyyy"
        psk="pass_phrase"
        key_mgmt=WPA-PSK
        id_str="out"
}
/etc/network/interfaces
auto wlan0
allow-hotplug wlan0
 
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
 
iface home inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
 
iface out inet static
address 192.168.20.30
netmask 255.255.255.0
gateway 192.168.20.1

ネットワーク設定構成が異なる場合(dhcpcd.conf も設定する場合)

RaspberryPi 3 を購入したとき最新の raspbian はネットワークの設定が変わっていた。

  • Wifi の設定は /etc/wpa_supplicant/wpa_supplicant.conf
  • ネットワーク定義 /etc/network/interfaces
  • 個別ネットワーク詳細設定 /etc/dhcpcd.conf

に分かれてしまっており、どうやら dhcpcd.conf は別の仕組みで動くらしい。

個別の設定部分を dhcpcd.conf に書いてみるが動かない・・・。(違う仕組みなので当然なのだが)
しかし、デフォルトの設定構成を変えるような interfaces を変更したくない。
といっても、該当する文献が見つからなかった。・・・ということで、dhcpcd.conf マニュアルを眺めてみたら。

$ man dhcpcd.conf

なんか気になる設定要素発見。

     ssid ssid
             Subsequent options are only parsed for this wireless ssid.

設定したら、あっさりできてしまった。

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB

network={
        ssid="SSID-xxxx"
        psk="pass_phrase"
        key_mgmt=WPA-PSK
}
network={
        ssid="SSID-yyyy"
        psk="pass_phrase"
        key_mgmt=WPA-PSK
}
/etc/network/interfaces
iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
/etc/dhcpcd.conf
interface wlan0
ssid SSID-xxxx
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

ssid SSID-yyyy
static ip_address=192.168.20.30/24
static routers=192.168.20.1
static domain_name_servers=192.168.20.1

どこでも気軽にもっていけるようになった!

普段持ち歩いている無線 Wifi に繋げるようにしておき、
新しい環境でもノート PC と無線 Wifi があれば一度設定すればいつでも使用可能に。

  1. 無線 Wifi にノート PC と RaspberryPi 接続
  2. 無線 Wifi のプライベートIP経由で SSH 接続
  3. 外出先のネットワーク設定を行う(接続優先度は無線 Wifi より低く設定)
  4. 無線 Wifi 停止・RaspberryPi 再起動
  5. 動かなかったら無線 Wifi 使って再度 SSH ログインして調査。

仮にネットワーク設定ミスってしまっても、無線 Wifi にはいつでもつなげるのがいいですね。