Ubuntu 20.04でステルスAPに接続する

ラズパイに Ubuntu を入れて Wi-Fi 接続しようとしまったらハマったのでメモ

環境

  • Raspberry Pi 4
  • Ubuntu 20.04
    1$ cat /etc/lsb-release
    2DISTRIB_ID=Ubuntu
    3DISTRIB_RELEASE=20.04
    4DISTRIB_CODENAME=focal
    5DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
    

接続

以下を参考に設定ファイルを作成します。

ポイントは ssid の指定に wpa supplicant の scan_ssid を設定している点です。

 1$ sudo vim /etc/netplan/99_config.yaml
 2network:
 3    ethernets:
 4        eth0:
 5            dhcp4: true
 6            optional: true
 7    version: 2
 8    wifis:
 9        wlan0:
10            dhcp4: true
11            optional: true
12            access-points:
13                "ssid\"\n  scan_ssid=1\n#":
14                    password: "password"

※環境によっては一度ここでrebootする必要があるかもしれません。

ファイルを作成したら以下のコマンドで適用します。

1$ sudo netplan apply

適用後 IP が振られていることを確認します。

1$ ip -4 a show wlan0
23: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
3    inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.xxx scope global dynamic wlan0
4       valid_lft 258516sec preferred_lft 258516sec

接続できない時の確認

対象のデバイス名のサービスが作成されているため、そのサービスの status とログを確認します。

1$ sudo systemctl status netplan-wpa-wlan0.service
2$ sudo journalctl -u netplan-wpa-wlan0.service
3Apr 01 17:40:48 ubuntu wpa_supplicant[2051]: Line 6: Invalid SSID line '"'.
4Apr 01 17:40:48 ubuntu wpa_supplicant[2051]: Line 9: failed to parse network block.
5Apr 01 17:40:48 ubuntu wpa_supplicant[2051]: Failed to read or parse configuration '/run/netplan/wpa-wlan0.conf'.
6Apr 01 17:40:48 ubuntu systemd[1]: netplan-wpa-wlan0.service: Main process exited, code=exited, status=255/EXCEPTION
7Apr 01 17:40:48 ubuntu systemd[1]: netplan-wpa-wlan0.service: Failed with result 'exit-code'

なぜ ssid の指定時に scan_ssid を埋め込む必要があるのか

詳細は以下にまとまっていますが、netplan のバグのようです。

のため、ssid の部分に後続で生成される wpa supplicant 用のconfigを差し込んでおくことで生成されるconfigに必要な設定が書き込まれるようです。

生成されたconfigを見ると以下のように scan_ssid が書き込まれていることがわかります。

 1$ sudo cat /run/netplan/wpa-wlan0.conf
 2ctrl_interface=/run/wpa_supplicant
 3
 4network={
 5  ssid="ssid"
 6  scan_ssid=1
 7#"
 8  key_mgmt=WPA-PSK
 9  psk="password"
10}

現在は修正されているようで netplan の 0.100 からは hidden オプションが追加されています。
ただ、手元で利用しているパッケージのバージョンは 0.99 であったため対象外でした。

1$ sudo dpkg -l | grep netplan
2ii  libnetplan0:arm64              0.99-0ubuntu2                     arm64        YAML network configuration abstraction runtime library
3ii  netplan.io                     0.99-0ubuntu2                     arm64        YAML network configuration abstraction for various backends

参考記事