少し特殊な用途ですが、MacBook ProをLinuxルータ兼Wi-Fi APとして使う場合の記録です。
今回は MacBookPro14,2 (2017, 13-inch) に Ubuntu 24.04 をインストールし、内蔵Broadcom無線LANを hostapd でアクセスポイント化しました。
なお、本記事はhostapdの設定に焦点を当てています。br0 の作成やIPアドレス設定などのブリッジ構成については扱いません。
環境
- MacBookPro14,2
- Ubuntu 24.04 LTS
- hostapd
- 無線IF :
wlp2s0 - 有線IF :
enx68da73adde3c bridge=br0
hostapd は nl80211 ドライバを使用します。現在のLinuxでは mac80211/cfg80211 ベースのドライバでは通常 nl80211 を指定します。(Linux Wireless Documentation)
hostapd.conf
最終的に安定した設定は次のようになりました。
interface=wlp2s0
bridge=br0
driver=nl80211
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=YOUR_SSID
ignore_broadcast_ssid=1
auth_algs=1
country_code=JP
ieee80211d=1
hw_mode=a
channel=36
wmm_enabled=1
ieee80211n=1
ieee80211ac=1
# この環境では有効にすると起動できなかった
# ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
# vht_oper_chwidth=1
# vht_oper_centr_freq_seg0_idx=42
wpa=2
wpa_key_mgmt=WPA-PSK SAE
rsn_pairwise=CCMP
wpa_passphrase=YOUR_PASSWORD
ieee80211w=1
sae_require_mfp=1
各設定の説明
bridge
bridge=br0
無線クライアントを有線LANと同一L2セグメントへ参加させます。
DHCPも既存LANから取得できるため、hostapd側でDHCPサーバを動かす必要はありません。Linux Wirelessのhostapdドキュメントでも、ブリッジ構成では bridge= を設定する例が示されています。(Linux Wireless Documentation)
5 GHz固定
hw_mode=a
channel=36
5 GHz帯で動作させます。
今回はDFS不要なW52帯を使用しました。
日本の電波法設定
country_code=JP
ieee80211d=1
country_code は必ず設定します。
これを設定しないと利用可能チャネルが制限されることがあります。
WPA2/WPA3共存
wpa=2
wpa_key_mgmt=WPA-PSK SAE
この設定で
- WPA2-Personal
- WPA3-Personal(SAE)
の両方を受け付けます。
新しい端末はWPA3で接続し、
古い端末はWPA2で接続します。(Git TI)
AESのみ
rsn_pairwise=CCMP
TKIPは使用せず、AES(CCMP)のみ許可します。
PMF
ieee80211w=1
sae_require_mfp=1
PMF(Protected Management Frames)は
- WPA2では任意
- WPA3では必須
となります。
WPA2との互換性を保ちながらWPA3の要件を満たす設定です。(Git TI)
SSIDを隠す
ignore_broadcast_ssid=1
SSIDをビーコンへ載せません。
ただし、
- セキュリティ向上効果はほぼ無い
- 手動設定が必要
- 一部機器で接続性が悪くなる
というデメリットがあります。
起動
デバッグ付きで起動する場合は
sudo hostapd -dd /etc/hostapd/hostapd.conf
正常に起動すると
wlp2s0: AP-ENABLED
が表示されます。hostapdは -d や -dd オプションで詳細なデバッグログを出力できます。(Ubuntu Manpages)
40 MHz / 80 MHzが使えなかった
最初は
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40]
ieee80211ac=1
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42
を設定していました。
しかし起動時に
Could not set channel for kernel driver
で失敗しました。
ログには
80/80+80 MHz: no second channel offset
とも表示されました。
iw listではHT40/VHT対応と表示される
iw list の出力では
Band 2
HT20/HT40
VHT Capabilities
となっていました。
一見すると40 MHzや802.11acのAPが動作しそうに見えます。
しかし実際には
ht_capab=[HT40+]
を指定すると起動できませんでした。
HT40を外すと起動する
最終的に
ieee80211n=1
ieee80211ac=1
だけ残し
# ht_capab=[HT40+]
を削除すると正常起動しました。
つまりこの環境では
- APモード
- 5 GHz
- WPA2/WPA3
- 802.11ac有効
は問題なく利用できますが、
HT40およびVHT80のチャネル設定はドライバまたはファームウェア側で利用できませんでした。
Linux Wirelessのドキュメントでも、80 MHz動作には HT40+ とVHTチャネル設定の組み合わせが必要であり、ドライバや規制データベースによってはチャネル設定に失敗することがあります。(Linux Wireless Documentation)
最終的な構成
最終的には
- 5 GHz
- チャネル36
- 20 MHz幅
- WPA2/WPA3移行モード
- AES(CCMP)のみ
- PMF有効
- ブリッジ接続
- ステルスSSID
という構成で安定して動作しています。
速度は40 MHzや80 MHz運用より控えめですが、MacBookPro14,2 + Ubuntu 24.04の環境では安定性を優先するならこの設定が実用的でした。