# WPA supplicant (日本語)

関連記事

- ネットワーク設定
- ワイヤレス設定

wpa_supplicant はクロスプラットフォームのサプリカントで WEP, WPA, WPA2 (IEEE 802.11i / RSN (Robust Secure Network)) をサポートしています。デスクトップやノートパソコン、組込みシステムを対象としています。

wpa_supplicant はクライアントステーションで使われている IEEE 802.1X/WPA コンポーネントです。WPA アクセスポイントとのキーネゴシエーションを実装しており、無線ドライバーのローミングと IEEE 802.11 認証/アソシエーションを制御します。

## インストール

公式リポジトリから wpa_supplicant をインストールしてください。

任意で、wpa_supplicant のグラフィカルフロントエンドである wpa_gui が入っている wpa_supplicant_gui もインストールしてください。

## 概要

暗号化された無線ネットワークに接続するためにまず wpa_supplicant が WPA アクセスポイントから認証を取得します。このために、wpa_supplicant を設定して適切な証明書をアクセスポイントに送信できるようにしておく必要があります。認証が成功したら、通常通り IP アドレスを取得してネットワークに接続することが可能になります。

## wpa_cli で接続する

実行中に wpa_supplicant をインタラクティブに設定するのに使われるコマンドラインツール wpa_cli を利用します。この接続方法では利用可能なネットワークをスキャンすることができます。詳しくは wpa_cli(8) を見て下さい。

wpa_cli を使用するには、wpa_supplicant のコントロールインターフェイスを指定して設定を更新する権限を与える必要があります。最小限の設定ファイルを作成してください:

    /etc/wpa_supplicant/example.conf

    ctrl_interface=/run/wpa_supplicant
    update_config=1

そして次のコマンドで wpa_supplicant を起動します:

    # wpa_supplicant -B -i interface -c /etc/wpa_supplicant/example.conf

Tip: 無線ネットワークインターフェイスの名前を確認するには、`ip link` コマンドを実行してください。

ここで次を実行すると:

    # wpa_cli

インタラクティブプロンプト (`>`) が現れます。タブ補完機能と完全なコマンドの説明があります。

Tip: ソケットの場所は `-p` オプションを使って手動で設定することができます。また、`-i` オプションを使って設定するインターフェイスを指定することも可能です。指定しなかった場合は wpa_supplicant によって管理されている無線インターフェイスで一番初めに見つかったインターフェイスが使われます。

`scan` と `scan_results` コマンドを使って利用可能なネットワークを表示してください:

    > scan
    OK
    <3>CTRL-EVENT-SCAN-RESULTS
    > scan_results
    bssid / frequency / signal level / flags / ssid
    00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
    11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID

`MYSSID` と接続するには、ネットワークを追加して証明書を設定し、有効にします:

    > add_network
    0
    > set_network 0 ssid "MYSSID"
    > set_network 0 psk "passphrase"
    > enable_network 0
    <2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]

Note:

- ネットワークにはそれぞれ数字のインデックスが付けられます、一番目のネットワークはインデックス0になります。
- PSK はクォートをつけた"パスフレーズ"文字から計算されます、これは wpa_passphrase コマンドと同じです。とはいえ、`psk` にクォートを付けずに直接 PSK を入力することもできます。

最後にこのネットワークを設定ファイルに保存してください:

    > save_config
    OK

これで WAP の設定は完了です。iproute2 スイートを使用するか systemd-networkd や dhcpcd などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。ネットワーク#IP アドレスの設定も参照してください。例えば:

    # dhcpcd interface

## wpa_passphrase で接続する

この接続方法では SSID が既知のネットワークに素早く接続することができます。wpa_supplicant が使用する最小限の設定を作成するコマンドラインツール wpa_passphrase を使います。例:

    $ wpa_passphrase MYSSID passphrase

    network={
        ssid="MYSSID"
        #psk="passphrase"
        psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
    }

これは wpa_passphrase で wpa_supplicant が関連付けられることを意味し次のコマンドで簡単に起動できます:

    # wpa_supplicant -B -i interface -c <(wpa_passphrase MYSSID passphrase)

Tip:

- 無線ネットワークインターフェイスの名前を確認するには、`ip link` コマンドを実行してください。
- 複雑なパスフレーズだと稀にファイルからの入力が必要な場合があります: `wpa_passphrase MYSSID < passphrase.txt`

WAP との関連付けが完了したら、iproute2 スイートを使用するか systemd-networkd や dhcpcd などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。ネットワーク#IP アドレスの設定も参照してください。例えば:

    # dhcpcd interface

Warning: インターフェイスを指定しないで dhcpcd を実行すると、全てのインターフェイスがバインドされます。起動時に、これによって udev との競合が発生し、dhcpcd によって udev がインターフェイスの名前を変更できなくなることがあります。

## 高度な使用方法

For networks of varying complexity, possibly employing extensive use of EAP, it will be useful to maintain a customised configuration file. For an overview of the configuration with examples, refer to wpa_supplicant.conf(5); for details on all the supported configuration parameters, refer to the example file `/etc/wpa_supplicant/wpa_supplicant.conf`.

### 設定

wpa_passphrase で接続するを読めば明らかなように、基本の設定ファイルは次のコマンドで生成できます:

    # wpa_passphrase MYSSID passphrase > /etc/wpa_supplicant/example.conf

This will only create a `network` section. A configuration file with some more common options may look like:

    /etc/wpa_supplicant/example.conf

    ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
    update_config=1
    fast_reauth=1
    ap_scan=1
    network={
        ssid="MYSSID"
        #psk="passphrase"
        psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
    }

Further `network` blocks may be added manually, or using wpa_cli as illustrated in #Connecting with wpa_cli. In order to use wpa_cli, a control interface must be set with the `ctrl_interface` option. Setting `GROUP=wheel` allows users belonging to such group to execute wpa_cli. Also add `update_config=1` so that changes made with wpa_cli to `example.conf` can be saved.

`fast_reauth=1` and `ap_scan=1` are the wpa_supplicant options active globally at the time of writing. Whether you need them, or other global options too for that matter, depends on the type of network to connect to. If you need other global options, simply copy them over to the file from `/etc/wpa_supplicant/wpa_supplicant.conf`.

Alternatively, `wpa_cli set` can be used to see options' status or set new ones. Multiple network blocks may be appended to this configuration: the supplicant will handle association to and roaming between all of them. The strongest signal defined with a network block usually is connected to by default, one may define `priority=` to influence behaviour.

An advantage to be mentioned in using a customized configuration file at `/etc/wpa_supplicant/wpa_supplicant.conf` is that it is used by default by dhcpcd. If you do so, you might want to make a backup of the original and delete the extensive network block examples in it. Otherwise, do not be surprised if your device suddenly connects to networks defined in them. In any case, changes to new versions of the configuration file should of course be merged.

Tip: To configure a network block to a hidden wireless SSID, which by definition will not turn up in a regular scan, the option `scan_ssid=1` has to be defined in the network block.

### 接続

#### 手動

まず wpa_supplicant コマンドを起動します、よく使われる引数は:

- `-B` - バックグラウンドにフォーク。
- `-c filename` - 設定ファイルのパス。
- `-i interface` - listen するインターフェイス。
- `-D driver` - 使用するドライバーを任意で指定。サポートされているドライバーのリストは `wpa_supplicant -h` の出力を見て下さい。
  - `nl80211` が現在の標準ですが、全ての無線チップモジュールがこれをサポートしているわけではありません。
  - `wext` は現在推奨されていませんが、いまだに幅広くサポートされています。

引数の完全なリストは wpa_supplicant(8) を見て下さい。例:

    # wpa_supplicant -B -i interface -c /etc/wpa_supplicant/example.conf

iproute2 スイートを使用するか systemd-networkd や dhcpcd などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。ネットワーク#IP アドレスの設定も参照してください。例えば:

    # dhcpcd interface

Note: dhcpcd には wpa_supplicant を起動することができるフックが含まれています、dhcpcd (日本語)#10-wpa_supplicant を見て下さい。

#### 起動時 (systemd)

wpa_supplicant パッケージには複数の systemd サービスファイルが入っています:

- `wpa_supplicant.service` - D-Bus を使用します、NetworkManager に推奨。
- `wpa_supplicant@.service` - 引数としてインターフェイスの名前を指定することができ、そのインターフェイスで wpa_supplicant デーモンを起動します。`/etc/wpa_supplicant/wpa_supplicant-interface.conf` の設定ファイルを読み込みます。
- `wpa_supplicant-nl80211@.service` - 同じくインターフェイスを指定しますが、`nl80211` ドライバーの使用を明示的に強制します (下記参照)。設定ファイルのパスは `/etc/wpa_supplicant/wpa_supplicant-nl80211-interface.conf`。
- `wpa_supplicant-wired@.service` - 同じくインターフェイスを指定しますが、`wired` ドライバーを使用します。設定ファイルのパスは `/etc/wpa_supplicant/wpa_supplicant-wired-interface.conf`。

起動時にワイヤレスを有効にするには、上記のサービスのどれかを特定の無線インターフェイスで有効にしてください、例えば:

    # systemctl enable wpa_supplicant@interface

そのインターフェイスで dhcpcd も有効にします:

    # systemctl enable dhcpcd@interface

Note: dhcpcd には wpa_supplicant を起動することができるフックが含まれています、dhcpcd (日本語)#10-wpa_supplicant を見て下さい。

### wpa_cli アクションスクリプト

wpa_cli はデーモンモードで起動することができ wpa_supplicant からのイベントによって指定のスクリプトを実行することができます。2つのイベントがサポートされています: `CONNECTED` と `DISCONNECTED`。スクリプトにはいくつかの環境変数を使うことができます、詳しくは wpa_cli(8) を見て下さい。

以下の例ではデスクトップ通知を使ってイベントをユーザーに通知します:

    #!/bin/bash

    case "$2" in
        CONNECTED)
            notify-send "WPA supplicant: connection established";
            ;;
        DISCONNECTED)
            notify-send "WPA supplicant: connection lost";
            ;;
    esac

スクリプトを忘れずに実行可能にして、`-a` フラグを使って wpa_cli にスクリプトのパスを渡して下さい:

    $ wpa_cli -a /path/to/script

## 参照

- WPA Supplicant ホーム
- wpa_cli 使用例
- wpa_supplicant(8)
- wpa_supplicant.conf(5)
- wpa_cli(8)
- Kernel.org wpa_supplicant ドキュメント

Category:

- Wireless Networking (日本語)