WPA supplicant (日本語) - ArchWiki

# 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 がインターフェイスの名前を変更できなくなることがあります。

## 高度な使用方法

EAP を後で利用するなど、複雑性が変化するネットワークでは、カスタマイズした設定ファイルを作るのが有用かもしれません。設定の例と大要については、wpa_supplicant.conf(5) を参照してください。サポートされている設定パラメータの詳細についてはサンプルファイルの `/etc/wpa_supplicant/wpa_supplicant.conf` を参照してください。

### 設定

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

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

これによって `network` セクションだけが作成されます。よく使われるオプションを記述した設定ファイルは以下のようになります:

    /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
    }

`network` ブロック以下は手動で追加するか、wpa_cli で接続するで説明されているように wpa_cli を使います。wpa_cli を使用するには、コントロールインターフェイスを `ctrl_interface` オプションで設定する必要があります。`GROUP=wheel` を設定することでユーザーが wpa_cli を実行するグループに属させることができます。また、`update_config=1` を追加すると wpa_cli による `example.conf` への変更が保存されるようになります。

`fast_reauth=1` と `ap_scan=1` は書き込み時にグローバルで有効になる wpa_supplicant オプションです。この2つのオプションや、その他のグローバルオプションが必要かどうかは、接続するネットワークのタイプによります。他のグローバルオプションが必要な場合、`/etc/wpa_supplicant/wpa_supplicant.conf` からファイルにオプションをコピーしてください。

また、`wpa_cli set` を使うことでオプションの状態を見たり新しいオプションを設定することができます。この設定には複数の network ブロックを追記できます: サプリカントは関連付けを管理しそれら全てのローミングを行います。通常は network ブロックで定義された一番強いシグナルがデフォルトで接続されます、`priority=` で挙動を変えることができます。

`/etc/wpa_supplicant/wpa_supplicant.conf` のカスタマイズした設定ファイルを使用する利点はデフォルトで dhcpcd によって使用されることです。その場合、オリジナルのバックアップを作成してその中の拡張 network ブロックの例を削除することができます。さもなければ、突然定義されたネットワークにデバイスが接続されても驚かないで下さい。どんな場合でも、設定ファイルの新しいバージョンへの変更はマージするべきです。

Tip: 通常スキャンでは表示されないように定義された、隠れたワイヤレス SSID の network ブロックを設定するには、network ブロックに `scan_ssid=1` オプションを定義する必要があります。

### 接続

#### 手動

まず 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 (日本語)