wpa_supplicant
wpa_supplicant はネットワーク管理のうち認証の部分を処理する Wi-Fi サプリカントであり、追加でインターフェースの起動も行うことができます。
インストール
前提条件として、IEEE 802.11 セクションで説明されているようにカーネルの無線サポートが有効になっていることと、無線デバイスドライバが必要な場合があります。[1]
USE フラグ
USE flags for net-wireless/wpa_supplicant IEEE 802.1X/WPA supplicant for secure wireless transfers
+fils
|
Add support for Fast Initial Link Setup (802.11ai) |
+hs2-0
|
Add support for 802.11u and Passpoint for HotSpot 2.0 |
+mbo
|
Add support Multiband Operation |
+mesh
|
Add support for mesh mode |
ap
|
Add support for access point mode |
broadcom-sta
|
Flag to help users disable features not supported by broadcom-sta driver |
dbus
|
Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) |
eap-sim
|
Add support for EAP-SIM authentication algorithm |
eapol-test
|
Build and install eapol_test binary |
fasteap
|
Add support for FAST-EAP authentication algorithm |
macsec
|
Add support for wired macsec |
p2p
|
Add support for Wi-Fi Direct mode |
privsep
|
Enable wpa_priv privledge separation binary |
ps3
|
Add support for ps3 hypervisor driven gelic wifi |
qt5
|
Add support for the Qt 5 application and UI framework |
readline
|
Enable support for libreadline, a GNU line-editing library that almost everyone wants |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
smartcard
|
Add support for smartcards |
tdls
|
Add support for Tunneled Direct Link Setup (802.11z) |
tkip
|
Add support for WPA TKIP (deprecated due to security flaws in 2009) |
uncommon-eap-types
|
Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE |
wep
|
Add support for Wired Equivalent Privacy (deprecated due to security flaws in 2004) |
wimax
|
Add support for Wimax EAP-PEER authentication algorithm |
wps
|
Add support for Wi-Fi Protected Setup |
Emerge
USE フラグを確認して、Portage の emerge コマンドを使用して net-wireless/wpa_supplicant をインストールしてください:
root #
emerge --ask net-wireless/wpa_supplicant
直接接続
クイック接続
テキストパスワードを履歴に保存しないように、履歴を無効化しています。この方法は、アクセスポイントに接続できることをテストするために、一時的に使用すべきです。
root #
set +o history
root #
wpa_supplicant -i wlp0s20f3 -c <(wpa_passphrase ssid password) &
root #
set -o history
直接接続時にプロセスは 'wpa_supplicant -iwlan0 -c /dev/fd/63 を出力します
2 個のインターフェースでの接続
wpa_supplicant は、各インターフェース毎に独立したプロセスを実行することによって、またはコマンドラインにオプションのリストを渡して単一のプロセスを実行することによって、複数の (無線) インターフェース を管理することができます。各インターフェースは -N 引数によって分離されます。次のコマンドは 2 個のインターフェースに対して wpa_supplicant を開始します:
user $
wpa_supplicant -c wpa1.conf -i wlan0 -D nl80211 -N -c wpa2.conf -i ath0 -D wext
構成設定
ファイル
最小構成
wpa_supplicant には、事前共有鍵 (WPA-PSK、またの名をパスワード) ネットワーク向けのネットワークブロックを、コマンドラインから簡単に書き出すことができるツール、wpa_passphrase を含んでいます。
root #
wpa_passphrase ssid password >> /etc/wpa_supplicant/wpa_supplicant.conf
パスワードを平文ではなくハッシュとして保存している場合は、デフォルトでは生成されない key_MGMT=WPA-EAP と eap=PEAP を設定ファイルに追加する必要があります。
無線インターフェースのセットアップ
単一の無線インターフェースでの使用には、構成ファイルは 1 ファイルだけ必要になるでしょう。
# 'wheel' グループに属するユーザに対して wpa_supplicant の制御を許可する
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
# このファイルを wpa_gui / wpa_cli が書き込みできるようにする
update_config=1
wpa_gui / wpa_cli を使用した接続の制御を非特権ユーザに対して許可するには、ユーザを wheel グループに所属させてください。
このファイルはデフォルトでは存在していません。詳しく文書化されたテンプレート構成ファイルを /usr/share/doc/${P}/wpa_supplicant.conf.bz2 からコピーすることができます。ここで P 変数の値は現在 emerge されている wpa_supplicant の名前とバージョンです:
root #
bzcat /usr/share/doc/${P}/wpa_supplicant.conf.bz2 > /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant で WPA2 接続する
YourSSID を提供する任意の無線アクセスポイントに接続する
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
#ap_scan=0
#update_config=1
network={
ssid="YourSSID"
psk="your-secret-key"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
ダイナミック WEP キーを使う設定ファイル
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="1x-test"
scan_ssid=1
key_mgmt=IEEE8021X
eap=TLS
identity="user@example.com"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="password"
eapol_flags=3
}
ほぼすべての設定モードを許可する
選択された SSID でどのセキュリティポリシーが使用されているかに基づいて、設定オプションが選択されます。これは主にテストを目的としたものであり、通常の使用には推奨されません。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="example"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk="very secret passphrase"
eap=TTLS PEAP TLS
identity="user@example.com"
password="foobar"
ca_cert="/etc/cert/ca.pem"
client_cert="/etc/cert/user.pem"
private_key="/etc/cert/user.prv"
private_key_passwd="password"
phase1="peaplabel=0"
ca_cert2="/etc/cert/ca2.pem"
client_cert2="/etc/cer/user.pem"
private_key2="/etc/cer/user.prv"
private_key2_passwd="password"
}
有線 802.1X セットアップ
wpa_supplicant を介して有線接続を扱うようにすることもできます。これは802.1X を使用するネットワークで便利です。有線の構成を保持する別の構成ファイルを作成してください。下の例では認証のために証明書を使用しています。他の方法の例については、wpa_supplicant.conf の man ページを確認してください。
これは wired または roboswitch インターフェース (コマンドライン上で -Dwired または -Droboswitch) とともに使用することができます。
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=0
fast_reauth=1
network={
key_mgmt=IEEE8021X
eap=TLS
identity="COMPUTERAACT$@DOMAIN"
ca_cert="/etc/wpa_supplicant/ca.pem"
client_cert="/etc/wpa_supplicant/COMPUTERACCT.pem"
private_key="/etc/wpa_supplicant/COMPUTERAACT.key"
private_key_passwd="secret_password"
eapol_flags=0
}
構成ファイルが機密情報を含んでいるので、chmod してください。
root #
chmod 600 /etc/wpa_supplicant/wpa_supplicant_wired.conf
有線インターフェース (eth0) に対して上の構成設定を適用するために、wpa_supplicant に追加のパラメータを渡す必要があります 下の wpa_supplicant 引数 (-M, CONFIG_MATCH_IFACE=y) は wpa_supplicant がバージョン 2.6-r2 以降であることを前提としています
wpa_supplicant_args="-ieth0 -Dwired -c/etc/wpa_supplicant/wpa_supplicant_wired.conf -M -c/etc/wpa_supplicant/wpa_supplicant.conf"
ネットワークインターフェースを /etc/init.d から削除して、wpa_supplicant デーモンを有効化することで、wpa_supplicant にインターフェースの開始・停止を管理させます
root #
/etc/init.d/net.eth0 stop
root #
/etc/init.d/net.wlan0 stop
root #
rm /etc/init.d/net.wlan0 /etc/init.d/net.eth0
root #
rc-update add wpa_supplicant
root #
/etc/init.d/wpa_supplicant start
wpa_cli を通じて有線インターフェースの状態を確認します
コマンドラインから無線アクセスポイントへ直接接続してください
root #
wpa_cli
wpa_cli v2.8 Copyright (c) 2004-2019, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'p2p-dev-wlan0' Interactive mode > interface eth0 Connected to interface 'eth0. > status bssid=00:00:00:00:00:00 freq=0 ssid= id=0 mode=station pairwise_cipher=NONE group_cipher=NONE key_mgmt=IEEE 802.1X (no WPA) wpa_state=COMPLETED ip_address=10.10.10.100 p2p_device_address=bb:bb:bb:bb:bb:bb address=aa:aa:aa:aa:aa:aa Supplicant PAE state=AUTHENTICATED suppPortStatus=Authorized EAP state=SUCCESS selectedMethod=13 (EAP-TLS) eap_tls_version=TLSv1 EAP TLS cipher=ECDHE-RSA-AES256-SHA ...
ネットワークマネージャをセットアップする
Network management の記事に列挙されているソリューションは通常、他のソリューションと同時に動作しません。これらサービスのうちひとつだけが同時に動作しているようにしてください。複数のネットワーク管理サービスを同時に起動すると予測できない結果をもたらすでしょう!
利用したいサービスに対応するセットアップを選んでください。
ネットワークマネージャとして dhcpcd を使うようにセットアップする
まずは dhcpcd のセットアップガイドに従ってください。
wpa_supplicant を emerge してください (2017 年 4 月に追加されたCONFIG_MATCH_IFACE オプションを使用するためにはバージョン 2.6-r2 以上が必要です):
root #
emerge --ask net-wireless/wpa_supplicant
OpenRC を使う場合
無線ネットワークインターフェースに -M
オプションを指定して、 wpa_supplicant の conf.d ファイルを完成させてください:
wpa_supplicant_args="-B -M -c/etc/wpa_supplicant/wpa_supplicant.conf"
有線インターフェースのために認証が必要な場合は、設定ファイルは次のようになるでしょう
wpa_supplicant_args="-ieth0 -Dwired -c/etc/wpa_supplicant/wpa_supplicant_wired.conf -B -M -c/etc/wpa_supplicant/wpa_supplicant.conf"
構成が完了したら、サービスとして開始してください:
root #
rc-update add wpa_supplicant default
root #
rc-service wpa_supplicant start
Systemd を使う場合
Systemd では、上のように conf.d ファイルを作成する必要なしに、より簡単にデバイス別のセットアップを行うことができます。既に存在するサービスセクションの wpa_supplicant の項目で説明されているように、wpa_supplicant@wlan0.service
のようなサービスシンボリックリンクを作成すれば、この場合はデバイス wlan0
を管理するための個別の設定ファイルを探します。
この方法で特定のデバイスを設定するには、まず /etc/wpa_supplicant/wpa_supplicant.conf ファイルをコピーまたはリネームして、/etc/wpa_supplicant/wpa_supplicant-DEVNAME.conf としてください。ここで DEVNAME
は wlan0
のようなデバイスの名前です。
次に、/etc/systemd/system/multi-user.target.wants に移動してシンボリックリンクを作成してください:
root #
ln -s /lib/systemd/system/wpa_supplicant@.service wpa_supplicant@DEVNAME.service
ここで、DEVNAME
は上の conf ファイルで使ったのと同じデバイス名です。
シンボリックリンク作成ステップの 2 個の引数の双方にある @ 記号に注意してください。
システムをテストしてください:
root #
systemctl daemon-reload
root #
systemctl start wpa_supplicant@DEVNAME
root #
systemctl status wpa_supplicant@DEVNAME
非推奨の WEXT ドライバが必要な場合、無線ドライバを変えることで、接続直後に reason 3 で切断される問題が解決できることがあります。コンパイル時にビルドされた利用可能なドライバの一覧を確認するには、wpa_supplicant -h を実行してください。
wpa_supplicant_args="-D wext"
Netifrc のためのセットアップ
wpa_supplicant を使うよう Netifrc を構成するためには:
modules_wlan0="wpa_supplicant"
config_wlan0="dhcp"
上の構成を実施後、WiFi パスワードがコンピュータを使用する全員に平文で見えることが無いように、パーミッションを変更するのは良い考えです: [2]
root #
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
NetworkManager を使うようにセットアップする
WiFi バックエンドとして wpa_supplicant を使うように NetworkManager を設定すると、必要なときに D-Bus を利用して wpa_supplicant を開始することができます。そのため、ブート時には wpa_supplicant サービス自体を止めたままにしておくのがおすすめです。
使い方
wpa_gui を使う
wpa_supplicant を使う最も単純な方法は wpa_gui というインターフェースを使用する方法です。これを有効化するには、qt5
USE フラグを有効にして wpa_supplicant をビルドしてください。
wpa_cli を使う
wpa_supplicant はコマンドラインのユーザーインターフェースも備えています。wpa_cli とタイプすると、タブ補完機能を持つインタラクティブモードで開始します。このプロンプト上で help
とタイプすると、使えるコマンドを一覧表示するでしょう(下の wpa_cli コマンドの出力を見るには "展開する" をクリックしてください)。
user $
wpa_cli
wpa_cli v2.5 Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'wlan0' Interactive mode > scan OK > scan_results bssid / frequency / signal level / flags / ssid 01:23:45:67:89:ab 2437 0 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] hotel-free-wifi > add_network 0 > set_network 0 ssid "hotel-free-wifi" OK > set_network 0 psk "password" OK > enable_network 0 OK <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>Trying to associate with 01:23:45:67:89:ab (SSID='hotel-free-wifi' freq=2437 MHz) <3>Associated with 01:23:45:67:89:ab <3>WPA: Key negotiation completed with 01:23:45:67:89:ab [PTK=CCMP GTK=TKIP] <3>CTRL-EVENT-CONNECTED - Connection to 01:23:45:67:89:ab completed [id=0 id_str=] > save_config OK > quit
他の Wi-Fi に切り換えるには:
user $
wpa_cli
wpa_cli v2.5 Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors This software may be distributed under the terms of the BSD license. See README for more details. > list_networks network id / ssid / bssid / flags 0 TAMO any 1 ORBI705 any 2 ORBI any 3 Tangerine any 4 271 any 5 POCO X3 Pro any 6 Orbi Guest any 7 hackerspace any 8 HUAWEI-25 a-2 any 9 A1-13 any > select_network 1
接続する方法についてのさらなる詳細を Arch Linux wiki で確認できます。[3]
手動で編集する
もちろん、構成ファイル /etc/wpa_supplicant/wpa_supplicant.conf は手動で編集することもできます。しかしながら、複数のアクセスポイントへ接続する必要がある場合は、この作業は大変な手間となるでしょう。
ファイル例が wpa_supplicant.conf(5) man ページや /usr/share/doc/wpa_supplicant-2.4-r3/wpa_supplicant.conf.bz2 にあります。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
ap_scan=1
network={
bssid=00:50:17:31:1a:11
ssid="YourSSID"
psk="your-secret-key"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
すべての安全でないネットワークに自動接続する
network={
key_mgmt=NONE
priority=-999
}
トラブルシューティング
思った通りに動作しない場合は、次のことを試してみて、出力結果を分析してください。
既知のバグを確認する
USE フラグを確認する
既知のセキュリティ上の欠陥のためにデフォルトで無効化されている、古い wifi プロトコルのための USE フラグが 2 つあります: tkip と wep です。古い wifi ルータのためには、これらの USE フラグを有効化して wpa_supplicant を再インストールしてください。
rfkill: WLAN soft blocked
rfkill がインターフェースをブロックしている場合は、まずそのインターフェース番号を以下で調べてください:
user $
rfkill list
0: ideapad_wlan: Wireless LAN Soft blocked: yes Hard blocked: no 1: ideapad_bluetooth: Bluetooth Soft blocked: yes Hard blocked: no 2: hci0: Bluetooth Soft blocked: yes Hard blocked: no 3: phy0: Wireless LAN Soft blocked: yes Hard blocked: no
そして、以下でインターフェースのブロックを解除することができます:
root #
rfkill unblock 3
wpa_supplicant をデバッグモードで実行する
起動中のサプリカントのインスタンスをすべて停止してください:
root #
killall wpa_supplicant
下のようなオプションがデバッグに有用です(下の出力を見るには "展開する" をクリックしてください):
root #
wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant/ -c/etc/wpa_supplicant/wpa_supplicant.conf -dd
wpa_supplicant v2.2 random: Trying to read entropy from /dev/random Successfully initialized wpa_supplicant Initializing interface 'wlp8s0' conf '/etc/wpa_supplicant/wpa_supplicant.conf' driver 'nl80211' ctrl_interface '/var/run/wpa_supplicant' bridge 'N/A' Configuration file '/etc/wpa_supplicant/wpa_supplicant.conf' -> '/etc/wpa_supplicant/wpa_supplicant.conf' Reading configuration file '/etc/wpa_supplicant/wpa_supplicant.conf' ctrl_interface='DIR=/var/run/wpa_supplicant GROUP=wheel' update_config=1 Line: 6 - start of a new network block
ログ出力を有効化する
Gentoo net.* スクリプトのログ出力を有効化する
modules_wlan0="wpa_supplicant"
wpa_supplicant_wlan0="-Dnl80211 -d -f /var/log/wpa_supplicant.log"
config_wlan0="dhcp"
上の設定後、出力を監視するためにターミナル内で tail コマンドを実行し、別のターミナルで net.wlan0 デバイスを再起動してください:
root #
tail -f /var/log/wpa_supplicant.log
root #
/etc/init.d/net.wlan0 restart
参照
関連項目
- iwd — a wireless daemon intended to replace wpa_supplicant
外部資料
- wpa_supplicant / hostapd Developers' documentation for wpa_supplicant and hostapd
- sample config for wpa_supplicant
- HOWTO: Remote access point with wpa_supplicant (Gentoo Forums)
- Extensible Authentication Protocol (Wikipedia)
- Extensible Authentication Protocol (wiki.freeradius.org)
- wpa_supplicant upstream just accepted patch to allow interface matching
- https://www.kb.cert.org/vuls/id/CHEU-AQNN3Z