「Wpa supplicant」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(文字列「ドロップインスニペット」を「ドロップインファイル」に置換)
(3人の利用者による、間の9版が非表示)
3行目: 3行目:
 
[[es:WPA supplicant]]
 
[[es:WPA supplicant]]
 
[[it:WPA supplicant]]
 
[[it:WPA supplicant]]
[[ru:WPA Supplicant]]
+
[[ru:WPA supplicant]]
[[zh-CN:WPA Supplicant]]
+
[[zh-hans:WPA supplicant]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ネットワーク設定}}
 
{{Related|ネットワーク設定}}
 
{{Related|ワイヤレス設定}}
 
{{Related|ワイヤレス設定}}
  +
{{Related|WPA2 Enterprise}}
 
{{Related articles end}}
 
{{Related articles end}}
   
22行目: 23行目:
 
== 概要 ==
 
== 概要 ==
   
暗号化された無線ネットワークに接続するためにまず ''wpa_supplicant'' が WPA アクセスポイントから認証を取得します。このために、''wpa_supplicant'' を設定して適切な証明書をアクセスポイントに送信できるようにしておく必要があります。認証が成功したら、通常通り [[Network Configuration#IP アドレスの設定|IP アドレスを取得]]してネットワークに接続することが可能になります。
+
暗号化された無線ネットワークに接続するためにまず ''wpa_supplicant'' が WPA アクセスポイントから認証を取得します。このために、''wpa_supplicant'' を設定して適切な証明書をアクセスポイントに送信できるようにしておく必要があります。認証が成功したら、通常通り [[ネットワーク設定#IP アドレスの設定|IP アドレスを取得]]してネットワークに接続することが可能になります。
   
 
== wpa_cli で接続する ==
 
== wpa_cli で接続する ==
47行目: 48行目:
 
インタラクティブプロンプト ({{ic|>}}) が現れます。タブ補完機能と完全なコマンドの説明があります。
 
インタラクティブプロンプト ({{ic|>}}) が現れます。タブ補完機能と完全なコマンドの説明があります。
   
{{Tip|ソケットの場所は {{ic|-p}} オプションを使って手動で設定することができます。また、{{ic|-i}} オプションを使って設定するインターフェイスを指定することも可能です。指定しなかった場合は ''wpa_supplicant'' によって管理されている無線インターフェイスで一番初めに見つかったインターフェイスが使われます。}}
+
{{Tip|コントロールソケットのデフォルトの場所は {{ic|/var/run/wpa_supplicant/}} ですが {{ic|-p}} オプションを使って手動で設定することができます。また、{{ic|-i}} オプションを使って設定するインターフェイスを指定することも可能です。指定しなかった場合は ''wpa_supplicant'' によって管理されている無線インターフェイスで一番初めに見つかったインターフェイスが使われます。}}
   
 
{{ic|scan}} と {{ic|scan_results}} コマンドを使って利用可能なネットワークを表示してください:
 
{{ic|scan}} と {{ic|scan_results}} コマンドを使って利用可能なネットワークを表示してください:
67行目: 68行目:
 
> enable_network 0
 
> enable_network 0
 
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
 
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
  +
  +
SSID にパスワード認証が設定されていない場合、{{ic|set_network 0 psk "passphrase"}} コマンドを {{ic|set_network 0 key_mgmt NONE}} に置き換えて明示的にパスワードを使わないとネットワークを設定してください。
   
 
{{Note|
 
{{Note|
77行目: 80行目:
 
OK
 
OK
   
これで WAP の設定は完了です。[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd|systemd-networkd]] や [[dhcpcd|dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
+
これで WAP の設定は完了です。[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd]] や [[dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
   
 
# dhcpcd ''interface''
 
# dhcpcd ''interface''
96行目: 99行目:
   
 
# wpa_supplicant -B -i ''interface'' -c <(wpa_passphrase MYSSID passphrase)
 
# wpa_supplicant -B -i ''interface'' -c <(wpa_passphrase MYSSID passphrase)
  +
  +
{{Note|プロセスが置き換えられるため、上記のコマンドを [[sudo]] で実行することはできません。root シェルが必要です。''sudo'' で実行すると以下のエラーが表示されます:
  +
Successfully initialized wpa_supplicant
  +
Failed to open config file '/dev/fd/63', error: No such file or directory
  +
Failed to read or parse configuration '/dev/fd/63'
  +
[[ヘルプ:読み方#通常ユーザーまたは root]] も参照。}}
   
 
{{Tip|
 
{{Tip|
  +
* 入力する文字列に空白が含まれている場合は、クォートで囲ってください。例: {{ic|"secret passphrase"}}。
 
* 無線ネットワークインターフェイスの名前を確認するには、{{ic|ip link}} コマンドを実行してください。
 
* 無線ネットワークインターフェイスの名前を確認するには、{{ic|ip link}} コマンドを実行してください。
 
* 複雑なパスフレーズだと稀にファイルからの入力が必要な場合があります: {{ic|wpa_passphrase MYSSID < passphrase.txt}}
 
* 複雑なパスフレーズだと稀にファイルからの入力が必要な場合があります: {{ic|wpa_passphrase MYSSID < passphrase.txt}}
 
}}
 
}}
   
WAP との関連付けが完了したら、[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd|systemd-networkd]] や [[dhcpcd|dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
+
WAP との関連付けが完了したら、[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd]] や [[dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
   
 
# dhcpcd ''interface''
 
# dhcpcd ''interface''
110行目: 120行目:
 
== 高度な使用方法 ==
 
== 高度な使用方法 ==
   
[[wikipedia:Extensible_Authentication_Protocol|EAP]] を後で利用するなど、複雑性が変化するネットワークでは、カスタマイズした設定ファイルを作るのが有用かもしれません。設定の例と大要については、[http://linux.die.net/man/5/wpa_supplicant.conf wpa_supplicant.conf(5)] を参照してください。サポートされている設定パラメータの詳細についてはサンプルファイルの {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} を参照してください。
+
[[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]
   
 
=== 設定 ===
 
=== 設定 ===
121行目: 131行目:
   
 
{{hc|/etc/wpa_supplicant/example.conf|2=<nowiki>
 
{{hc|/etc/wpa_supplicant/example.conf|2=<nowiki>
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
+
ctrl_interface=/run/wpa_supplicant
  +
ctrl_interface_group=wheel
 
update_config=1
 
update_config=1
fast_reauth=1
 
 
ap_scan=1
 
ap_scan=1
  +
 
network={
 
network={
 
ssid="MYSSID"
 
ssid="MYSSID"
#psk="passphrase"
 
 
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
 
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
 
}</nowiki>
 
}</nowiki>
 
}}
 
}}
   
  +
クォートで囲むことでパスフレーズは平文で定義することもできます。ただしセキュリティについて十分に警戒してください:
{{ic|network}} ブロック以下は手動で追加するか、[[#wpa_cli で接続する|wpa_cli で接続する]]で説明されているように ''wpa_cli'' を使います。''wpa_cli'' を使用するには、コントロールインターフェイスを {{ic|ctrl_interface}} オプションで設定する必要があります。{{ic|1=GROUP=wheel}} を設定することでユーザーが ''wpa_cli'' を実行するグループに属させることができます。また、{{ic|1=update_config=1}} を追加すると ''wpa_cli'' による {{ic|example.conf}} への変更が保存されるようになります。
 
  +
  +
{{bc|1=
  +
network={
  +
ssid="MYSSID"
  +
psk="passphrase"
  +
}
  +
}}
  +
  +
ネットワークにパスフレーズが設定されていない場合 (公共の Wi-Fi など):
  +
  +
{{bc|1=
  +
network={
  +
ssid="MYSSID"
  +
key_mgmt=NONE
  +
}
  +
}}
  +
  +
{{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|/etc/wpa_supplicant/wpa_supplicant.conf}} からファイルにオプションをコピーしてください。
+
{{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|/etc/wpa_supplicant/wpa_supplicant.conf}} のカスタマイズした設定ファイルを使用する利点はデフォルトで [[dhcpcd|dhcpcd]] によって使用されることです。その場合、オリジナルのバックアップを作成してその中の拡張 network ブロックの例を削除することができます。さもなければ、突然定義されたネットワークにデバイスが接続されても驚かないで下さい。どんな場合でも、設定ファイルの新しいバージョンへの変更は[[Pacnew and Pacsave Files|マージ]]するべきです。
+
{{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}} オプションを定義する必要があります。}}
159行目: 187行目:
 
# wpa_supplicant -B -i ''interface'' -c /etc/wpa_supplicant/example.conf
 
# wpa_supplicant -B -i ''interface'' -c /etc/wpa_supplicant/example.conf
   
[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd|systemd-networkd]] や [[dhcpcd|dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
+
[[Core Utilities#ip|iproute2]] スイートを使用するか [[systemd-networkd]] や [[dhcpcd]] などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。[[ネットワーク#IP アドレスの設定]]も参照してください。例えば:
   
 
# 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) ====
   
''wpa_supplicant'' パッケージには複数の [[systemd|systemd]] サービスファイルが入っています:
+
''wpa_supplicant'' パッケージには複数の [[systemd]] サービスファイルが入っています:
   
* {{ic|wpa_supplicant.service}} - [[D-Bus|D-Bus]] を使用します、[[NetworkManager|NetworkManager]] に推奨。
+
* {{ic|wpa_supplicant.service}} - [[D-Bus]] を使用します、[[NetworkManager]] に推奨。
 
* {{ic|wpa_supplicant@.service}} - 引数としてインターフェイスの名前を指定することができ、そのインターフェイスで ''wpa_supplicant'' デーモンを起動します。{{ic|/etc/wpa_supplicant/wpa_supplicant-''interface''.conf}} の設定ファイルを読み込みます。
 
* {{ic|wpa_supplicant@.service}} - 引数としてインターフェイスの名前を指定することができ、そのインターフェイスで ''wpa_supplicant'' デーモンを起動します。{{ic|/etc/wpa_supplicant/wpa_supplicant-''interface''.conf}} の設定ファイルを読み込みます。
 
* {{ic|wpa_supplicant-nl80211@.service}} - 同じくインターフェイスを指定しますが、{{ic|nl80211}} ドライバーの使用を明示的に強制します (下記参照)。設定ファイルのパスは {{ic|/etc/wpa_supplicant/wpa_supplicant-nl80211-''interface''.conf}}。
 
* {{ic|wpa_supplicant-nl80211@.service}} - 同じくインターフェイスを指定しますが、{{ic|nl80211}} ドライバーの使用を明示的に強制します (下記参照)。設定ファイルのパスは {{ic|/etc/wpa_supplicant/wpa_supplicant-nl80211-''interface''.conf}}。
178行目: 209行目:
 
# systemctl enable wpa_supplicant@''interface''
 
# systemctl enable wpa_supplicant@''interface''
   
そのインターフェイスで [[dhcpcd|dhcpcd]] も有効にします:
+
そのインターフェイスで [[dhcpcd]] も有効にします:
 
# systemctl enable dhcpcd@''interface''
 
# systemctl enable dhcpcd@''interface''
   
 
{{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 アクションスクリプト ===
   
''wpa_cli'' はデーモンモードで起動することができ ''wpa_supplicant'' からのイベントによって指定のスクリプトを実行することができます。2つのイベントがサポートされています: {{ic|CONNECTED}} と {{ic|DISCONNECTED}}。スクリプトにはいくつかの[[environment variables|環境変数]]を使うことができます、詳しくは [http://linux.die.net/man/8/wpa_cli wpa_cli(8)] を見て下さい。
+
''wpa_cli'' はデーモンモードで起動することができ ''wpa_supplicant'' からのイベントによって指定のスクリプトを実行することができます。2つのイベントがサポートされています: {{ic|CONNECTED}} と {{ic|DISCONNECTED}}。スクリプトにはいくつかの[[環境変数]]を使うことができます、詳しくは [http://linux.die.net/man/8/wpa_cli wpa_cli(8)] を見て下さい。
   
以下の例では[[desktop notifications|デスクトップ通知]]を使ってイベントをユーザーに通知します:
+
以下の例では[[デスクトップ通知]]を使ってイベントをユーザーに通知します:
   
 
{{bc|
 
{{bc|
205行目: 262行目:
   
 
$ wpa_cli -a ''/path/to/script''
 
$ wpa_cli -a ''/path/to/script''
  +
  +
== トラブルシューティング ==
  +
  +
{{Warning|{{ic|/usr/share/doc/wpa_supplicant/wpa_supplicant.conf}} のデフォルト設定ファイルを使っていないことを確認してください。デフォルト設定ファイルに記載されているサンプルはコメント化されていないため、大量のエラーが発生します。{{Pkg|wpa_supplicant}} パッケージの既知のバグです: {{Bug|40661}}。}}
  +
  +
=== nl80211 ドライバーがサポートされていない ===
  +
  +
ハードウェアによっては (特に古いハードウェアの場合)、以下のエラーで ''wpa_supplicant'' が失敗することがあります:
  +
  +
Successfully initialized wpa_supplicant
  +
nl80211: Driver does not support authentication/association or connect commands
  +
wlan0: Failed to initialize driver interface
  +
  +
上記のエラーは標準の {{ic|nl80211}} ドライバーが指定のハードウェアをサポートしていないことを示しています。非推奨となっている {{ic|wext}} ドライバーならまだデバイスがサポートされている可能性があります:
  +
  +
# wpa_supplicant -B -i wlan0 '''-D wext''' -c /etc/wpa_supplicant/example.conf
  +
  +
上記のコマンドで接続できた場合、[[systemd]] を使って無線接続を管理したいときは、パッケージに含まれている {{ic|wpa_supplicant@.service}} ユニットを[[systemd#ユニットファイルの編集|編集]]して {{ic|ExecStart}} 行を修正してください:
  +
  +
{{hc|/etc/systemd/system/wpa_supplicant@.service.d/wext.conf|2=
  +
[Service]
  +
ExecStart=
  +
ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I '''-Dnl80211,wext'''
  +
}}
  +
  +
{{Note|{{ic|-Dnl80211,wext}} とカンマで区切ってドライバーを指定することで ''wpa_supplicant'' はインターフェイスを初期化できるドライバーを最初に利用します ({{Man|8|wpa_supplicant|url=http://linux.die.net/man/8/wpa_supplicant}} を参照)。ドライバーが異なる複数のワイヤレスデバイスあるいは USB デバイスを使用している場合に有用です。}}
  +
  +
=== ネットワーク共有 (cifs) をマウントしたときにシャットダウン時に起こる問題 ===
  +
無線を使ってネットワーク共有に接続している場合、シャットダウンが異常に長くなるという問題が起こることがあります。systemd のタイムアウトが3分になっているのが原因です。WPA supplicant の終了が早すぎて、systemd が共有をアンマウントする前に接続が切れてしまいます。[https://github.com/systemd/systemd/issues/1435 バグレポート] において以下のように {{ic|wpa_supplicant@.service}} を[[systemd#ドロップインファイル|編集]]することが提案されています:
  +
  +
{{hc|/etc/systemd/system/wpa_supplicant.service.d/override.conf|2=
  +
[Unit]
  +
After=dbus.service
  +
}}
  +
  +
=== パスワードに関連する問題 ===
  +
  +
特殊文字を含む長くて複雑なパスワードを標準入力から直接指定された場合 {{Pkg|wpa_supplicant}} が正しく動作しないことがあります。例えば {{Pkg|wpa_supplicant}} を起動したときに {{ic|failed 4-way WPA handshake, PSK may be wrong}} というエラーが表示されます。
  +
  +
上記の問題を解決するには、{{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}} を使ってファイルを作成する方がベストです。
  +
  +
=== eduroam などの MSCHAPv2 接続の問題 ===
  +
  +
設定の中で大文字の "v" が使われていることを確認してください:
  +
phase2="auth=MSCHAPV2"
  +
MSCHAPV2 はデフォルトであるため、上記の設定は完全に削除しても問題ありません ({{Bug|51358}})。
   
 
== 参照 ==
 
== 参照 ==

2017年6月3日 (土) 19:43時点における版

関連記事

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
ヒント: 無線ネットワークインターフェイスの名前を確認するには、ip link コマンドを実行してください。

ここで次を実行すると:

# wpa_cli

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

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

scanscan_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 に置き換えて明示的にパスワードを使わないとネットワークを設定してください。

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

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

> save_config
OK

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

# dhcpcd interface

wpa_passphrase で接続する

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

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

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

# wpa_supplicant -B -i interface -c <(wpa_passphrase MYSSID passphrase)
ノート: プロセスが置き換えられるため、上記のコマンドを sudo で実行することはできません。root シェルが必要です。sudo で実行すると以下のエラーが表示されます:
Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'
ヘルプ:読み方#通常ユーザーまたは root も参照。
ヒント:
  • 入力する文字列に空白が含まれている場合は、クォートで囲ってください。例: "secret passphrase"
  • 無線ネットワークインターフェイスの名前を確認するには、ip link コマンドを実行してください。
  • 複雑なパスフレーズだと稀にファイルからの入力が必要な場合があります: wpa_passphrase MYSSID < passphrase.txt

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

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

高度な使用方法

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=1ap_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 ブロックの例を削除することができます。さもなければ、突然定義されたネットワークにデバイスが接続されても驚かないで下さい。どんな場合でも、設定ファイルの新しいバージョンへの変更はマージするべきです。

ヒント: 通常スキャンでは表示されないように定義された、隠れたワイヤレス 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-networkddhcpcd などのネットワークプログラムを使って手動で設定して IP アドレスを取得してください。ネットワーク#IP アドレスの設定も参照してください。例えば:

# dhcpcd interface
ノート:
  • dhcpcd には wpa_supplicant を起動することができるフックが含まれています、dhcpcd#10-wpa_supplicant を見て下さい。
  • 引数や設定をテストする際はフォアグラウンドで (-B オプションを付けずに) 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
ノート: dhcpcd には wpa_supplicant を起動することができるフックが含まれています、dhcpcd#10-wpa_supplicant を見て下さい。
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:rootchown してから 600chmod してください。

wpa_supplicant-wired@adapter.service サービスを起動する前に、デバイスを落としてください:

# ip link set adapter down
ヒント: 上記の設定はシステムのインストール時に使うこともできます。dhcpcd@adapter.service を使ってアドレスを取得することが可能です。

wpa_cli アクションスクリプト

wpa_cli はデーモンモードで起動することができ wpa_supplicant からのイベントによって指定のスクリプトを実行することができます。2つのイベントがサポートされています: CONNECTEDDISCONNECTED。スクリプトにはいくつかの環境変数を使うことができます、詳しくは 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

トラブルシューティング

警告: /usr/share/doc/wpa_supplicant/wpa_supplicant.conf のデフォルト設定ファイルを使っていないことを確認してください。デフォルト設定ファイルに記載されているサンプルはコメント化されていないため、大量のエラーが発生します。wpa_supplicant パッケージの既知のバグです: FS#40661

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
ノート: -Dnl80211,wext とカンマで区切ってドライバーを指定することで wpa_supplicant はインターフェイスを初期化できるドライバーを最初に利用します (wpa_supplicant(8) を参照)。ドライバーが異なる複数のワイヤレスデバイスあるいは USB デバイスを使用している場合に有用です。

ネットワーク共有 (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.confnetwork ブロックの psk キーで平文のパスフレーズを保存するという方法で回避するように示唆されている場合があります ([2] を参照)。しかしながら、このような方法は安全ではありません。大抵の場合、手動でパスワードを書いてしまうよりも wpa_cli を使ってファイルを作成する方がベストです。

eduroam などの MSCHAPv2 接続の問題

設定の中で大文字の "v" が使われていることを確認してください:

phase2="auth=MSCHAPV2"

MSCHAPV2 はデフォルトであるため、上記の設定は完全に削除しても問題ありません (FS#51358)。

参照