「Wpa supplicant」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「[[zh-cn:」を「[[zh-hans:」に置換) |
(同期) |
||
| 120行目: | 120行目: | ||
== 高度な使用方法 == |
== 高度な使用方法 == |
||
| − | [[wikipedia:Extensible_Authentication_Protocol|EAP]] を後で利用するなど、複雑性が変化するネットワークでは、カスタマイズした設定ファイルを作るのが有用かもしれません。設定の例と大要については、 |
+ | [[wikipedia:Extensible_Authentication_Protocol|EAP]] を後で利用するなど、複雑性が変化するネットワークでは、カスタマイズした設定ファイルを作るのが有用かもしれません。設定の例と大要については、{{man|5|wpa_supplicant.conf|url=http://linux.die.net/man/5/wpa_supplicant.conf}} を参照してください。サポートされている設定パラメータの詳細についてはサンプルファイルの {{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} を参照してください [https://w1.fi/cgit/hostap/plain/wpa_supplicant/wpa_supplicant.conf]。 |
=== 設定 === |
=== 設定 === |
||
| 131行目: | 131行目: | ||
{{hc|/etc/wpa_supplicant/example.conf|2=<nowiki> |
{{hc|/etc/wpa_supplicant/example.conf|2=<nowiki> |
||
| − | ctrl_interface= |
+ | ctrl_interface=/run/wpa_supplicant |
ctrl_interface_group=wheel |
ctrl_interface_group=wheel |
||
update_config=1 |
update_config=1 |
||
| − | fast_reauth=1 |
||
ap_scan=1 |
ap_scan=1 |
||
| 163行目: | 162行目: | ||
{{ic|network}} ブロック以下は手動で追加するか、[[#wpa_cli で接続する|wpa_cli で接続する]]で説明されているように ''wpa_cli'' を使います。''wpa_cli'' を使用するには、コントロールインターフェイスを {{ic|ctrl_interface}} オプションで設定する必要があります。{{ic|1=ctrl_interface_group=wheel}} と設定することで wheel グループに属するユーザーが ''wpa_cli'' を実行することが可能になります (root 権限がなくても無線ネットワークに接続できるようになります)。また、{{ic|1=update_config=1}} を追加すると ''wpa_cli'' による {{ic|example.conf}} への変更が保存されるようになります。 |
{{ic|network}} ブロック以下は手動で追加するか、[[#wpa_cli で接続する|wpa_cli で接続する]]で説明されているように ''wpa_cli'' を使います。''wpa_cli'' を使用するには、コントロールインターフェイスを {{ic|ctrl_interface}} オプションで設定する必要があります。{{ic|1=ctrl_interface_group=wheel}} と設定することで wheel グループに属するユーザーが ''wpa_cli'' を実行することが可能になります (root 権限がなくても無線ネットワークに接続できるようになります)。また、{{ic|1=update_config=1}} を追加すると ''wpa_cli'' による {{ic|example.conf}} への変更が保存されるようになります。 |
||
| − | {{ic|<nowiki>fast_reauth=1</nowiki>}} と {{ic|<nowiki>ap_scan=1</nowiki>}} は書き込み時にグローバルで有効になる ''wpa_supplicant'' オプションです。この2つのオプションや、その他のグローバルオプションが必要かどうかは、接続するネットワークのタイプによります。他のグローバルオプションが必要な場合、{{ic|/ |
+ | {{ic|<nowiki>fast_reauth=1</nowiki>}} と {{ic|<nowiki>ap_scan=1</nowiki>}} は書き込み時にグローバルで有効になる ''wpa_supplicant'' オプションです。この2つのオプションや、その他のグローバルオプションが必要かどうかは、接続するネットワークのタイプによります。他のグローバルオプションが必要な場合、{{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} からファイルにオプションをコピーしてください。 |
また、{{ic|wpa_cli set}} を使うことでオプションの状態を見たり新しいオプションを設定することができます。この設定には複数の network ブロックを追記できます: サプリカントは関連付けを管理しそれら全てのローミングを行います。通常は network ブロックで定義された一番強いシグナルがデフォルトで接続されます、{{ic|priority<nowiki>=</nowiki>}} で挙動を変えることができます。 |
また、{{ic|wpa_cli set}} を使うことでオプションの状態を見たり新しいオプションを設定することができます。この設定には複数の network ブロックを追記できます: サプリカントは関連付けを管理しそれら全てのローミングを行います。通常は network ブロックで定義された一番強いシグナルがデフォルトで接続されます、{{ic|priority<nowiki>=</nowiki>}} で挙動を変えることができます。 |
||
| − | {{ic|/ |
+ | {{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} のカスタマイズした設定ファイルを使用する利点はデフォルトで [[dhcpcd]] によって使用されることです。その場合、オリジナルのバックアップを作成してその中の拡張 network ブロックの例を削除することができます。さもなければ、突然定義されたネットワークにデバイスが接続されても驚かないで下さい。どんな場合でも、設定ファイルの新しいバージョンへの変更は[[Pacnew と Pacsave ファイル|マージ]]するべきです。 |
{{Tip|通常スキャンでは表示されないように定義された、隠れたワイヤレス ''SSID'' の network ブロックを設定するには、network ブロックに {{ic|scan_ssid<nowiki>=</nowiki>1}} オプションを定義する必要があります。}} |
{{Tip|通常スキャンでは表示されないように定義された、隠れたワイヤレス ''SSID'' の network ブロックを設定するには、network ブロックに {{ic|scan_ssid<nowiki>=</nowiki>1}} オプションを定義する必要があります。}} |
||
| 192行目: | 191行目: | ||
# dhcpcd ''interface'' |
# dhcpcd ''interface'' |
||
| + | {{Note| |
||
| − | {{Note|''dhcpcd'' には ''wpa_supplicant'' を起動することができるフックが含まれています、[[dhcpcd#10-wpa_supplicant]] を見て下さい。}} |
||
| + | * ''dhcpcd'' には ''wpa_supplicant'' を起動することができるフックが含まれています、[[dhcpcd#10-wpa_supplicant]] を見て下さい。 |
||
| + | * 引数や設定をテストする際はフォアグラウンドで ({{ic|-B}} オプションを付けずに) ''wpa_supplicant'' を起動することでデバッグメッセージを確認できます。 |
||
| + | }} |
||
==== 起動時 (systemd) ==== |
==== 起動時 (systemd) ==== |
||
| 211行目: | 213行目: | ||
{{Note|''dhcpcd'' には ''wpa_supplicant'' を起動することができるフックが含まれています、[[dhcpcd#10-wpa_supplicant]] を見て下さい。}} |
{{Note|''dhcpcd'' には ''wpa_supplicant'' を起動することができるフックが含まれています、[[dhcpcd#10-wpa_supplicant]] を見て下さい。}} |
||
| + | |||
| + | ===== 802.1x/radius ===== |
||
| + | |||
| + | 802.1x/radius を使って有線アダプタを接続する場合、アダプタにあわせて設定を指定してサービスを有効化する必要があります。''networkd'' を使用してヘッドレスサーバーを組む場合に有用です。 |
||
| + | |||
| + | 802.1x/radius の要件にあわせて以下のように設定してください ({{ic|''adapter''}} は接続したい有線アダプタに置き換えてください): |
||
| + | |||
| + | {{hc|/etc/wpa_supplicant/wpa_supplicant-wired-''adapter''.conf|2= |
||
| + | ctrl_interface=/var/run/wpa_supplicant |
||
| + | ap_scan=0 |
||
| + | network={ |
||
| + | key_mgmt=IEEE8021X |
||
| + | eap=PEAP |
||
| + | identity="''user_name''" |
||
| + | password="''user_password''" |
||
| + | phase2="autheap=MSCHAPV2" |
||
| + | } |
||
| + | }} |
||
| + | |||
| + | 上記のファイルでは平文でパスワードを保存しているため、{{ic|root:root}} に [[chown]] してから {{ic|600}} に [[chmod]] してください。 |
||
| + | |||
| + | {{ic|wpa_supplicant-wired@''adapter''.service}} サービスを起動する前に、デバイスを落としてください: |
||
| + | |||
| + | # ip link set ''adapter'' down |
||
| + | |||
| + | {{Tip|上記の設定はシステムのインストール時に使うこともできます。{{ic|dhcpcd@''adapter''.service}} を使ってアドレスを取得することが可能です。}} |
||
=== wpa_cli アクションスクリプト === |
=== wpa_cli アクションスクリプト === |
||
| 237行目: | 265行目: | ||
== トラブルシューティング == |
== トラブルシューティング == |
||
| − | {{Warning|{{ic|/ |
+ | {{Warning|{{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} のデフォルト設定ファイルを使っていないことを確認してください。デフォルト設定ファイルに記載されているサンプルはコメント化されていないため、大量のエラーが発生します。{{Pkg|wpa_supplicant}} パッケージの既知のバグです: {{Bug|40661}}。}} |
=== nl80211 ドライバーがサポートされていない === |
=== nl80211 ドライバーがサポートされていない === |
||
| 275行目: | 303行目: | ||
上記の問題を解決するには、{{ic|wpa_passphrase <MYSSID> <<< "<passphrase>"}} という形でパスワードを指定するか、{{ic|-c}} フラグでファイルを指定してください: |
上記の問題を解決するには、{{ic|wpa_passphrase <MYSSID> <<< "<passphrase>"}} という形でパスワードを指定するか、{{ic|-c}} フラグでファイルを指定してください: |
||
| − | + | # wpa_supplicant -i <interface> -c /etc/wpa_supplicant/example.conf |
|
ときどき、{{ic|wpa_supplicant.conf}} の {{ic|network}} ブロックの {{ic|psk}} キーで平文のパスフレーズを保存するという方法で回避するように示唆されている場合があります ([http://www.linuxquestions.org/questions/linux-wireless-networking-41/wpa-4-way-handshake-failed-843394/] を参照)。しかしながら、このような方法は安全ではありません。大抵の場合、手動でパスワードを書いてしまうよりも {{ic|wpa_cli}} を使ってファイルを作成する方がベストです。 |
ときどき、{{ic|wpa_supplicant.conf}} の {{ic|network}} ブロックの {{ic|psk}} キーで平文のパスフレーズを保存するという方法で回避するように示唆されている場合があります ([http://www.linuxquestions.org/questions/linux-wireless-networking-41/wpa-4-way-handshake-failed-843394/] を参照)。しかしながら、このような方法は安全ではありません。大抵の場合、手動でパスワードを書いてしまうよりも {{ic|wpa_cli}} を使ってファイルを作成する方がベストです。 |
||
| + | |||
| + | === eduroam などの MSCHAPv2 接続の問題 === |
||
| + | |||
| + | 設定の中で大文字の "v" が使われていることを確認してください: |
||
| + | phase2="auth=MSCHAPV2" |
||
| + | MSCHAPV2 はデフォルトであるため、上記の設定は完全に削除しても問題ありません ({{Bug|51358}})。 |
||
== 参照 == |
== 参照 == |
||
2017年5月20日 (土) 10:07時点における版
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
ここで次を実行すると:
# wpa_cli
インタラクティブプロンプト (>) が現れます。タブ補完機能と完全なコマンドの説明があります。
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=]
SSID にパスワード認証が設定されていない場合、set_network 0 psk "passphrase" コマンドを set_network 0 key_mgmt NONE に置き換えて明示的にパスワードを使わないとネットワークを設定してください。
最後にこのネットワークを設定ファイルに保存してください:
> 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)
WAP との関連付けが完了したら、iproute2 スイートを使用するか systemd-networkd や dhcpcd などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。ネットワーク#IP アドレスの設定も参照してください。例えば:
# dhcpcd interface
高度な使用方法
EAP を後で利用するなど、複雑性が変化するネットワークでは、カスタマイズした設定ファイルを作るのが有用かもしれません。設定の例と大要については、wpa_supplicant.conf(5) を参照してください。サポートされている設定パラメータの詳細についてはサンプルファイルの /usr/share/doc/wpa_supplicant/wpa_supplicant.conf を参照してください [1]。
設定
wpa_passphrase で接続するを読めば明らかなように、基本の設定ファイルは次のコマンドで生成できます:
# wpa_passphrase MYSSID passphrase > /etc/wpa_supplicant/example.conf
これによって network セクションだけが作成されます。よく使われるオプションを記述した設定ファイルは以下のようになります:
/etc/wpa_supplicant/example.conf
ctrl_interface=/run/wpa_supplicant
ctrl_interface_group=wheel
update_config=1
ap_scan=1
network={
ssid="MYSSID"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}
クォートで囲むことでパスフレーズは平文で定義することもできます。ただしセキュリティについて十分に警戒してください:
network={
ssid="MYSSID"
psk="passphrase"
}
ネットワークにパスフレーズが設定されていない場合 (公共の Wi-Fi など):
network={
ssid="MYSSID"
key_mgmt=NONE
}
network ブロック以下は手動で追加するか、wpa_cli で接続するで説明されているように wpa_cli を使います。wpa_cli を使用するには、コントロールインターフェイスを ctrl_interface オプションで設定する必要があります。ctrl_interface_group=wheel と設定することで wheel グループに属するユーザーが wpa_cli を実行することが可能になります (root 権限がなくても無線ネットワークに接続できるようになります)。また、update_config=1 を追加すると wpa_cli による example.conf への変更が保存されるようになります。
fast_reauth=1 と ap_scan=1 は書き込み時にグローバルで有効になる wpa_supplicant オプションです。この2つのオプションや、その他のグローバルオプションが必要かどうかは、接続するネットワークのタイプによります。他のグローバルオプションが必要な場合、/usr/share/doc/wpa_supplicant/wpa_supplicant.conf からファイルにオプションをコピーしてください。
また、wpa_cli set を使うことでオプションの状態を見たり新しいオプションを設定することができます。この設定には複数の network ブロックを追記できます: サプリカントは関連付けを管理しそれら全てのローミングを行います。通常は network ブロックで定義された一番強いシグナルがデフォルトで接続されます、priority= で挙動を変えることができます。
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf のカスタマイズした設定ファイルを使用する利点はデフォルトで dhcpcd によって使用されることです。その場合、オリジナルのバックアップを作成してその中の拡張 network ブロックの例を削除することができます。さもなければ、突然定義されたネットワークにデバイスが接続されても驚かないで下さい。どんな場合でも、設定ファイルの新しいバージョンへの変更はマージするべきです。
接続
手動
まず 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
起動時 (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
802.1x/radius
802.1x/radius を使って有線アダプタを接続する場合、アダプタにあわせて設定を指定してサービスを有効化する必要があります。networkd を使用してヘッドレスサーバーを組む場合に有用です。
802.1x/radius の要件にあわせて以下のように設定してください (adapter は接続したい有線アダプタに置き換えてください):
/etc/wpa_supplicant/wpa_supplicant-wired-adapter.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=0
network={
key_mgmt=IEEE8021X
eap=PEAP
identity="user_name"
password="user_password"
phase2="autheap=MSCHAPV2"
}
上記のファイルでは平文でパスワードを保存しているため、root:root に chown してから 600 に chmod してください。
wpa_supplicant-wired@adapter.service サービスを起動する前に、デバイスを落としてください:
# ip link set adapter down
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
トラブルシューティング
nl80211 ドライバーがサポートされていない
ハードウェアによっては (特に古いハードウェアの場合)、以下のエラーで wpa_supplicant が失敗することがあります:
Successfully initialized wpa_supplicant nl80211: Driver does not support authentication/association or connect commands wlan0: Failed to initialize driver interface
上記のエラーは標準の nl80211 ドライバーが指定のハードウェアをサポートしていないことを示しています。非推奨となっている wext ドライバーならまだデバイスがサポートされている可能性があります:
# wpa_supplicant -B -i wlan0 -D wext -c /etc/wpa_supplicant/example.conf
上記のコマンドで接続できた場合、systemd を使って無線接続を管理したいときは、パッケージに含まれている wpa_supplicant@.service ユニットを編集して ExecStart 行を修正してください:
/etc/systemd/system/wpa_supplicant@.service.d/wext.conf
[Service] ExecStart= ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dnl80211,wext
ネットワーク共有 (cifs) をマウントしたときにシャットダウン時に起こる問題
無線を使ってネットワーク共有に接続している場合、シャットダウンが異常に長くなるという問題が起こることがあります。systemd のタイムアウトが3分になっているのが原因です。WPA supplicant の終了が早すぎて、systemd が共有をアンマウントする前に接続が切れてしまいます。バグレポート において以下のように wpa_supplicant@.service を編集することが提案されています:
/etc/systemd/system/wpa_supplicant.service.d/override.conf
[Unit] After=dbus.service
パスワードに関連する問題
特殊文字を含む長くて複雑なパスワードを標準入力から直接指定された場合 wpa_supplicant が正しく動作しないことがあります。例えば wpa_supplicant を起動したときに failed 4-way WPA handshake, PSK may be wrong というエラーが表示されます。
上記の問題を解決するには、wpa_passphrase <MYSSID> <<< "<passphrase>" という形でパスワードを指定するか、-c フラグでファイルを指定してください:
# wpa_supplicant -i <interface> -c /etc/wpa_supplicant/example.conf
ときどき、wpa_supplicant.conf の network ブロックの psk キーで平文のパスフレーズを保存するという方法で回避するように示唆されている場合があります ([2] を参照)。しかしながら、このような方法は安全ではありません。大抵の場合、手動でパスワードを書いてしまうよりも wpa_cli を使ってファイルを作成する方がベストです。
eduroam などの MSCHAPv2 接続の問題
設定の中で大文字の "v" が使われていることを確認してください:
phase2="auth=MSCHAPV2"
MSCHAPV2 はデフォルトであるため、上記の設定は完全に削除しても問題ありません (FS#51358)。