Help us understand the problem. What is going on with this article?

Raspberry PiのwifiのAP/Clientを切り替え

概要

Raspberry Pi 3/4/zero wに搭載されているwifiモジュールは、クライアントとしてwifiに接続することも、アクセスポイント(AP)として他の機器からRaspberry piに接続することもできます。
アクセスポイントとして起動すれば、キーボードやモニタを用意せずにスマホからSSH接続して設定を行うことができます。

ここでは、AP⇔wifiのそれぞれのモードを相互に切り替える手順を記載します。

以前同じ手順を説明する以下の記事を書いたのですが、より適切と思われる手順を確認したので再度投稿しています。

https://qiita.com/yamato225/items/4c17bfdbda6ce57104de

以下、

  • wifi=Raspberry Pi以外のアクセスポイント
  • AP=Raspberry PiのwifiモジュールをAPとして動作させるもの

という意味で書いています。(若干ニュアンスが不正確ですがご容赦ください)

セットアップ

今回検証した環境

項目 内容
ハード Raspberry Pi 4
OS Raspbian GNU/Linux 10 (buster)

hostapd(APとして動作させるデーモン)とdnsmasq(簡易DHCPサーバ)をインストール。

sudo apt install hostapd dnsmasq

hostapdの設定
APとして動作させる場合の設定を記します。

/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=<SSID名>
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=<パスワード>
rsn_pairwise=CCMP

dnsmasq(DHCPサーバの設定)

/etc/dnsmasq.conf
interface=wlan0
dhcp-range=172.24.1.100,172.24.1.200,255.255.255.0,1h

hostapdのサービスを有効化します。ただし、自動起動されたくないので、disableにします。

sudo systemctl unmask hostapd
sudo systemctl disable hostapd

wpa_supplicantの設定

/etc/wpa_supplicant/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="<wifiのSSID名>"
    psk="<wifiパスワード>"
}

この設定をした状態で以下コマンドを実行すると、wifiに接続します。

sudo systemctl restart dhcpcd

蛇足:
wifiへの接続を行うサービスはwpa_supplicantですが、wpa_supplicantがwifiに接続するよう設定を行っているのはdhcpcdです。
この処理は/lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicantというシェルスクリプトがdhcpcdが起動するとき一緒に起動することで実現されています。

dhcpcd自体はDHCPのクライアントなのに、wifi接続の設定をやっているという、モジュール化という観点で言えば看過し難い設計になっています。

wifi→APへの切り替え

wpa_supplicantとdhcpcdを停止します。

sudo systemctl stop wpa_supplicant
sudo systemctl stop dhcpcd

固定IPをipコマンドで設定します。この方法なら設定ファイルを編集せずにすみます。

sudo ip addr add 172.24.1.1
sudo ip route add default via 172.24.1.1

DHCPサーバを起動します。

sudo systemctl start dnsmasq

hostapdを起動します。

sudo systemctl start hostapd

以上でその他の機器から、hostapd.confにて設定したSSIDに対して接続可能となります。

AP→wifi

hostapdを停止。

sudo systemctl stop hostapd

dnsmasqを停止

sudo systemctl stop dnsmasq

固定IP設定を削除

sudo ip addr flush dev wlan0

wpa_supplicantを起動

sudo systemctl start wpa_supplicant

dhcpcdを起動

sudo systemctl start dhcpcd
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away