NetWorkManagerだけでラズパイをWi-Fiアクセスポイント化する方法

Raspberry Pi のWi-Fiをアクセスポイント化するだけなら、これまでもhostapdとdnsmasqをインストールして実現できました。現行OSだと、ネットワークの管理はNetworkManagerになり、他のアプリケーションを使わずとも実現できるようになりました。しかも簡単です。

※2023年10月以降、Raspberry Pi OSではNetworkManagerが標準になりました。(以前はdhcpcd)

Raspberry PiをWi-Fiアクセスポイント化すれば、別のマシンやスマホを直接Raspberry Piに接続して操作ができます。
分かりやすいように、Raspberry Piに構築したネットワーク環境に別のマシンをWi-Fiで繋ぐ方法をご紹介します。

今回の環境

  • PL-R4(Compute Module 4)
  • Raspberry Pi OS bullseye 64bit
  • インターネットは有線LANケーブルで接続

ComputeModule4のWi-Fiをアクセスポイントに設定する環境です。アクセスポイント化するため通常のインターネット接続にWi-Fiの設定はしていません。

OSは記事執筆時点でアップデートしてある状態です。

sudo apt update && sudo apt full-upgrade -y

もしもdnsmasqがインストールしてあるなら、停止&無効または削除してバッティングしないようにしておきます。
NetworkManagerはインスタンスでdnsmasqが起動して利用できます。

産業用ラズパイに限らず、Raspberry Pi 4や5でも同じように設定ができます。
なお、インターネット側はRaspberry Piの有線LANケーブルで接続している状態です。

NetworkManagerのコマンド

NetworkManagerでWi-Fiの設定をするのにコマンドを使います。

raspi-configのように、ターミナル上でグラフィカルに設定することも可能です。(nmtui=Network Manager Text User Interface)

  • nmtui ターミナル内のグラフィカルな設定ツール
  • nmcli コマンドによる設定ツール

今回はnmcliコマンドでの設定です。

次のコマンドは便利です。
設定途中で確認として実行してみると良いでしょう。

nmcli dev status (nmcli device)
nmcli connection show (nmcli connection)
nmcli connection show wlan0
nmcli connection show AP名

設定ファイルの場所

新規にアクセスポイントを設定すると/etc/NetworkManager/system-connections/以下に作成されています。(永続プロファイルの場所)

sudo nano /etc/NetworkManager/system-connections/rpi_ap.nmconnection

こんな感じで記述されています。

[connection]
id=rpi_ap
uuid=********-****-****-****-************
type=wifi
interface-name=wlan0
permissions=

[wifi]
band=bg
mac-address-blacklist=
mode=ap
ssid=raspida-lan
[wifi-security]
key-mgmt=wpa-psk
pairwise=ccmp;
proto=rsn;
psk=password
[ipv4]
address1=192.168.2.1/24
dns-search=
method=shared
[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto
[proxy]

addr-gen-mode=stable-privacy dns-search= method=auto [proxy]

ファイルを直接編集することもできますが、あまりオススメしません。UUIDが変更したりするので、nmcliコマンドで実行していきましょう。

nmcliコマンドで設定していく

ここからが本題です。

アクセスポイント化するため、通常のeth0やwlan0ではなく、例としてrpi_apという接続ポイントを作成して、ラズパイのwlan0にスマホ(PC)から接続できるように設定していきます。

nmcliコマンドを使います。
コマンドの書式はオプションが多く、しかもコマンドオプションを省略して入力もできるため少々ややこしく感じました。

nmcliの書式

nmcli [OPTIONS...] { help | general | networking | radio | connection | device | agent | monitor } [COMMAND] [ARGUMENTS...]

入力を省略できるコマンドオプションは、最少で1文字まで省略できます。con や devといった微妙な省略もあるので、コマンド入力補完(TABキー)で入力していくと楽です。

省略した場合の例

  nmcli connection show rpi_ap
     ↓
  nmcli c s rpi_ap

慣れればいいのでしょうが、初めはフルテキストで設定した方が分かりやすいですね。

Wi-Fiアクセスポイント化プロファイルの作成と設定

アクセスポイントのプロファイルを作成します。新規作成なら一緒に設定する内容も1行で書くことができます。

最終的には、次の1行で設定しました。
任意で設定するのは、ssid名(raspida-lan)とパスワード( “password”)です。

sudo nmcli connection add type wifi ifname wlan0 con-name rpi_ap autoconnect yes \
ssid raspida-lan \
802-11-wireless.mode ap \
802-11-wireless.band bg \
ipv4.method shared ipv4.address 192.168.2.1/24 \
wifi-sec.key-mgmt wpa-psk \
wifi-sec.pairwise ccmp \
wifi-sec.proto rsn \
wifi-sec.psk "password"

そして最後に設定を反映させます。

sudo nmcli connection up rpi_ap

設定オプションの解説

コマンド例の意味を少し解説していきます。

sudo nmcli connection add type wifi ifname wlan0 con-name rpi_ap autoconnect yes
接続タイプをWi-Fi、インターフェイスにwlan0、接続AP名をrpi_apとし、autoconnectをyesです。autoconnect(自動接続)はデフォルト(基本)でNOです。毎回connection upコマンドをする必要があるため、自動接続設定を有効にしています。

ssid raspida-lan
SSIDの名前をraspida-lanとしました。これは任意のテキストです。この名前のWi-Fiに繋ぐことになります。

Wi-Fiの認証方式も一緒に設定しています。
802-11-wireless〜からや、wifi-sec〜の部分は、Wi-Fiの認証方式やIPアドレスなどの設定です。このくらいは必要でしょうか。
ネットワーク環境に合わせて変更してください。

802-11-wireless.mode ap
802-11-wireless.band bg
ipv4.method shared ipv4.address 192.168.*.1/24
wifi-sec.key-mgmt wpa-psk
wifi-sec.pairwise ccmp
wifi-sec.proto rsn
wifi-sec.psk "password"

モードをAP(アクセスポイント)、バンドはb/g、ipv4.methodはマニュアル(手動)ではなく、shared(共有)にしてからIPアドレスを設定しています。

sharedにしたのは、アクセスポイントに繋いだクライアント(スマホやPC)にIPアドレスを配布するためです。
NetworkManager単体でmanualとすると、ローカルアドレス(169.254〜)が配布されます。

IPアドレスは、分かりやすいように192.168.*.1/24としました。自宅のWi-Fiと被らないように*を設定しています。

環認証方式がWPA2なので、プロトコルがRSN、暗号方式はAES(≒CCMP)の環境で設定しました。

後から設定するには

confファイルが作られた後に設定したい場合は、nmcli modifyコマンドで追加します。

設定例:

nmcli connection modify rpi_ap ipv4.method manual ipv4.addresses 192.168.2.1/24 \
nmcli connection modify rpi_ap 802-11-wireless-security.key-mgmt wpa-psk \
nmcli connection modify rpi_ap 802-11-wireless-security.psk "任意パスワード" \
nmcli connection modify rpi_ap 802-11-wireless-security.pairwise ccmp \
nmcli connection modify rpi_ap 802-11-wireless-security.proto rsn
nmcli connection modify rpi_ap 802-11-wireless.band a \
nmcli connection modify rpi_ap 802-11-wireless.channel 12

設定の反映

必要な分をすべて設定したら接続を確立させます。(修正&追加を反映)

sudo nmcli connection up AP名

サービスの再起動でも反映できる

サービスをリスタートでも修正を反映できます。普段はconnection upで事足ります。

sudo systemctl restart NetworkManager.service

一覧表示と内容の設定確認

showコマンドで一覧表示ができます。アクセスポイント名(ここではrpi_ap)を指定したshowコマンド(nmcli connection show rpi_ap)でアクセスポイントの設定内容が表示されます。

nmcli connection show
nmcli connection show rpi_ap

足りない部分があったら、先のnmcli con modify〜に続けて設定ができます。

アクセスポイントの削除コマンド

アクセスポイントを削除するにはdeleateコマンドです。
間違えたらやり直したいこともあるでしょう。削除してから再度作成してください。

sudo nmcli connection delete rpi_ap

接続してみよう!

アクセスポイント化が完了したら、他のPCやスマホから接続してみます。

別のラズパイで、SSIDをikkadan-lanと設定したアクセスポイントに接続した例。

iPhoneでSSIDをraspida-lanと設定したアクセスポイントに接続した例。

IPアドレスも指定した範囲で割り振られているのが分かります。この例だと192.168.2.1/24で設定しました。

使ったのはNetworkManagerだけ

NetworkManagerだけでWi-Fiをアクセスポイント化できるのは簡単で便利ですね。

以前のdhcpcd+hosted+dnsmasqの組み合わせと比べると、手数の意味でも簡単に感じます。

nmcliコマンドは、シェルスクリプト(.sh)でも使えるので、独自の設定方法をまとめておくと便利だと思います。
nmtuiコマンドはここでは触れていません。GUIで設定出来るため分かりやすい反面、最終的にはconnection upコマンドをしないと即時反映しないため、有効化するのを忘れてしまいます。

コマンドを実行する設定とはいえ、たったの1行で済むのでそれほど厄介ではありません。

NetworkManagerで設定するラズパイのWi-Fiアクセスポイント化の方法でした。


記事寄稿:ラズパイダ

非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。