「設定 - アクセスポイント」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の10版が非表示)
24行目: 24行目:
<br><br>
<br><br>


== アクセスポイントの作成 ==
== no IRフラグ ==
アクセスポイントを作成する。<br>
no IRフラグ (no Initiating Radiation) がある場合、APとしての動作やアクティブスキャンができないため、接続に問題が生じることがある。<br>
また、OSの起動時に自動起動する。<br>
<br>
各周波数帯とそれに付与されているno IRフラグを確認する。<br>
# 詳細な情報を表示
sudo iw list
# 出力例
Frequencies:
    * 5180 MHz [36] (20.0 dBm)
    * 5200 MHz [40] (20.0 dBm)
    * 5220 MHz [44] (20.0 dBm) (no IR)
    * 5240 MHz [48] (20.0 dBm) (no IR)
<br>
# 周波数情報のみ表示
sudo iw phy phy0 info | grep -A 20 Frequencies
# 出力例
Frequencies:
    * 2412.0 MHz [1] (20.0 dBm)
    * 2417.0 MHz [2] (20.0 dBm)
    * 2422.0 MHz [3] (20.0 dBm)
    * 2427.0 MHz [4] (20.0 dBm)
    * 2432.0 MHz [5] (20.0 dBm)
    * 2437.0 MHz [6] (20.0 dBm)
    * 2442.0 MHz [7] (20.0 dBm)
    * 2447.0 MHz [8] (20.0 dBm)
    * 2452.0 MHz [9] (20.0 dBm)
    * 2457.0 MHz [10] (20.0 dBm)
    * 2462.0 MHz [11] (20.0 dBm)
    * 2467.0 MHz [12] (20.0 dBm) (no IR)
    * 2472.0 MHz [13] (20.0 dBm) (no IR)
    * 2484.0 MHz [14] (disabled)
Frequencies:
    * 5180.0 MHz [36] (20.0 dBm) (no IR)
    * 5200.0 MHz [40] (20.0 dBm) (no IR)
    * 5220.0 MHz [44] (20.0 dBm) (no IR)
    * 5240.0 MHz [48] (20.0 dBm) (no IR)
    * 5260.0 MHz [52] (20.0 dBm) (no IR)
    * 5280.0 MHz [56] (20.0 dBm) (no IR)
    * 5300.0 MHz [60] (20.0 dBm) (no IR)
    * 5320.0 MHz [64] (20.0 dBm) (no IR)
    * 5500.0 MHz [100] (20.0 dBm) (no IR)
    * 5520.0 MHz [104] (20.0 dBm) (no IR)
    * 5540.0 MHz [108] (20.0 dBm) (no IR)
    * 5560.0 MHz [112] (20.0 dBm) (no IR)
    * 5580.0 MHz [116] (20.0 dBm) (no IR)
    * 5600.0 MHz [120] (20.0 dBm) (no IR)
    * 5620.0 MHz [124] (20.0 dBm) (no IR)
<br>
現在設定されている国コードを確認して、規制ドメインを確認する。<br>
国によってno IRフラグの有無が変わる。<br>
sudo iw reg get
# 出力の意味
## グローバル規制設定 (カーネルの規制データベースによる設定)
global
## 国コード : 00 = 未設定 (世界共通の制限的なデフォルト設定)
## DFS-UNSET = DFS (Dynamic Frequency Selection)が未設定
country 00: DFS-UNSET
        # 2.4GHz帯: 2402-2472 MHz (Wi-Fiチャネル1-13相当)
        # @40 = 最大40MHz幅, (6, 20) = 最小6dBm/最大20dBm (送信電力)
        # N/A = DFS待機時間なし
        (2402 - 2472 @ 40), (6, 20), (N/A)
        # 2.4GHz帯: 2457-2482 MHz (チャネル10-13の一部)
        # @20 = 最大20MHz幅
        # AUTO-BW = 帯域幅自動調整可能
        # PASSIVE-SCAN = パッシブスキャンのみ (アクティブスキャン禁止)
        (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
        # 2.4GHz帯: 2474-2494 MHz (チャネル14、日本など限定)
        # NO-OFDM = OFDM変調方式禁止 (レガシーモードのみ)
        (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
        # 5GHz帯: 5170-5250 MHz (U-NII-1バンド、屋内用)
        # @80 = 最大80MHz幅
        (5170 - 5250 @ 80), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
        # 5GHz帯: 5250-5330 MHz (U-NII-2Aバンド)
        # (0 ms) = DFS待機時間0ミリ秒
        # DFS = レーダー検出必須 (気象レーダーとの干渉回避)
        (5250 - 5330 @ 80), (6, 20), (0 ms), DFS, AUTO-BW, PASSIVE-SCAN
        # 5GHz帯: 5490-5730 MHz (U-NII-2C/U-NII-3バンド)
        # @160 = 最大160MHz幅 (Wi-Fi 6の広帯域対応)
        (5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
        # 5GHz帯: 5735-5835 MHz (U-NII-4バンド、ISMバンド)
        (5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
        # 60GHz帯: 57240-63720 MHz (WiGig/802.11ad/802.11ay用)
        # @2160 = 最大2160MHz幅 (ミリ波帯の広帯域通信)
        # (N/A, 0) = 送信電力規制なし
        (57240 - 63720 @ 2160), (N/A, 0), (N/A)
# 物理インターフェース#0 (無線LANデバイス自身が管理する設定)
# self-managed = デバイスファームウェアが独自に規制管理
phy#0 (self-managed)
# 国コード : 00 (デバイス側も未設定状態)
country 00: DFS-UNSET
        # 2.4GHz帯: 2402-2472 MHz
        # NO-80MHZ, NO-160MHZ = 80MHz幅・160MHz幅使用禁止 (2.4GHzでは通常40MHz上限)
        (2402 - 2472 @ 40), (6, 20), (N/A), NO-80MHZ, NO-160MHZ
        # 2.4GHz帯: 2457-2482 MHz
        (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ, PASSIVE-SCAN
        # 5GHz帯: 5170-5330 MHz (より広い範囲を一括設定)
        # デバイス側では@160を許可 (カーネル設定より柔軟)
        (5170 - 5330 @ 160), (6, 20), (N/A), PASSIVE-SCAN
        # 5GHz帯: 5490-5730 MHz
        (5490 - 5730 @ 160), (6, 20), (N/A), PASSIVE-SCAN
        # 5GHz帯: 5735-5895 MHz (globalより広い範囲)
        (5735 - 5895 @ 160), (6, 20), (N/A), PASSIVE-SCAN
<br>
no IR や PASSIVE-SCAN と表示されている周波数帯は、能動的な送信ができない。<br>
例えば、日本 (JP) の規制では、一部の5[GHz]帯チャンネルにno IRフラグが付いていることがある。<br>
<br>
正しい国コードが設定されていない場合は、以下に示すコマンドで設定できる。<br>
# 日本の場合
sudo iw reg set JP
<br><br>
 
== アクセスポイントの構築 (汎用) ==
アクセスポイントを構築する。<br>
また、OSの起動時にアクセスポイントを自動起動する。<br>
<br>
<br>
* con-name (Connection Name)
* con-name (Connection Name)
33行目: 164行目:
*: 外部からは見えない。
*: 外部からは見えない。
<br>
<br>
==== 一般的 ====
  sudo nmcli connection add \
  sudo nmcli connection add \
       type wifi \
       type wifi \
39行目: 169行目:
       con-name <任意のアクセスポイント名  例: my_access_point>
       con-name <任意のアクセスポイント名  例: my_access_point>
       autoconnect yes \
       autoconnect yes \
       ssid "<任意のSSID名 例: BananaPI-AP>"
       ssid "<任意のSSID名>"
<br>
<br>
APモードと周波数帯を設定する。<br>
APモードと周波数帯を設定する。<br>
84行目: 214行目:
これにより、PCやスマートフォンから設定したSSIDが確認できるようになり、設定したパスワードで接続することができる。<br>
これにより、PCやスマートフォンから設定したSSIDが確認できるようになり、設定したパスワードで接続することができる。<br>
アクセスポイントには自動的にIPアドレスが割り当てられ、接続したデバイスにはDHCPでIPアドレスが配布される。<br>
アクセスポイントには自動的にIPアドレスが割り当てられ、接続したデバイスにはDHCPでIPアドレスが配布される。<br>
<br>
<br><br>
==== Banana Pi F3 ====
 
== アクセスポイントの構築 (Banana Pi F3) ==
Banana Pi F3では、5[GHz]帯の全チャンネルに <u>no IR</u> フラグが付いている。<br>
Banana Pi F3では、5[GHz]帯の全チャンネルに <u>no IR</u> フラグが付いている。<br>
これは、Initiating Radiationが禁止されていることを意味しており、5[GHz]帯でのAPモードは使用できない。<br>
これは、Initiating Radiationが禁止されていることを意味しており、5[GHz]帯でのAPモードは使用できない。<br>
91行目: 222行目:
また、2.4[GHz]帯もチャンネル12〜13に <u>no IR</u> が付いているが、<u>チャンネル1〜11は使用可能</u> である。<br>
また、2.4[GHz]帯もチャンネル12〜13に <u>no IR</u> が付いているが、<u>チャンネル1〜11は使用可能</u> である。<br>
<br>
<br>
==== ブリッジモードとして構築する場合 ====
これは、上位ルータと同じネットワークセグメントに参加する形となる。<br>
<br>
ブリッジインターフェースを作成する。<br>
# ブリッジを作成
sudo nmcli connection add type bridge \
      ifname br0 \
      con-name br0 \
      autoconnect yes
<br>
# ブリッジのIPアドレスを設定 (上位ルータと同じネットワークセグメント)
sudo nmcli connection modify br0 \
      ipv4.method manual          \
      ipv4.addresses <Banana Pi F3のIPアドレス  例: 192.168.1.10/24> \
      ipv4.gateway <上位ルータのゲートウェイ  例: 192.168.1.1>      \
      ipv4.dns <上位ルータのDNS  例: 192.168.1.1>
<br>
有線LANをブリッジに接続する。<br>
# 現在の有線接続名を確認
nmcli connection show
# 有線接続 (end0) をブリッジのスレーブにする
sudo nmcli connection add \
      type bridge-slave    \
      ifname end0          \
      master br0          \
      con-name bridge-end0
<br>
Wi-Fiアクセスポイントをブリッジに接続する。<br>
# Wi-Fiアクセスポイント接続を作成
sudo nmcli connection add \
      type wifi            \
      ifname wlan0        \
      con-name <任意のアクセスポイント名  例: Banana-Pi-AP> \
      autoconnect yes      \
      ssid "<任意のSSID名  例: Banana-Pi-G>" \
      master br0          \
      slave-type bridge
# APモードと2.4[GHz]の設定
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
      802-11-wireless.mode ap \
      802-11-wireless.band bg \
      802-11-wireless.channel 6
<br>
アクセスポイントのセキュリティ設定を行う。<br>
* wpa-psk
*: WPA2-Personal (PSK : Pre-Shared Key)
* sae
*: WPA3-Personal (SAE : Simultaneous Authentication of Equals)
<br>
# WPA2のみ
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
      wifi-sec.key-mgmt wpa-psk    \
      wifi-sec.proto rsn            \
      wifi-sec.pairwise ccmp        \
      wifi-sec.group ccmp          \
      wifi-sec.psk "<SSIDのパスワード>"
# WPA3のみ
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
      wifi-sec.key-mgmt sae \
      wifi-sec.psk "<SSIDのパスワード>"
<br>
アクセスポイント接続を確認する。<br>
# ブリッジを起動
sudo nmcli connection up br0
# 有線接続を起動
sudo nmcli connection up bridge-end0
# アクセスポイントを起動
sudo nmcli connection up <任意のアクセスポイント名  例: Banana-Pi-AP>
<br>
アクセスポイントの状態を確認する。<br>
# ブリッジの状態確認
ip addr show br0
brctl show
# 接続状態確認
nmcli connection show --active
<br>
以下に示すコマンドを実行して、[type]が[AP]と表示されていれば正常に動作している。<br>
sudo iw dev wlan0 info
<br>
そして、PCやスマートフォン等のクライアントデバイスから、SSID名が表示されているかどうかを確認する。<br>
<br>
==== ブリッジモードの設定を削除する場合 ====
ブリッジ構成を全て削除する場合は、以下に示す順序で実行する。<br>
重要なことは、<u>子 (スレーブ) から先に削除して、最後に親 (ブリッジ本体) を削除する</u> ということである。<br>
<br>
まず、現在アクティブな接続を全て停止する。<br>
これは、接続が稼働中だと削除できない場合があるためである。<br>
# アクセスポイントを停止
sudo nmcli connection down Banana-Pi-AP
# 有線ブリッジスレーブを停止
sudo nmcli connection down bridge-end0
# ブリッジ本体を停止
sudo nmcli connection down br0
<br>
次に、接続設定を削除する。<br>
これは、ブリッジに接続されているスレーブデバイスから先に削除することが重要である。<br>
<u>親であるブリッジを先に削除しようとすると、スレーブが孤立してしまう可能性がある。</u><br>
# Wi-Fiアクセスポイント接続を削除
sudo nmcli connection delete <任意のアクセスポイント名  例: Banana-Pi-AP>
# 有線ブリッジスレーブ接続を削除
sudo nmcli connection delete bridge-end0
# ブリッジ本体を削除
sudo nmcli connection delete br0
<br>
削除が完了した後、システムに残っているブリッジインターフェース自体も確認して、必要に応じて削除する。<br>
# ブリッジインターフェースの確認
ip link show br0
# もしブリッジインターフェースが残っている場合は削除
sudo ip link delete br0
<br>
最後に、元の有線接続が正常に動作することを確認する。<br>
ブリッジスレーブとして設定される前の有線接続設定が残っている場合、それを再び有効にする必要がある。<br>
# 現在の接続一覧を確認
nmcli connection show
# 元の有線接続名 (例: end0 や Wired connection 1) を確認して起動
sudo nmcli connection up "<元の接続名  例: end0 や Wired connection 1>"
# または、有線接続を新たに作成する場合
sudo nmcli connection add \
      type ethernet \
      ifname end0 \
      con-name end0 \
      autoconnect yes
<br>
全ての設定が削除されたことを確認する。<br>
# 接続一覧を表示
# br0、bridge-end0、アクセスポイントト名等が存在しないことを確認
nmcli connection show
# デバイスの状態を確認
nmcli device status
# ブリッジが存在しないことを確認
brctl show
<br>
これにより、ブリッジ構成が全て削除され、有線LANとWi-Fiは独立したインターフェースとして動作するようになる。<br>
<br>
==== 別のネットワークセグメントとして構築する場合 ====
2.4[GHz]帯 (例: チャンネル6) でアクセスポイントを作成する。<br>
2.4[GHz]帯 (例: チャンネル6) でアクセスポイントを作成する。<br>
sudo nmcli connection add \
sudo nmcli connection add \
139行目: 422行目:
<br>
<br>
アクセスポイントを削除した後、インターフェースは通常の管理モードに戻り、Wi-Fiクライアントとして他のアクセスポイントに接続できるようになる。<br>
アクセスポイントを削除した後、インターフェースは通常の管理モードに戻り、Wi-Fiクライアントとして他のアクセスポイントに接続できるようになる。<br>
<br><br>
== WPA2 / WPA3混合モードを使用する場合 ==
WPA2とWPA3を同時に有効化する設定はトランジションモードや混合モードと呼ばれる設定であり、多くのWi-Fiモジュールとドライバでサポートされている。<br>
<br>
WPA3は2018年に登場した新しいセキュリティ規格であるが、全てのデバイスが対応しているわけではない。<br>
古いスマートフォンやIoTデバイス等はWPA2にしか対応していないことがある。<br>
混合モードを使用することにより、WPA3対応デバイスは最新のセキュリティで接続し、WPA2のみ対応のデバイスも同じアクセスポイントに接続できるようになる。<br>
<br>
まず、使用しているデバイスのハードウェアとドライバがWPA3をサポートしているかどうかを確認する。<br>
もし、SAEやWPA3に関する記述が見つからない場合、そのハードウェアまたはドライバでは混合モードがサポートされていない可能性が高い。<br>
# Wi-Fiドライバの詳細情報を確認
sudo iw list | grep -A 10 "Supported interface modes"
# SAE (WPA3) のサポート状況を確認
sudo iw list | grep -i sae
# 使用しているWi-Fiドライバを確認
sudo ethtool -i wlan0
<br>
次に、hostapdをインストールする。<br>
NetworkManagerがアクセスポイントを作成する時、内部でhostapdデーモンを使用している。<br>
<br>
hostapdは、Wi-Fiアクセスポイント機能の実装であり、WPA2 / WPA3混合モードを完全にサポートしている。<br>
NetworkManagerを経由せずにhostapdを直接設定することにより、細かい制御が可能になる。<br>
<br>
# RHEL
sudo dnf install hostapd
# SUSE
sudo zypper install hostapd
# Raspberry Pi / Banana Pi F3
sudo apt install hostapd
<br>
次に、hostapdの設定ファイルを作成する。<br>
sudo vi /etc/hostapd/hostapd.conf
# または
sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/
sudo vi /etc/hostapd/hostapd.conf
<br>
<syntaxhighlight lang="ini">
# hostapdアクセスポイント設定ファイル
# 基本インターフェース設定
# interface: Wi-Fiアクセスポイントとして使用する無線LANインターフェース名
# システム上の物理的なWi-Fiアダプタのデバイス名を指定する
# 通常、Linuxでは無線LANインターフェースはwlan0、wlan1などの名前で識別される
interface=wlan0
# bridge: アクセスポイントが参加するブリッジインターフェース名
# ブリッジを指定すると、無線LANと有線LANが同じネットワークセグメントで動作する
# これにより、無線接続したデバイスと有線接続したデバイスが直接通信可能になる
# 上位ルータのDHCPサーバーがクライアントにIPアドレスを配布する構成となる
bridge=br0
# ドライバ設定
# driver: 無線LANカードを制御するために使用するドライバタイプ
# nl80211は最新のLinuxカーネルが標準でサポートする無線LANドライバインターフェースである
# cfg80211/mac80211フレームワークを使用する現代的なWi-Fiドライバはすべてこれを使う
# 古いドライバ (hostap等) と比べて、より多くの機能とセキュリティオプションに対応している
driver=nl80211
# ネットワーク識別設定
# ssid: アクセスポイントの識別名 (Service Set Identifier)
# これがスマートフォンやPCのWi-Fi一覧に表示される名前になる
# 最大32文字まで設定可能で、日本語などのマルチバイト文字も使用できる
# ただし、一部の古いデバイスとの互換性を考慮すると、ASCII文字の使用が推奨される
ssid=<任意のSSID名  例: Banana-Pi>
# country_code: 無線LANの使用国コード (2文字のISO 3166-1コード)
# JPは日本を意味し、日本の電波法規制に準拠した動作を行うために必須である
# この設定により、使用可能なチャンネル、送信電力などが日本の法律に適合する
country_code=JP
# ieee80211d: 国コード情報をビーコンフレームで通知する機能の有効化
# 1に設定すると、アクセスポイントがビーコンで国コード情報をブロードキャストする
# これにより、接続するクライアントデバイスが適切な規制ドメインを認識できる
# 特に国際的に使用されるデバイスでは、この情報が重要になる
ieee80211d=1
# 無線周波数帯域設定
# hw_mode: 使用する無線LAN規格とハードウェアモード
# g: IEEE 802.11g (2.4[GHz]帯、最大54[Mbps]) を意味する
# このモードでは802.11b (最大11[Mbps]) との後方互換性も維持される
# 2.4[GHz]帯は壁などの障害物に強く、広範囲をカバーできる利点がある
# 一方、電子レンジやBluetoothなど他の機器との干渉を受けやすい特性もある
hw_mode=g
# channel: 使用する無線LANチャンネル番号
# 2.4[GHz]帯では、日本では1~13チャンネルが使用可能である (14チャンネルは特殊用途)
# チャンネル6は中央に位置し、周辺のWi-Fi環境によっては良好な選択となる
# ただし、実際の環境では近隣のアクセスポイントと干渉しないチャンネルを選ぶべきである
# チャンネル1、6、11は互いに干渉しにくいため、よく推奨される
channel=6
# セキュリティ設定 (WPA2 / WPA3混合モード)
# wpa: WPA (Wi-Fi Protected Access) のバージョン指定
# 1: WPA1のみ (非推奨、脆弱性があるため使用すべきではない)
# 2: WPA2のみ、またはWPA2とWPA3の混合モード
# 3: WPA1とWPA2の混合モード (非推奨)
# ここでは2を指定することで、WPA2とWPA3の両方をサポートする設定になる
wpa=2
# wpa_key_mgmt: 使用する鍵管理 (認証) 方式の指定
# WPA-PSK: WPA2-Personal (Pre-Shared Key) 方式
#          事前共有鍵 (パスワード) を使用する従来の認証方式である
#          2004年から広く使われており、ほぼすべてのデバイスが対応している
# SAE: WPA3-Personal (Simultaneous Authentication of Equals) 方式
#      2018年に導入された最新の認証方式で、以下の利点がある:
#      - オフライン辞書攻撃に対する耐性 (パスワードが弱くても比較的安全)
#      - Forward Secrecy (過去の通信が後から解読されるリスクの軽減)
#      - より強固な暗号学的基盤 (楕円曲線暗号の使用)
# 両方をスペース区切りで指定することで、トランジションモード (混合モード) となる
# これにより、WPA3対応デバイスは最新のセキュリティで接続し、
# WPA2のみ対応の古いデバイスも同じアクセスポイントに接続できる
wpa_key_mgmt=WPA-PSK SAE
# rsn_pairwise: ユニキャスト通信 (個別のデバイス間通信) に使用する暗号化方式
# CCMP: Counter mode with CBC-MAC Protocol (AES暗号化を使用)
#      WPA2とWPA3で標準的に使用される最も安全な暗号化方式である
#      古いTKIP (Temporal Key Integrity Protocol) は脆弱性があるため使用しない
# CCMPはAES-128ビット暗号化を使用し、現代の標準として十分な安全性を提供する
rsn_pairwise=CCMP
# wpa_passphrase: アクセスポイントへの接続に必要なパスワード (事前共有鍵)
# 8~63文字のASCII文字、または64文字の16進数文字列を指定できる
# セキュリティのため、以下のようなパスワードの選択が推奨される:
# - 最低でも8文字以上 (できれば20文字以上)
# - 大文字、小文字、数字、記号を混在させる
# - 辞書に載っている単語や個人情報を避ける
# - 他のサービスと同じパスワードを使い回さない
# WPA3のSAE認証では、パスワードが比較的弱くてもオフライン攻撃に強いが、
# それでも強力なパスワードを設定することが最善の実践である
wpa_passphrase=<SSIDのパスワード>
# WPA3 (SAE) の詳細設定
# sae_require_mfp: SAE接続で管理フレーム保護 (MFP: Management Frame Protection) を必須とするか
# 0: MFPを必須としない (オプション扱い)
# 1: MFPを必須とする
# WPA3の正式な仕様では、SAE認証を使用する場合MFPが必須である
# しかし、トランジションモード(WPA2/WPA3混合モード)では、
# WPA2のみ対応のデバイスとの互換性のため、0に設定することが一般的である
# WPA2デバイスの多くはMFPに対応していないため、1にすると接続できない可能性がある
sae_require_mfp=0
# ieee80211w: 管理フレーム保護 (PMF: Protected Management Frames) の設定
# 0: 無効 (管理フレームを暗号化しない)
# 1: オプション (対応デバイスのみ使用、非対応デバイスも接続可能)
# 2: 必須 (非対応デバイスは接続できない)
# 管理フレーム保護は、Deauthentication攻撃などの無線LAN攻撃を防ぐ機能である
# WPA3では本来必須だが、トランジションモードでWPA2デバイスとの互換性を保つため、
# セキュリティを最優先する場合は、1または2に設定することが推奨される
ieee80211w=0
# sae_pwe: SAE(WPA3)のパスワード要素(PWE: Password Element)導出方法
# 0: Hunting-and-Peckingアルゴリズムのみ(従来の方法)
# 1: Hash-to-Elementのみ(最新の方法、より安全だがデバイスサポートが限定的)
# 2: 両方をサポート(互換性モード)
# Hunting-and-Peckingは初期のWPA3実装で使用されていたが、
# タイミング攻撃への脆弱性が発見されたため、Hash-to-Elementが導入された
# 2を指定することで、新旧両方のデバイスと互換性を保ちながら、
# 新しいデバイスにはより安全な方式を使用できる
# これが最も互換性が高い設定であり、トランジションモードに適している
sae_pwe=2
</syntaxhighlight>
<br>
NetworkManagerのアクセスポイント接続を無効にして、hostapdを直接起動する。<br>
# NetworkManagerのアクセスポイントを停止
sudo nmcli connection down <任意のアクセスポイント名  例: Banana-Pi-AP>
# hostapdをテストモードで起動して設定を確認
sudo hostapd -dd /etc/hostapd/hostapd.conf
<br>
スマートフォン等の端末からSSIDが見えるかどうかを確認する。<br>
<br>
動作確認が完了した後、Systemdサービスとして自動起動するように設定する。<br>
# hostapdサービスを有効化
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
# 状態を確認
sudo systemctl status hostapd
<br>
ただし、この方法を使用する場合は、ブリッジインターフェースbr0の設定はNetworkManagerで管理し続けることができるが、アクセスポイントの管理はhostapdに委ねることになる。<br>
そのため、システム起動時の順序や依存関係に注意が必要となる。<br>
<br><br>
<br><br>



2025年12月1日 (月) 18:13時点における最新版

概要

NetworkManager (nmcliコマンド) を使用することにより、インターネット接続に依存しないアクセスポイントを数コマンドで作成することができる。

また、Banana Pi F3はRealtek RTL8852BSチップを搭載しており、2.4GHz / 5GHz WiFi 5 (802.11ax) と Bluetooth 5.2に対応しており、APモードをサポートしている。


必要なパッケージのインストール

# RHEL
sudo dnf install

# SUSE
sudo zypper install dnsmasq dnsmasq-utils

# Raspberry Pi / Banana Pi F3
sudo apt install dnsmasq-base



Wi-Fiインターフェース名の確認

一般的には、wlan0 という名前であることが多い。

ip link show
# または
nmcli device



no IRフラグ

no IRフラグ (no Initiating Radiation) がある場合、APとしての動作やアクティブスキャンができないため、接続に問題が生じることがある。

各周波数帯とそれに付与されているno IRフラグを確認する。

# 詳細な情報を表示
sudo iw list

# 出力例
Frequencies:
   * 5180 MHz [36] (20.0 dBm)
   * 5200 MHz [40] (20.0 dBm)
   * 5220 MHz [44] (20.0 dBm) (no IR)
   * 5240 MHz [48] (20.0 dBm) (no IR)


# 周波数情報のみ表示
sudo iw phy phy0 info | grep -A 20 Frequencies

# 出力例
Frequencies:
   * 2412.0 MHz [1] (20.0 dBm)
   * 2417.0 MHz [2] (20.0 dBm)
   * 2422.0 MHz [3] (20.0 dBm)
   * 2427.0 MHz [4] (20.0 dBm)
   * 2432.0 MHz [5] (20.0 dBm)
   * 2437.0 MHz [6] (20.0 dBm)
   * 2442.0 MHz [7] (20.0 dBm)
   * 2447.0 MHz [8] (20.0 dBm)
   * 2452.0 MHz [9] (20.0 dBm)
   * 2457.0 MHz [10] (20.0 dBm)
   * 2462.0 MHz [11] (20.0 dBm)
   * 2467.0 MHz [12] (20.0 dBm) (no IR)
   * 2472.0 MHz [13] (20.0 dBm) (no IR)
   * 2484.0 MHz [14] (disabled)

Frequencies:
   * 5180.0 MHz [36] (20.0 dBm) (no IR)
   * 5200.0 MHz [40] (20.0 dBm) (no IR)
   * 5220.0 MHz [44] (20.0 dBm) (no IR)
   * 5240.0 MHz [48] (20.0 dBm) (no IR)
   * 5260.0 MHz [52] (20.0 dBm) (no IR)
   * 5280.0 MHz [56] (20.0 dBm) (no IR)
   * 5300.0 MHz [60] (20.0 dBm) (no IR)
   * 5320.0 MHz [64] (20.0 dBm) (no IR)
   * 5500.0 MHz [100] (20.0 dBm) (no IR)
   * 5520.0 MHz [104] (20.0 dBm) (no IR)
   * 5540.0 MHz [108] (20.0 dBm) (no IR)
   * 5560.0 MHz [112] (20.0 dBm) (no IR)
   * 5580.0 MHz [116] (20.0 dBm) (no IR)
   * 5600.0 MHz [120] (20.0 dBm) (no IR)
   * 5620.0 MHz [124] (20.0 dBm) (no IR)


現在設定されている国コードを確認して、規制ドメインを確認する。
国によってno IRフラグの有無が変わる。

sudo iw reg get

# 出力の意味
## グローバル規制設定 (カーネルの規制データベースによる設定)
global

## 国コード : 00 = 未設定 (世界共通の制限的なデフォルト設定)
## DFS-UNSET = DFS (Dynamic Frequency Selection)が未設定
country 00: DFS-UNSET

       # 2.4GHz帯: 2402-2472 MHz (Wi-Fiチャネル1-13相当)
       # @40 = 最大40MHz幅, (6, 20) = 最小6dBm/最大20dBm (送信電力)
       # N/A = DFS待機時間なし
       (2402 - 2472 @ 40), (6, 20), (N/A)

       # 2.4GHz帯: 2457-2482 MHz (チャネル10-13の一部)
       # @20 = 最大20MHz幅
       # AUTO-BW = 帯域幅自動調整可能
       # PASSIVE-SCAN = パッシブスキャンのみ (アクティブスキャン禁止)
       (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN

       # 2.4GHz帯: 2474-2494 MHz (チャネル14、日本など限定)
       # NO-OFDM = OFDM変調方式禁止 (レガシーモードのみ)
       (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN

       # 5GHz帯: 5170-5250 MHz (U-NII-1バンド、屋内用)
       # @80 = 最大80MHz幅
       (5170 - 5250 @ 80), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN

       # 5GHz帯: 5250-5330 MHz (U-NII-2Aバンド)
       # (0 ms) = DFS待機時間0ミリ秒
       # DFS = レーダー検出必須 (気象レーダーとの干渉回避)
       (5250 - 5330 @ 80), (6, 20), (0 ms), DFS, AUTO-BW, PASSIVE-SCAN

       # 5GHz帯: 5490-5730 MHz (U-NII-2C/U-NII-3バンド)
       # @160 = 最大160MHz幅 (Wi-Fi 6の広帯域対応)
       (5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN

       # 5GHz帯: 5735-5835 MHz (U-NII-4バンド、ISMバンド)
       (5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN

       # 60GHz帯: 57240-63720 MHz (WiGig/802.11ad/802.11ay用)
       # @2160 = 最大2160MHz幅 (ミリ波帯の広帯域通信)
       # (N/A, 0) = 送信電力規制なし
       (57240 - 63720 @ 2160), (N/A, 0), (N/A)

# 物理インターフェース#0 (無線LANデバイス自身が管理する設定)
# self-managed = デバイスファームウェアが独自に規制管理
phy#0 (self-managed)

# 国コード : 00 (デバイス側も未設定状態)
country 00: DFS-UNSET

       # 2.4GHz帯: 2402-2472 MHz
       # NO-80MHZ, NO-160MHZ = 80MHz幅・160MHz幅使用禁止 (2.4GHzでは通常40MHz上限)
       (2402 - 2472 @ 40), (6, 20), (N/A), NO-80MHZ, NO-160MHZ

       # 2.4GHz帯: 2457-2482 MHz
       (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, NO-80MHZ, NO-160MHZ, PASSIVE-SCAN

       # 5GHz帯: 5170-5330 MHz (より広い範囲を一括設定)
       # デバイス側では@160を許可 (カーネル設定より柔軟)
       (5170 - 5330 @ 160), (6, 20), (N/A), PASSIVE-SCAN

       # 5GHz帯: 5490-5730 MHz
       (5490 - 5730 @ 160), (6, 20), (N/A), PASSIVE-SCAN

       # 5GHz帯: 5735-5895 MHz (globalより広い範囲)
       (5735 - 5895 @ 160), (6, 20), (N/A), PASSIVE-SCAN


no IR や PASSIVE-SCAN と表示されている周波数帯は、能動的な送信ができない。
例えば、日本 (JP) の規制では、一部の5[GHz]帯チャンネルにno IRフラグが付いていることがある。

正しい国コードが設定されていない場合は、以下に示すコマンドで設定できる。

# 日本の場合
sudo iw reg set JP



アクセスポイントの構築 (汎用)

アクセスポイントを構築する。
また、OSの起動時にアクセスポイントを自動起動する。

  • con-name (Connection Name)
    NetworkManager内部の接続プロファイル名のこと。
    システム内部で設定を管理するための名前である。
    外部からは見えない。


sudo nmcli connection add \
     type wifi \
     ifname <Wi-Fiインターフェース名  例: wlan0> \
     con-name <任意のアクセスポイント名  例: my_access_point>
     autoconnect yes \
     ssid "<任意のSSID名>"


APモードと周波数帯を設定する。
b/gは、2.4[GHz]帯である。

sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     802-11-wireless.mode ap \
     802-11-wireless.band bg \
     ipv4.method shared


WPA2 / WPA3等のセキュリティを設定する。

  • WPA2 + WPA3 Personal
sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     wifi-sec.key-mgmt wpa-psk


  • WPA3 Personalのみ
sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     wifi-sec.key-mgmt sae


  • WPA2 (暗号化プロトコルと暗号化方式を明示的に指定)
sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     wifi-sec.key-mgmt wpa-psk \
     wifi-sec.proto rsn \           # WPA2を明示 (rsnはRobust Security Network)
     wifi-sec.pairwise ccmp \       # 暗号化方式(AES-CCMP)
     wifi-sec.group ccmp            # グループ暗号化方式


パスワード (8文字以上) を設定する。

sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     wifi-sec.psk "<パスワード>"


アクセスポイントを起動する。

sudo nmcli connection up <任意のアクセスポイント名  例: my_access_point>


接続状態を確認する。

sudo nmcli connection show


APが動作しているかどうかを確認する。

sudo nmcli device status


これにより、PCやスマートフォンから設定したSSIDが確認できるようになり、設定したパスワードで接続することができる。
アクセスポイントには自動的にIPアドレスが割り当てられ、接続したデバイスにはDHCPでIPアドレスが配布される。


アクセスポイントの構築 (Banana Pi F3)

Banana Pi F3では、5[GHz]帯の全チャンネルに no IR フラグが付いている。
これは、Initiating Radiationが禁止されていることを意味しており、5[GHz]帯でのAPモードは使用できない。

また、2.4[GHz]帯もチャンネル12〜13に no IR が付いているが、チャンネル1〜11は使用可能 である。

ブリッジモードとして構築する場合

これは、上位ルータと同じネットワークセグメントに参加する形となる。

ブリッジインターフェースを作成する。

# ブリッジを作成
sudo nmcli connection add type bridge \
     ifname br0 \
     con-name br0 \
     autoconnect yes


# ブリッジのIPアドレスを設定 (上位ルータと同じネットワークセグメント)
sudo nmcli connection modify br0 \
     ipv4.method manual          \
     ipv4.addresses <Banana Pi F3のIPアドレス  例: 192.168.1.10/24> \
     ipv4.gateway <上位ルータのゲートウェイ  例: 192.168.1.1>       \
     ipv4.dns <上位ルータのDNS  例: 192.168.1.1>


有線LANをブリッジに接続する。

# 現在の有線接続名を確認
nmcli connection show

# 有線接続 (end0) をブリッジのスレーブにする
sudo nmcli connection add \
     type bridge-slave    \
     ifname end0          \
     master br0           \
     con-name bridge-end0


Wi-Fiアクセスポイントをブリッジに接続する。

# Wi-Fiアクセスポイント接続を作成
sudo nmcli connection add \
     type wifi            \
     ifname wlan0         \
     con-name <任意のアクセスポイント名  例: Banana-Pi-AP> \
     autoconnect yes      \
     ssid "<任意のSSID名  例: Banana-Pi-G>" \
     master br0           \
     slave-type bridge

# APモードと2.4[GHz]の設定
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
     802-11-wireless.mode ap \
     802-11-wireless.band bg \
     802-11-wireless.channel 6


アクセスポイントのセキュリティ設定を行う。

  • wpa-psk
    WPA2-Personal (PSK : Pre-Shared Key)
  • sae
    WPA3-Personal (SAE : Simultaneous Authentication of Equals)


# WPA2のみ
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
     wifi-sec.key-mgmt wpa-psk     \
     wifi-sec.proto rsn            \
     wifi-sec.pairwise ccmp        \
     wifi-sec.group ccmp           \
     wifi-sec.psk "<SSIDのパスワード>"

# WPA3のみ
sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
     wifi-sec.key-mgmt sae \
     wifi-sec.psk "<SSIDのパスワード>"


アクセスポイント接続を確認する。

# ブリッジを起動
sudo nmcli connection up br0

# 有線接続を起動
sudo nmcli connection up bridge-end0

# アクセスポイントを起動
sudo nmcli connection up <任意のアクセスポイント名  例: Banana-Pi-AP>


アクセスポイントの状態を確認する。

# ブリッジの状態確認
ip addr show br0
brctl show

# 接続状態確認
nmcli connection show --active


以下に示すコマンドを実行して、[type]が[AP]と表示されていれば正常に動作している。

sudo iw dev wlan0 info


そして、PCやスマートフォン等のクライアントデバイスから、SSID名が表示されているかどうかを確認する。

ブリッジモードの設定を削除する場合

ブリッジ構成を全て削除する場合は、以下に示す順序で実行する。
重要なことは、子 (スレーブ) から先に削除して、最後に親 (ブリッジ本体) を削除する ということである。

まず、現在アクティブな接続を全て停止する。
これは、接続が稼働中だと削除できない場合があるためである。

# アクセスポイントを停止
sudo nmcli connection down Banana-Pi-AP

# 有線ブリッジスレーブを停止
sudo nmcli connection down bridge-end0

# ブリッジ本体を停止
sudo nmcli connection down br0


次に、接続設定を削除する。
これは、ブリッジに接続されているスレーブデバイスから先に削除することが重要である。
親であるブリッジを先に削除しようとすると、スレーブが孤立してしまう可能性がある。

# Wi-Fiアクセスポイント接続を削除
sudo nmcli connection delete <任意のアクセスポイント名  例: Banana-Pi-AP>

# 有線ブリッジスレーブ接続を削除
sudo nmcli connection delete bridge-end0

# ブリッジ本体を削除
sudo nmcli connection delete br0


削除が完了した後、システムに残っているブリッジインターフェース自体も確認して、必要に応じて削除する。

# ブリッジインターフェースの確認
ip link show br0

# もしブリッジインターフェースが残っている場合は削除
sudo ip link delete br0


最後に、元の有線接続が正常に動作することを確認する。
ブリッジスレーブとして設定される前の有線接続設定が残っている場合、それを再び有効にする必要がある。

# 現在の接続一覧を確認
nmcli connection show

# 元の有線接続名 (例: end0 や Wired connection 1) を確認して起動
sudo nmcli connection up "<元の接続名  例: end0 や Wired connection 1>"

# または、有線接続を新たに作成する場合
sudo nmcli connection add \
     type ethernet \
     ifname end0 \
     con-name end0 \
     autoconnect yes


全ての設定が削除されたことを確認する。

# 接続一覧を表示
# br0、bridge-end0、アクセスポイントト名等が存在しないことを確認
nmcli connection show

# デバイスの状態を確認
nmcli device status

# ブリッジが存在しないことを確認
brctl show


これにより、ブリッジ構成が全て削除され、有線LANとWi-Fiは独立したインターフェースとして動作するようになる。

別のネットワークセグメントとして構築する場合

2.4[GHz]帯 (例: チャンネル6) でアクセスポイントを作成する。
sudo nmcli connection add \

    type wifi \
    ifname wlan0 \
    con-name <任意のアクセスポイント名  例: Banana-Pi-AP> \
    autoconnect yes \
    ssid "<任意のSSID名  例: Banana-PI-G>"


APモードと2.4[GHz] Wi-Fi 6を設定する。

sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
     802-11-wireless.mode ap \
     802-11-wireless.band bg \
     802-11-wireless.channel 6 \
     ipv4.method shared \
     ipv4.addresses 192.168.50.1/24


WPA2 + WPA3に対応する。

sudo nmcli connection modify <任意のアクセスポイント名  例: Banana-Pi-AP> \
     wifi-sec.key-mgmt wpa-psk \
     wifi-sec.proto rsn \
     wifi-sec.pairwise ccmp \
     wifi-sec.group ccmp \
     wifi-sec.psk "<任意のパスワード>"


アクセスポイントを起動する。

sudo nmcli connection up <任意のアクセスポイント名  例: Banana-Pi-AP>



アクセスポイントの削除

アクセスポイントを削除する場合は、以下に示すコマンドを実行する。

アクセスポイント接続を停止する。

sudo nmcli connection down <任意のアクセスポイント名  例: Banana-Pi-AP>


アクセスポイント接続を削除する。

sudo nmcli connection delete <任意のアクセスポイント名  例: Banana-Pi-AP>


または、1つのコマンドで削除することもできる。(自動的に停止される)

sudo nmcli connection delete <任意のアクセスポイント名  例: Banana-Pi-AP>


アクセスポイントが削除されたかどうかを確認する。

# 全ての接続を表示
nmcli connection show

# インターフェースの状態を確認
nmcli device status


アクセスポイントを削除した後、インターフェースは通常の管理モードに戻り、Wi-Fiクライアントとして他のアクセスポイントに接続できるようになる。


WPA2 / WPA3混合モードを使用する場合

WPA2とWPA3を同時に有効化する設定はトランジションモードや混合モードと呼ばれる設定であり、多くのWi-Fiモジュールとドライバでサポートされている。

WPA3は2018年に登場した新しいセキュリティ規格であるが、全てのデバイスが対応しているわけではない。
古いスマートフォンやIoTデバイス等はWPA2にしか対応していないことがある。
混合モードを使用することにより、WPA3対応デバイスは最新のセキュリティで接続し、WPA2のみ対応のデバイスも同じアクセスポイントに接続できるようになる。

まず、使用しているデバイスのハードウェアとドライバがWPA3をサポートしているかどうかを確認する。
もし、SAEやWPA3に関する記述が見つからない場合、そのハードウェアまたはドライバでは混合モードがサポートされていない可能性が高い。

# Wi-Fiドライバの詳細情報を確認
sudo iw list | grep -A 10 "Supported interface modes"

# SAE (WPA3) のサポート状況を確認
sudo iw list | grep -i sae

# 使用しているWi-Fiドライバを確認
sudo ethtool -i wlan0


次に、hostapdをインストールする。
NetworkManagerがアクセスポイントを作成する時、内部でhostapdデーモンを使用している。

hostapdは、Wi-Fiアクセスポイント機能の実装であり、WPA2 / WPA3混合モードを完全にサポートしている。
NetworkManagerを経由せずにhostapdを直接設定することにより、細かい制御が可能になる。

# RHEL
sudo dnf install hostapd

# SUSE
sudo zypper install hostapd

# Raspberry Pi / Banana Pi F3
sudo apt install hostapd


次に、hostapdの設定ファイルを作成する。

sudo vi /etc/hostapd/hostapd.conf

# または

sudo cp /usr/share/doc/hostapd/examples/hostapd.conf /etc/hostapd/
sudo vi /etc/hostapd/hostapd.conf


 # hostapdアクセスポイント設定ファイル
 
 # 基本インターフェース設定
 
 # interface: Wi-Fiアクセスポイントとして使用する無線LANインターフェース名
 # システム上の物理的なWi-Fiアダプタのデバイス名を指定する
 # 通常、Linuxでは無線LANインターフェースはwlan0、wlan1などの名前で識別される
 interface=wlan0
 
 # bridge: アクセスポイントが参加するブリッジインターフェース名
 # ブリッジを指定すると、無線LANと有線LANが同じネットワークセグメントで動作する
 # これにより、無線接続したデバイスと有線接続したデバイスが直接通信可能になる
 # 上位ルータのDHCPサーバーがクライアントにIPアドレスを配布する構成となる
 bridge=br0
 
 # ドライバ設定
 
 # driver: 無線LANカードを制御するために使用するドライバタイプ
 # nl80211は最新のLinuxカーネルが標準でサポートする無線LANドライバインターフェースである
 # cfg80211/mac80211フレームワークを使用する現代的なWi-Fiドライバはすべてこれを使う
 # 古いドライバ (hostap等) と比べて、より多くの機能とセキュリティオプションに対応している
 driver=nl80211
 
 # ネットワーク識別設定
 
 # ssid: アクセスポイントの識別名 (Service Set Identifier)
 # これがスマートフォンやPCのWi-Fi一覧に表示される名前になる
 # 最大32文字まで設定可能で、日本語などのマルチバイト文字も使用できる
 # ただし、一部の古いデバイスとの互換性を考慮すると、ASCII文字の使用が推奨される
 ssid=<任意のSSID名  例: Banana-Pi>
 
 # country_code: 無線LANの使用国コード (2文字のISO 3166-1コード)
 # JPは日本を意味し、日本の電波法規制に準拠した動作を行うために必須である
 # この設定により、使用可能なチャンネル、送信電力などが日本の法律に適合する
 country_code=JP
 
 # ieee80211d: 国コード情報をビーコンフレームで通知する機能の有効化
 # 1に設定すると、アクセスポイントがビーコンで国コード情報をブロードキャストする
 # これにより、接続するクライアントデバイスが適切な規制ドメインを認識できる
 # 特に国際的に使用されるデバイスでは、この情報が重要になる
 ieee80211d=1
 
 # 無線周波数帯域設定
 
 # hw_mode: 使用する無線LAN規格とハードウェアモード
 # g: IEEE 802.11g (2.4[GHz]帯、最大54[Mbps]) を意味する
 # このモードでは802.11b (最大11[Mbps]) との後方互換性も維持される
 # 2.4[GHz]帯は壁などの障害物に強く、広範囲をカバーできる利点がある
 # 一方、電子レンジやBluetoothなど他の機器との干渉を受けやすい特性もある
 hw_mode=g
 
 # channel: 使用する無線LANチャンネル番号
 # 2.4[GHz]帯では、日本では1~13チャンネルが使用可能である (14チャンネルは特殊用途)
 # チャンネル6は中央に位置し、周辺のWi-Fi環境によっては良好な選択となる
 # ただし、実際の環境では近隣のアクセスポイントと干渉しないチャンネルを選ぶべきである
 # チャンネル1、6、11は互いに干渉しにくいため、よく推奨される
 channel=6
 
 # セキュリティ設定 (WPA2 / WPA3混合モード)
 
 # wpa: WPA (Wi-Fi Protected Access) のバージョン指定
 # 1: WPA1のみ (非推奨、脆弱性があるため使用すべきではない)
 # 2: WPA2のみ、またはWPA2とWPA3の混合モード
 # 3: WPA1とWPA2の混合モード (非推奨)
 # ここでは2を指定することで、WPA2とWPA3の両方をサポートする設定になる
 wpa=2
 
 # wpa_key_mgmt: 使用する鍵管理 (認証) 方式の指定
 # WPA-PSK: WPA2-Personal (Pre-Shared Key) 方式
 #          事前共有鍵 (パスワード) を使用する従来の認証方式である
 #          2004年から広く使われており、ほぼすべてのデバイスが対応している
 # SAE: WPA3-Personal (Simultaneous Authentication of Equals) 方式
 #      2018年に導入された最新の認証方式で、以下の利点がある:
 #      - オフライン辞書攻撃に対する耐性 (パスワードが弱くても比較的安全)
 #      - Forward Secrecy (過去の通信が後から解読されるリスクの軽減)
 #      - より強固な暗号学的基盤 (楕円曲線暗号の使用)
 # 両方をスペース区切りで指定することで、トランジションモード (混合モード) となる
 # これにより、WPA3対応デバイスは最新のセキュリティで接続し、
 # WPA2のみ対応の古いデバイスも同じアクセスポイントに接続できる
 wpa_key_mgmt=WPA-PSK SAE
 
 # rsn_pairwise: ユニキャスト通信 (個別のデバイス間通信) に使用する暗号化方式
 # CCMP: Counter mode with CBC-MAC Protocol (AES暗号化を使用)
 #       WPA2とWPA3で標準的に使用される最も安全な暗号化方式である
 #       古いTKIP (Temporal Key Integrity Protocol) は脆弱性があるため使用しない
 # CCMPはAES-128ビット暗号化を使用し、現代の標準として十分な安全性を提供する
 rsn_pairwise=CCMP
 
 # wpa_passphrase: アクセスポイントへの接続に必要なパスワード (事前共有鍵)
 # 8~63文字のASCII文字、または64文字の16進数文字列を指定できる
 # セキュリティのため、以下のようなパスワードの選択が推奨される:
 # - 最低でも8文字以上 (できれば20文字以上)
 # - 大文字、小文字、数字、記号を混在させる
 # - 辞書に載っている単語や個人情報を避ける
 # - 他のサービスと同じパスワードを使い回さない
 # WPA3のSAE認証では、パスワードが比較的弱くてもオフライン攻撃に強いが、
 # それでも強力なパスワードを設定することが最善の実践である
 wpa_passphrase=<SSIDのパスワード>
 
 # WPA3 (SAE) の詳細設定
 
 # sae_require_mfp: SAE接続で管理フレーム保護 (MFP: Management Frame Protection) を必須とするか
 # 0: MFPを必須としない (オプション扱い)
 # 1: MFPを必須とする
 # WPA3の正式な仕様では、SAE認証を使用する場合MFPが必須である
 # しかし、トランジションモード(WPA2/WPA3混合モード)では、
 # WPA2のみ対応のデバイスとの互換性のため、0に設定することが一般的である
 # WPA2デバイスの多くはMFPに対応していないため、1にすると接続できない可能性がある
 sae_require_mfp=0
 
 # ieee80211w: 管理フレーム保護 (PMF: Protected Management Frames) の設定
 # 0: 無効 (管理フレームを暗号化しない)
 # 1: オプション (対応デバイスのみ使用、非対応デバイスも接続可能)
 # 2: 必須 (非対応デバイスは接続できない)
 # 管理フレーム保護は、Deauthentication攻撃などの無線LAN攻撃を防ぐ機能である
 # WPA3では本来必須だが、トランジションモードでWPA2デバイスとの互換性を保つため、
 # セキュリティを最優先する場合は、1または2に設定することが推奨される
 ieee80211w=0
 
 # sae_pwe: SAE(WPA3)のパスワード要素(PWE: Password Element)導出方法
 # 0: Hunting-and-Peckingアルゴリズムのみ(従来の方法)
 # 1: Hash-to-Elementのみ(最新の方法、より安全だがデバイスサポートが限定的)
 # 2: 両方をサポート(互換性モード)
 # Hunting-and-Peckingは初期のWPA3実装で使用されていたが、
 # タイミング攻撃への脆弱性が発見されたため、Hash-to-Elementが導入された
 # 2を指定することで、新旧両方のデバイスと互換性を保ちながら、
 # 新しいデバイスにはより安全な方式を使用できる
 # これが最も互換性が高い設定であり、トランジションモードに適している
 sae_pwe=2


NetworkManagerのアクセスポイント接続を無効にして、hostapdを直接起動する。

# NetworkManagerのアクセスポイントを停止
sudo nmcli connection down <任意のアクセスポイント名  例: Banana-Pi-AP>

# hostapdをテストモードで起動して設定を確認
sudo hostapd -dd /etc/hostapd/hostapd.conf


スマートフォン等の端末からSSIDが見えるかどうかを確認する。

動作確認が完了した後、Systemdサービスとして自動起動するように設定する。

# hostapdサービスを有効化
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

# 状態を確認
sudo systemctl status hostapd


ただし、この方法を使用する場合は、ブリッジインターフェースbr0の設定はNetworkManagerで管理し続けることができるが、アクセスポイントの管理はhostapdに委ねることになる。
そのため、システム起動時の順序や依存関係に注意が必要となる。


設定のカスタマイズ

5[GHz]帯を使用する場合

sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     802-11-wireless.band a


チャンネルを指定する場合

  • 2.4[GHz]の場合 (チャンネル1〜11)
sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     802-11-wireless.channel 6


  • 5[GHz]の場合 (チャンネル36, 40, 44, 48等)
sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     802-11-wireless.channel 36


IPアドレス範囲を変更する場合

sudo nmcli connection modify \
     <任意のアクセスポイント名  例: my_access_point> \
     ipv4.addresses 192.168.50.1/24



トラブルシューティング

アクセスポイントが起動しない場合

既存の接続を削除する。

sudo nmcli connection delete <任意のアクセスポイント名  例: my_access_point>


NetworkManagerを再起動する。

sudo systemctl restart NetworkManager


再度設定を実行する。