うたカモ技術ブログ

Linux Wi-Fi

【コンソール操作で完結!】wpa_supplicantによるWi-Fi接続方法   

post:     update: 

今回は、LinuxデバイスでWi-Fiに接続するための重要ツールであるwpa_supplicantについて紹介します。

wpa_supplicantは、WPAサプリカント(※)のWi-Fi接続用制御ソフトウェア(デーモン)の名前です。 このソフトウェアには、自身を操作するwpa_cliなどの各種ユーティリティツール(コマンド)が同梱されています。

これらのツールを適切に使用することで、Wi-Fiルーターやアクセスポイント(AP)にLinuxデバイス(STA)を無線接続することが可能です。

もし、グラフィカルユーザーインタフェース(GUI)を持たないCUIベースのLinuxデバイスを使用している場合、 wpa_supplicantの使い方を理解しておくと、Wi-Fiによる無線ネットワーク(WLAN)への接続がスムーズに行えます。

それでは、wpa_supplicantを使用してWi-Fiに接続する方法について見て行きましょう。

WPAサプリカントとは?

サプリカントは、無線LANアクセスポイント(AP)やルーターに対して認証プロセスを実施し、ネットワークに参加するデバイスを指します。 Wi-Fiにおける認証プロセスはWPAのため、WPAを用いて無線ネットワーク(WLAN)に参加するデバイスを総称して「WPAサプリカント」と呼びます。

今回の場合では、WPAサプリカントはLinuxデバイスで、そのソフトウェアはwpa_supplicant(とその操作コマンドのwpa_cliなど)です。 wpa_supplicantは、WPA/WPA2/WPA3の認証プロセスを実装したソフトウェアで、LinuxデバイスがWi-Fiネットワークに安全に接続するために使用されます。

STAとは?

ネットワークの世界では、ネットワークに参加可能または接続されたデバイス(スマホやパソコンなど)をStation(STA)と呼びます。

上記で説明したWPAサプリカントと同様の意味を持ちますが、WPAサプリカントはWi-FiのWPA認証によってルーターやAPのネットワークに参加するデバイスを意味します。

対して、STAは通信媒体が何であれ、対象ネットワークに接続するデバイスを総称した呼び名です。 そのため、ネットワーク技術の説明では接続デバイスをSTAという呼び名で統一することが一般的です。

以上より、この記事でもWPAサプリカントの役割を果たすLinuxデバイスを「STA」と呼びます。

目次

この記事の実施環境

この記事は以下のデバイスの動作結果を基に作成しています。

#ターゲットデバイス(STA[Enrollee])
Raspberry Pi 3B(64bit)
#実行環境OS
Raspbian GNU/Linux 11 (bullseye)
(Kernel Ver: Linux raspberrypi 6.1.21-v7+)

SSID・暗号化キーの入力によるWi-Fi接続

利用イメージ

APやWi-FiルーターなどのSSIDと暗号化キーをSTA側で入力して接続します。

対応機器(STA)

スマートフォン、パソコン、携帯ゲーム機など。
Wi-Fiに接続できる全ての端末がサポートすると思われる接続方式です。

接続手順

手順1:APやWi-FiルーターのSSIDと暗号化キーを確認する
APやWi-Fiルーターの筐体側面にある接続情報シールや管理画面(UI)上から確認できると思います。

手順2:システムが認識しているWLANインタフェースを確認する
次のコマンドで現在のシステムが認識しているWLANインタフェースを確認します。

sudo wpa_cli interface

example)
kamo@raspberrypi:~$ sudo wpa_cli interface
Selected interface 'p2p-dev-wlan0'
Available interfaces:
p2p-dev-wlan0
wlan0

ここで重要なのが、p2p通信用のWLANインタフェースと通常のWLANインタフェースの名前が何であるかです。 もし、'p2p-dev-wlan'などの名前が表示された場合、それはP2P用のWLANインタフェース名であり、通常のWi-Fi接続では使用できません。

今回の場合では、通常のWi-Fi接続に使用できるWLANインタフェースはwlan0です。

このようなWLANインタフェースはifconfigip aで 確認することができます(逆にP2P用のWLANインタフェース名はシステムが認識する物理インタフェースとして表示されていません)。

そのため、それらコマンドの結果も確認して、sudo wpa_cli interfaceで得られえたインタフェース一覧 からWi-Fi接続に使用できるインタフェースを特定してください。

インタフェース名wlanのサフィックス番号について

通常、wlanのサフィックスが0(つまり、wlan0)の場合、それは2.4GHzのWi-Fiのことを指します。 逆に、wlan1は5GHzのWi-Fiを指します。

手順3:手順1で確認したSSID(<SSID>)と暗号化キー(<KEY>)を入力する
手順1で確認したAPまたはWi-FiルーターのSSIDと暗号化キーを引数にSTA側で次のコマンドを実行します。 ※ここで言うSTAとは、読者お手元のLinuxデバイスのことを指します。

sudo wpa_passphrase <SSID> <KEY> | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
sudo wpa_cli reconfigure -i <interface>
# ex) <SSID>=utakamo , <KEY>=12345678 , <interface>=wlan0

これにより、APとSTAは認証手続きに入り、成功するとSTAはWi-Fiによる無線ネットワーク(WLAN)に参加します。

なお、Wi-Fiの設定情報は以下のファイルに記載されます。

kamo@raspberrypi:~$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
...

network={
    ssid="utakamo"   #ESSID
    #psk="12345678"  #暗号化キー(RAW)
    psk=d5038b803900c57e1da42467101d9a5e4de31f18dc51291a241792842077bea6  #暗号化キー(HASH)
}

...

WPS PBCによるWi-Fi接続

利用イメージ

APやWi-Fiルーターの筐体側面などに存在するPBCボタンを押した後、STA側のWPS PBC機能を実行することでWi-Fiに接続します。 ※PBC機能の実行順序は逆でも構いません。

対応機器(STA)

スマートフォン、パソコン、携帯ゲーム機など。 大半の人がWPSと聞いたときに一番に思い浮かべるのがこのWPS PBCです。

特記事項

WPSはWi-Fiの認証方式としてWPA2までをサポートします。WPA3はWPS非対応です。 近年のスマートフォンでは脆弱性の観点からWPSが利用できないようになっていることがあります。

接続手順

手順1:システムが認識しているWLANインタフェースを確認する
次のコマンドで現在のシステムが認識しているWLANインタフェースを確認します。

sudo wpa_cli interface

example)
kamo@raspberrypi:~$ sudo wpa_cli interface
Selected interface 'p2p-dev-wlan0'
Available interfaces:
p2p-dev-wlan0
wlan0

ここで重要なのが、p2p通信用のWLANインタフェースと通常のWLANインタフェースの名前が何であるかです。 もし、'p2p-dev-wlan'などの名前が表示された場合、それはP2P用のWLANインタフェース名であり、通常のWi-Fi接続では使用できません。

今回の場合では、通常のWi-Fi接続に使用できるWLANインタフェースはwlan0です。

このようなWLANインタフェースはifconfigip aで 確認することができます(逆にP2P用のWLANインタフェース名はシステムが認識する物理インタフェースとして表示されていません)。

そのため、それらコマンドの結果も確認して、sudo wpa_cli interfaceで得られえたインタフェース一覧 からWi-Fi接続に使用できるインタフェースを特定してください。

手順2:APのWPS PBCを実行する
細かな手順はその製品の取り扱い説明書などを参考にしてください。 一般的には筐体側面にPBCボタンがあるので、それを一定時間押すなどしてWPS PBCを実行します。

手順3:STAのWPS PBCを実行する
STA(Enrollee)側で次のコマンドを実行して、APやWi-FiルーターとWi-Fi接続します。 ※ここで言うSTAとは、読者お手元のLinuxデバイスのことを指します。

sudo wpa_cli wps_pbc -i <interface>
ex) <interface>=wlan0

APとSTAでWPSのPBCが動作することで、8way handshakeが実施されます。 正常に最後の手続きが終わるとSTAはWi-Fiに参加したことになります。

WPS PIN (Enrollee Side)によるWi-Fi接続

利用イメージ

STAのPINコードをAPやWi-Fiルーター側で入力・適用することで、そのSTAをWi-Fiに参加させます。

対応機器(STA)

スマートフォン、パソコン、携帯ゲーム機など。
これらの機器で利用可能な最も一般的なWPS PINの接続方法です。

特記事項

WPSはWi-Fiの認証方式としてWPA2までをサポートします。WPA3はWPS非対応です。 近年のスマートフォンでは脆弱性の観点からWPSが利用できないようになっていることがあります。

接続手順

手順1:システムが認識しているWLANインタフェースを確認する
次のコマンドで現在のシステムが認識しているWLANインタフェースを確認します。

sudo wpa_cli interface

example)
kamo@raspberrypi:~$ sudo wpa_cli interface
Selected interface 'p2p-dev-wlan0'
Available interfaces:
p2p-dev-wlan0
wlan0

ここで重要なのが、p2p通信用のWLANインタフェースと通常のWLANインタフェースの名前が何であるかです。 もし、'p2p-dev-wlan'などの名前が表示された場合、それはP2P用のWLANインタフェース名であり、通常のWi-Fi接続では使用できません。

今回の場合では、通常のWi-Fi接続に使用できるWLANインタフェースはwlan0です。

このようなWLANインタフェースはifconfigip aで 確認することができます(逆にP2P用のWLANインタフェース名はシステムが認識する物理インタフェースとして表示されていません)。

そのため、それらコマンドの結果も確認して、sudo wpa_cli interfaceで得られえたインタフェース一覧 からWi-Fi接続に使用できるインタフェースを特定してください。

手順2:STAのPINコードを生成して、WPS PINモードを実行する
以下の3通りのコマンド実行のいずれかで、STA(Enrollee)側のPINコードを生成してWPS PINモードを実行します。 ※ここで言うSTAとは、読者お手元のLinuxデバイスのことを指します。

[1]:ランダムなPINコードを生成する

sudo wpa_cli wps_pin any -i <interface>
ex) <interface>=wlan0

[2]:指定PINコード<pin code>を生成する

sudo wpa_cli wps_pin any <pin code> -i <interface>
# ex) <pin code>=12345678 , <interface>=wlan0

[3]:有効期限[秒](<limit time>)付きの指定PINコード<pin code>を生成する

sudo wpa_cli wps_pin any <pin code> <limit time> -i <interface>
# ex) <pin code>=12345678 , <limit time>=60 , <interface>=wlan0

これによって、anyが示すWLANインタフェースにWPS PINコードが設定されますので、 APやWi-Fiルーター側でそのPINコードを入力すると、Wi-Fi接続が成功します。

手順3:AP、Wi-Fiルーター側で手順1で設定したPINコードを入力する
細かな手順はその製品の取り扱い説明書などを参考にしてください。
もちろん、Wi-FiルーターやAPがWPS PINをサポートしていることが前提です。

WPS PIN (Registrar Side)によるWi-Fi接続

利用イメージ

APやWi-FiルーターのPINコードをSTA側で入力・適用することでWi-Fiに接続します。

対応機器(STA)

プリンター、エアコンなど。
リモコンやタッチディスプレイを介してAPのPINコードを入力し、Wi-Fiに接続することが多いようです。

特記事項

WPSはWi-Fiの認証方式としてWPA2までをサポートします。WPA3はWPS非対応です。 近年のスマートフォンでは脆弱性の観点からWPSが利用できないようになっていることがあります。

接続手順

手順1:APのBSSIDとPINコードを確認する
APやWi-FiルーターのBSSID(WLANインタフェースのMACアドレス)とPINコードを確認してください。 ここら辺はメーカーの取り扱い説明書やマニュアルを参考にしてください。

BSSIDとは?

接続先のWi-Fiを管理するAP・ルーターのWLANインタフェースのMACアドレスです。

手順2:システムが認識しているWLANインタフェースを確認する
次のコマンドで現在のシステムが認識しているWLANインタフェースを確認します。

sudo wpa_cli interface

example)
kamo@raspberrypi:~$ sudo wpa_cli interface
Selected interface 'p2p-dev-wlan0'
Available interfaces:
p2p-dev-wlan0
wlan0

ここで重要なのが、p2p通信用のWLANインタフェースと通常のWLANインタフェースの名前が何であるかです。 もし、'p2p-dev-wlan'などの名前が表示された場合、それはP2P用のWLANインタフェース名であり、通常のWi-Fi接続では使用できません。

今回の場合では、通常のWi-Fi接続に使用できるWLANインタフェースはwlan0です。

このようなWLANインタフェースはifconfigip aで 確認することができます(逆にP2P用のWLANインタフェース名はシステムが認識する物理インタフェースとして表示されていません)。

そのため、それらコマンドの結果も確認して、sudo wpa_cli interfaceで得られえたインタフェース一覧 からWi-Fi接続に使用できるインタフェースを特定してください。

手順3:STA側で手順1で確認したBSSID(<AP BSSID>)とPINコード(<AP PIN>)を入力する
STA(Enrollee)側で次のコマンドを実行して、APやWi-FiルーターとWi-Fi接続します。 ※ここで言うSTAとは、読者お手元のLinuxデバイスのことを指します。

sudo wpa_cli wps_reg <AP BSSID> <AP PIN> -i <interface>
# ex) <AP BSSID>=aa:bb:cc:dd:ee:ff , <AP PIN>=12345670 , <interface>=wlan0

これにより、Registrar側のPINコードを利用してWi-Fiに参加できました。

おわりに

この記事を通して、wpa_supplicantというCUIベースのLinuxデバイスでWi-Fiに接続する際に便利なツール群について学んで頂けたと思います。

wpa_supplicantは多くのコマンドやオプションを持っており、この記事で紹介したもの以外にも多くの機能があります。詳細は公式ドキュメントやマニュアルをご覧ください。

また、WPSはWi-Fiの認証方式としてWPA2までをサポートしています。WPA3は非対応であることに注意が必要です。 WPSは脆弱性の問題から近年のスマートフォンでは利用できないことが多いため、SSIDと暗号化キーの入力によるWi-Fi接続の方法も併せて学んでおくことをおススメします。

参考文献