wpa_supplicant

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Wpa supplicant and the translation is 100% complete.

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

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
fils Add support for Fast Initial Link Setup (802.11ai)
hs2-0 Add support for 802.11u and Passpoint for HotSpot 2.0
macsec Add support for wired macsec
mbo Add support Multiband Operation
mesh Add support for mesh mode
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-EAPeap=PEAP を設定ファイルに追加する必要があります。

無線インターフェースのセットアップ

単一の無線インターフェースでの使用には、構成ファイルは 1 ファイルだけ必要になるでしょう。

ファイル /etc/wpa_supplicant/wpa_supplicant.conf
# '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 を提供する任意の無線アクセスポイントに接続する

ファイル /etc/wpa_supplicant/wpa_supplicant.conf
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 キーを使う設定ファイル

ファイル /etc/wpa_supplicant/wpa_supplicant_wired.conf
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 でどのセキュリティポリシーが使用されているかに基づいて、設定オプションが選択されます。これは主にテストを目的としたものであり、通常の使用には推奨されません。
ファイル /etc/wpa_supplicant/wpa_supplicant_wired.conf
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) とともに使用することができます。
ファイル /etc/wpa_supplicant/wpa_supplicant_wired.conf
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 以降であることを前提としています

ファイル /etc/conf.d/wpa_supplicant
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 ファイルを完成させてください:

ファイル /etc/conf.d/wpa_supplicant
wpa_supplicant_args="-B -M -c/etc/wpa_supplicant/wpa_supplicant.conf"

有線インターフェースのために認証が必要な場合は、設定ファイルは次のようになるでしょう

ファイル /etc/conf.d/wpa_supplicant
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 としてください。ここで DEVNAMEwlan0 のようなデバイスの名前です。

次に、/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 を実行してください。

ファイル /etc/conf.d/wpa_supplicantドライバを wext に設定する
wpa_supplicant_args="-D wext"

Netifrc のためのセットアップ

wpa_supplicant を使うよう Netifrc を構成するためには:

ファイル /etc/conf.d/net
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 にあります。

ファイル /etc/wpa_supplicant/wpa_supplicant.conf
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
}

すべての安全でないネットワークに自動接続する

ファイル /etc/wpa_supplicant/wpa_supplicant.conf
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.* スクリプトのログ出力を有効化する

ファイル /etc/conf.d/netGentoo 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 — an up-and-coming wireless daemon for Linux.

外部の情報