Ubuntu 22.04環境で、NetworkManagerアプレットから設定・作成したwifiのホットスポットにAndroidフォンから接続できない kledgeb.blogspot.com
記事中にある参照リンク先の不具合報告のスレッドを翻訳してみると、最後のレスの 「NetworkManger を設定して iwd をバックエンドとして使用するのが、これまでに見つけた最善の回避策のようです。」とあるのでそれを信じて作業してみました。重複とか不要とか無効な設定があると思うが暫定的に記録します。
Comment #28 : Bug #1972790 : Bugs : wpa package : Ubuntu
参考にした記事
設定環境定義
- NetworkManagerアプレットから設定しておく
- 有線側デバイス名 / bonding-1
- wifi側デバイス名 / wlan0
(wpa_supplicant→iwd変更時にデバイス名が変わるので "ip l"のコマンド などで確認する) - wifi側デバイスのアドレス / 10.42.0.1/28
- DNSサーバー / 8.8.8.8, 8.8.4.4
設定作業
- 仮想端末より wpa_supplicantからiwdへ無線LANの管理サービスの変更
sudo apt install iwd sudo systemctl mask wpa_supplicant ip l
- NetworkManager再設定
前者で実行した "ip l" コマンドの実行結果から、名前が変わったと思しきWiFIデバイスを割り出して、再びNetworkManagerアプレットから設定したホットスポットの接続名を開き、 WIFI→デバイスをiwdでの呼び名に変更する
- ufwの設定 仮想端末より実行しdhcpのポートを開く
sudo ufw allow 53 comment 'dns' sudo ufw allow 67/udp comment 'dhcp'
- /etc/sysctl.conf の編集
net.ipv4.ip_forward=1
- /etc/NetworkManager/conf.d/iwd.conf の編集
[General] # EnableNetworkConfiguration=true にはしない [device] wifi.backend=iwd
- /etc/systemd/network/wlan0.network の編集
systemd-networkdにdhcpサーバーを担わせる設定
[Match] Name=wlan0 [Network] Address=10.42.0.1/28 DHCP=no DHCPServer=yes IPMasquerade=ipv4 [DHCPServer] PoolOffset=100 PoolSize=20 EmitDNS=yes DNS=8.8.8.8,8.8.4.4 EmitRouter=yes
- /etc/iwd/main.conf の編集 ※不要
[IPv4] Address=10.42.0.1 Netmask=255.255.255.0 Gateway=10.42.0.1 DNSList=8.8.8.8,8.8.4.4 IPRange=10.42.0.2,10.42.0.10
- 仮想端末より
sudo sysctl -p sudo systemctl restart iwd systemd-networkd NetworkManager
シェルスクリプトへの追記 (全てroot権限)
- システム起動時
1行目は6項目のsystemdの設定でIPMasquerade=ipv4としてあるから不要かも
iptables -t nat -A POSTROUTING -o bonding-1 -j MASQUERADE iptables -I FORWARD 1 -i wlan0 -j ACCEPT iptables -I FORWARD 1 -o wlan0 -j ACCEPT iptables -A INPUT -m state --state NEW -i wlan0 -j ACCEPT iptables -A OUTPUT -m state --state NEW -o wlan0 -j ACCEPT
- システム起動時 | ウェイクアップ時
/usr/bin/nmcli \ connection up "NetworkManagerアプレットで設定したホットスポットの接続名|またはUUID"
- システムスリープ時 [|シャットダウン時]
/usr/bin/nmcli \ connection down "NetworkManagerアプレットで設定したホットスポットの接続名|またはUUID"