ASRobot

タイトルがロボットなのに関連する記事がほぼ無い備忘録です。

【dhcpcd × wpa_supplicant】Raspberry Piで無線LANを設定する方法

はじめに

皆さんはRaspberry Piで無線LAN設定をするときは、どのように行っていますか? おそらくifupdownなどを使用して、/etc/network/interfacesなどに設定を記述している方が多いと思います。 ifupdownを使用した設定方法は巷にたくさん書いてあるので、ここでは、また別の設定方法を紹介したいと思います。

なぜこの記事を書いたか?

少し前に、Raspberry Pi 3B+でUbuntu Server 16.04を動作させる記事を書いたとき、ifupdownを使った無線LAN設定を行った際、 wpa-roamと呼ばれるローミング機能が動作せず、他の方法を模索したのが今回の方法を書くキッカケとなりました。 wpa-roamは飛んでいる電波に応じて、自動的に切り替えを行うことができるもので、使用できないと不便です。 なので、他の方法を模索したとき、dhcpcdと呼ばれるDHCPのクライアントを使用することで、従来通りに無線LANの接続に加えて、 wpa-roamと同等の機能を使うことが確認できたので、記事に書いた次第です。 それでは、設定方法について紹介をしていきます。

必要なソフトウェアのインストール

sudo apt install dhcpcd5 wpasupplicant wireless-tools

/etc/network/interfaceの内容を全部コメントアウト

sudo vim /etc/network/interfaces

↑で開いたらコメントアウトする。

wpa_supplicant.confの設定

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

ssidとパスワードは各自変更してください。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="hogelan"
    psk="hogepass"
}

wpa_supplicantの自動起動サービスを作成

sudo vim /etc/systemd/system/multi-user.target.wants/wpa_autostart.service

以下を入力

[Unit]
Description = wpa_supplicant auto start service.

[Service]
ExecStart = /sbin/wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

サービスを有効にします。

sudo systemctl daemon-reload
sudo systemctl enable wpa_autostart.service
sudo systemctl start wpa_autostart.service
sudo systemctl status wpa_autostart.service

dhcpcdの設定

sudo vim /etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
#clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private

# 以下を追記
interface eth0
interface wlan0

## 固定にする場合は以下も追記

## 固定にしたいネットワークのSSID
ssid hogelan


## 固定アドレスを指定
## xxxを適宜変更
static ip_address=192.168.22.xxx/24
## ルータのアドレスを設定
static routers=192.168.22.1
## ルータのアドレスと同じのでOK
static domain_name_servers=192.168.22.1

以上の設定が完了したら再起動します。

無線LANの接続確認

無線LANに接続できているか確認します。

$ iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:"hogelan"  
          Mode:Managed  Frequency:2.437 GHz  Access Point: xxxxxxxxxxxxxxx   
          Bit Rate=72.2 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=70/70  Signal level=-33 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:9  Invalid misc:0   Missed beacon:0

ssidが表示されれば接続できています。

IPアドレスの確認

$ ip addr
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xxxxxxxxxxxxxxx brd ff:ff:ff:ff:ff:ff
    inet 192.168.22.221/24 brd 192.168.22.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/64 scope link 
       valid_lft forever preferred_lft forever

接続できていますね。 これで設定は完了です。不明な点がありましたら、コメントを頂けると助かります。