PDHのAP化(bookworm OS版)

1.概要

PDHのAP(Access Point)モードとCL(Client)モードの切り替えに関しては、ホームページR-CPS-TOPの第3巻 「7.PDHで使用しているその他の技術」の下の「7.6.APモードとCLモードの移行」に記載しました。しかし、PDHの本体であるRaspberry PiのOSのバージョンが2023年10月に“bookworm“に上がり、ネットワークの制御がNetwork Managerに変更になったことで、上記の設定が使えなくなりました。
ここでは、Raspberry Pi OSが”bookworm”の場合のNetwork Managerを使ったAPモードの設定に関して説明します。
Network Managerになったことで、APモード時に、ルータとして動作させることが、比較的簡単になりました。
そこで、ここでは、ローカルネットワーク仕様(APモードのみ)とルータ仕様の双方の設定の仕方を記述しています。
ハードは、Raspberry Pi 4Bで動作確認しています。

2.OSのバージョンのチェック方法

OSのバージョンのチェック方法は、以下のコマンドを使います(こちら「PDHOSバージョン確認」も参照ください)。

$ lsb_release -a

3.APモードの設定方法

APモードの設定方法は、2通りあります。
1つは、PDH(Raspberry Pi)のwifiをAPモード専用として使う方法です。この場合、PDHとAPモードに接続した機器は、外部のインターネットに接続することはできません。互いにつながるだけです。ローカルネットワーク仕様です。
もう一つは、PDHのwifiを中継器として使う方法です。この場合は、PDHとAPモードに接続した機器は、インターネットに接続することができます。ルータ仕様です。
順に説明します。

4.APモード設定に必要な情報

APモードの設定には、以下の様な情報が必要になります。あらかじめ決めておく必要があります。

設定対象

設定値

備考

SSID

AP_SSID

自分の設定したいSSIDに読み替える

パスワード

AP_PASSWORD

自分の設定したいパスワードに読み替える

コネクション名

rpi_ap

コネクション名、何でもよい
(SSIDと同じでもOK)

IP範囲

192.168.50.1/24

ipv4.address 設定したいIPアドレスを指定

5. Network Managerの基本コマンド

Network Managerのコマンドは、nmcliです。APモードの設定に入る前に、nmcliを使ったwifiへの接続/切断などの基本コマンドを紹介します。

5-1. ネットワークの情報取得

現状のネットワークの情報を取得するコマンドです。

$ nmcli device

で、状態が表示されます。下の例では、コネクション名:Buffalo-A-BEB6が、wlan0にwifi typeとして接続済みになっています。

5-2.ネットワークの切断

ネットワークの切断は、以下のコマンドを使って行います。

$ nmcli connection down コネクション名

切断されたか確認します。

$ nmcli device

5-3.ネットワークの接続(過去に接続したことのあるwifiへの接続)

接続が可能なコネクション名を調べます。現在接続可能なwifiのリストではなく、過去に接続したことがあるwifiのリストです。

$ nmcli connection show

ネットワークの接続は、以下のコマンドを使って行います。

$ nmcli connection up コネクション名

接続されたか確認します。

$ nmcli device

5-3.ネットワークの接続(新規wifiへの接続)

以下のコマンドで、wifiのSSIDを調べます。接続可能なwifiのリストが表示されます。

$ nmcli device wifi list

次に以下のコマンドでwifiに接続します。

$ nmcli device wifi connect SSID --ask

改行するとpasswordを聞いてきますので、入力して接続します。

6. ローカルネットワーク仕様(APモード専用)の設定

Network ManagerのAPモード化で使用するコマンドは、以下の2通りがあります。違いは、一つ一つ設定していくか、1行で設定するかの違いだけです。中身は同じです。Network Managerのコマンドは、nmcliです。

6-1. 一つ一つ設定していく場合

次のコマンドを順番に入力してきます。1行目でrpi_apをコネクション名として追加(add)します。次の行からは、rpi_apの情報を変更(modify)していきます。

$ nmcli connection add con-name rpi_ap ifname wlan0 type wifi ssid AP_SSID
$ nmcli connection modify rpi_ap wifi-sec.key-mgmt wpa-psk
$ nmcli connection modify rpi_ap wifi-sec.proto rsn
$ nmcli connection modify rpi_ap wifi-sec.pairwise ccmp
$ nmcli connection modify rpi_ap wifi-sec.psk AP_PASSWORD
$ nmcli connection modify rpi_ap 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
$ nmcli connection modify rpi_ap ipv4.address 192.168.50.1/24
$ nmcli connection modify rpi_ap autoconnect yes

6-2. 一行で設定する場合

上記のコマンドを1行にスペースで区切って並べて実行します。間違えた場合は、一つ一つ設定してくmodifyコマンドを使って内容を変更します。

$ nmcli connection add type wifi ifname wlan0 con-name rpi_ap autoconnect yes ssid AP_SSID 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared ipv4.address 192.168.50.1/24 wifi-sec.key-mgmt wpa-psk wifi-sec.pairwise ccmp wifi-sec.proto rsn wifi-sec.psk AP_PASSWORD

6-3. 実行例

rpi_apの設定コマンドの実行例です。

設定した内容は、以下のディレクトリにファイルとして保存されます。設定した内容が確認できます。修正はmodifyコマンドを使って行ってください。

$ nmcli connection show コネクション名

でも設定内容は確認可能です。

また、

$ nmcli connection show

でも、設定が登録されたことが確認できます。

6-4. APモードの起動

APモードの起動は、以下のコマンドで行います。

$ nmcli connection up rpi_ap

6-5. 動作の確認

APモードで、SSIDが発振されます。Windows PCから接続可能なwifiの一覧を確認すると、SSID ap-modeを確認することができます。
そこで、接続をすると、インターネット無しで接続することができます。

そして、SSID ap-modeに接続した状態で、VNCでPDHに接続することが出来ました。

6-5. コネクションの削除

上記で作成したコネクションを削除したい場合には、以下のコマンドで削除します。

$ nmcli connection delete コネクション名

以下の例では、”Bullfao-G-8EB6“を削除しています。

7. ルータ仕様(APモード+WiFi接続)の設定

ローカルネットワーク仕様では、コネクション名 rpi_apをwlan0に割り当てています。そのため、wlan0が占有されてしまいますので、インターネットへの接続ができません。
ルータ仕様では、ひと手間かけて、wlan0以外のインターフェースを追加して、それにrpi_apを割り当てます。wlan0には、従来通りwifiを割り当てたままとします。
そして、その後IPのフォワード設定を行い、rpi_apからwlan0を通じて、wifiにアクセスできるようにします。

7-1. wlan0のMACアドレスの確認

wlan0のMACアドレスを調べます。ここでは、以下のコマンドで調べます(ifconfigでも調べられます)。

$ iw dev

7-2. インターフェースの追加

以下のコマンドで追加します。一つ目が、ap0の作成で、2つ目がap0にMACアドレスを割り当てます。

$ sudo iw phy phy0 interface add ap0 type __ap

$ sudo ip link set ap0 address MAC_ADDRESS

ここでの設定を永続化(リブートしても再現)するために、同じコマンドをファイルに記述し、起動のたびに読み込ませます。

下記のディレクトリに移動し、”99-ap0.rules”というファイルを作成し、中に以下を記載して保存します。

SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="MAC_ADDRESS", KERNEL=="phy0", \
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \
RUN+="/bin/ip link set ap0 address MAC_ADDRESS"

7-3. コネクションの作成

以下のコマンドを実行します。1行で実行することもできます。「4.ローカルネットワーク仕様」との違いは、インターフェース名の違いです。
ifname wlan0が、ifname ap0になっています。それ以外は、ローカルネットワーク仕様と同じです。

$ nmcli connection add con-name rpi_ap ifname ap0 type wifi ssid AP_SSID
$ nmcli connection modify rpi_ap wifi-sec.key-mgmt wpa-psk
$ nmcli connection modify rpi_ap wifi-sec.proto rsn
$ nmcli connection modify rpi_ap wifi-sec.pairwise ccmp
$ nmcli connection modify rpi_ap wifi-sec.psk AP_PASSWORD
$ nmcli connection modify rpi_ap 802-11-wireless.mode ap 802-11-wireless.band bg ipv4.method shared
$ nmcli connection modify rpi_ap ipv4.address 192.168.50.1/24
$ nmcli connection modify rpi_ap autoconnect yes

7-4. APモードの起動

APモードの起動は、以下のコマンドで行います。

$ nmcli connection up rpi_ap

その後、接続を確認します。

7-5. IPフォワード設定

以下のファイルを開き、先頭の#を外し、コメントを解除します。

net.ipv4.ip_forward=1

保存後、リブートします。

7-6. 接続確認

Windows PCから、PDHのSSID ap_modeに接続して、インタネットに出られるか確認します。

■ Windows PCからR-CPS-TOPに接続可能

■ VNCでPDHに接続可能