Raspberry Pi4(Buster) に NetworkManager を導入して wlan0 をアクセスポイントにしようと思ったら思いの外嵌ってしまった。参考資料がほとんどなかったのでメモしておきます。
ことの経緯
今までは hostapd やら isc-dhcp-server やらを導入してアクセスポイントを構成していたが、(デフォルトではないものの)Buster になって NetworkManager が使える様になった。(前から使えていたのかな??)
これで Ubuntu と同様にアクセスポイントを構成できる!と思ったのもつかの間、細かな点に相異があり、気をつけるべきポイントが多々あった。
Network Manager の導入
これ自身はパッケージになっているので簡単。
sudo apt install network-manager
先に行く前に
dhcpcd5 を削除しないと競合する様だ。
sudo apt remove dhcpcd5
/etc/dnsmasq.conf
の設定
bind-interfaces
を追加する。でも後で ps ax
してみると、この設定見ていないっぽい...
NetworkManager.conf
にdnsmasqの項目を追加する。
[main]
dns=dnsmasq
とりあえず NetworkManager を上げる
/etc/wpa_supplicant/wpa_supplicant.conf
にクライアントモードの設定が残っていたら削除する。/sbin/wpa_supplicant
が上がっていたら kill
で落とした方が良いかも。
後、dnsmasq
が上がっていたら kill
しないとポート53を占有してこの後の作業に支障が出るので落としておく。
アクセスポイントを構成するには NetworkManager を上げる必要があるため、
sudo systemctl restart NetworkManager
で起動する。
アクセスポイントを作成する
以下のコマンドでアクセスポイントを作成する。
sudo nmcli device wifi hotspot ifnamne wlan0 ssid "MySSID" password "MyPassword"
sudo nmcli connection modify Hotspot autoconnect yes
sudo nmcli connection modify Hotspot ipv4.addresses 192.168.211.1/24
お好みで WiFi 用 DNS エントリを切る
192.168.211.1 raspberrypi
addn-hosts=/etc/hosts.internal
NetworkManager を再起動する
sudo systemctl stop NetworkManager
とした後、dnsmasq
が残っていたら kill
する。
sudo systemctl start NetworkManager
で Netowrk Manager の管理下でアクセスポイントが起動するはず。
(2020/4/28追記)本当はこのあと IP パケットのフォワード設定や iptables設定等があるが、他の方の記事に詳しいのでここで終わります。
今回嵌った点
-
/etc/dnsmasq.conf
でbind-interfaces
を定義しないとAddresss In Use
エラーが発生する。(見てない気はしますが。) - Wifi の MAC アドレスは Network Manager を起動するたびに変化する様だ。
/etc/NetworkManager/system-connections/Hotspot.nmconnection
のmac-address
は eth0 のアドレスを設定しておく必要がある。 -
/etc/dnsmasq.conf
の他の項目は無視される。と言うか、dnsmasq
の起動オプションに--conf-file=/dev/null
とか指定されてしまうので、Network Manager 側の設定ファイルをいじるしかない。また、なるべく直接いじらず、nmcli
コマンドを使おう。 -
/etc/wpa_supplicant/wpa_supplicant.conf
にクライアント設定が残っているとうまく動作しない(当たり前か)。
おまけ
Android 端末でつなげていると、しばらくして「インターネット接続がありません」という現象が発生する。デフォルトでは省電力モードになっているためと思われる。
/usr/bin/iw dev wlan0 set power_save off
として様子を見る。/etc/rc.local
に上記を設定するとリブート時に自動的に設定される。
→ダメだった。時間を置くとインターネット接続がなくなる。もう少しよく考える必要がありそうだ。
(2020/5/17 追記)
RPi4 専用のパワー制御モードがある模様。
> sudo su
# echo 'on' > /sys/class/net/wlan0/power/control
としてしばらく放っておいたら現象が発生しなくなった。