この記事では、Xorg / X11ユーティリティーなしでwpa_supplicantを使用してWiFiを構成する方法を説明します。 これは、基本的なOSサービスが最小限のリモートアクセスハードウェアセットで適切に動作するために必要です。 プログラムはサービスとして実行され、設定は構成ファイルを編集することによって行われます。
簡単な方法で、この方法でオープンアクセスポイントに接続できます。
[root@home ~]$ wpa_cli > add_network > set_network 0 ssid "MYSSID" > set_network 0 key_mgmt NONE > enable_network 0
真剣かつ永続的にする必要がある場合は、内部にお願いします。
Wpa_supplicantの概要
wpa_supplicantとは何ですか?
- Linux、* BSD、Windows、Mac OS Xおよびその他のシステム用のIEEE 802.11標準のクロスプラットフォームオープン実装。
- WPA2、WPA、および古いワイヤレスLANセキュリティプロトコルの完全サポート。
- MLME命令を実行するサプリカントおよびSMEオペレーターの機能を実行するユーザースペースアプリケーション。
Wpa_supplicantサポート
- WPAおよび完全にIEEE 802.11i / RSN / WPA2。
- WPA-PSKおよびWPA2-PSK(事前共有キー)(「WPA-Personal」)。
- WPAとEAP(つまり、RADIUS認証サーバー)(「WPA-Enterprise」)キー管理CCMP、TKIP、WEP(104/128および40/64ビット)。
- RSNキャッシング、PMKSA:事前認証。

wpa_supplicantはアクセスポイントとどのように通信しますか?
- ネットワークインターフェイスは、 wpa_supplicantが起動する前にインストールされたドライバーで正しく機能する必要があります 。
- Wpa_supplicantは、利用可能なBasic Service Set(BSS)をスキャンするようカーネルドライバーに要求します。
- Wpa_supplicantは、設定に従ってBSSを選択します。
- Wpa_supplicantは、選択したBSSとの接続を確立するようカーネルドライバーに要求します。
- WPA-EAPの場合:EAP認証は、組み込みのIEEE 802.1Xサプリカントによって、または認証サーバーを備えた外部Xsupplicantによって実行されます。
- WPA-EAPの場合:IEEE 802.1Xサプリカントからマスターキーを受信しました。
- WPA-PSKの場合、 wpa_supplicantはPSKパスワードをセッションマスターキーとして使用します。
- Wpa_supplicantは、アクセスポイントの認証者と4段階のネゴシエーション[1]およびグループキーネゴシエーションを実行します。
- Wpa_supplicantは、単方向およびブロードキャストパケット[2]を暗号化し、その後、通常のデータ交換が開始されます。
wpa_supplicantの主な大きな利点は、その一意性 、つまり、プログラムが1つのことを実行するが、それをうまく実行する場合のUnix Way原則への準拠です。 ある意味では、 wpa_supplicantは Gentoo Wayでもあります 。 最初は注意と忍耐が必要ですが、その後は完全に忘れることができます。 プログラムが構成され、実行されると、プログラムはイベントのストリームから完全にドロップアウトし、 ps -ef
から数行になります。 点滅せず、システムトレイで点滅せず、再接続、接続、切断されたワイヤレスネットワークについては通知しません。 自分で探すまで存在しません。
マイナス- 構成と構成の複雑さ 。 Network Manager
ウィンドウのtyrk-tyrk-tyrkと比較すると、多くの騒ぎがあります。AndroidデバイスからのWiFi接続は言うまでもありません。 Linuxラップトップを使用して旅行を計画している場合は、空港、ホテル、または職場の無料WiFiホットスポットにすばやく接続するために、より使いやすいフロントエンドワイヤレスセットアップを好むでしょう。 家庭用無線インターネットの場合、それだけです。
設置
グラフィックフロントエンドを選択しない場合、プログラムは依存関係をほとんどプルしません。 Gentoo Linuxでは、示されているようにフラグが設定されたインストールが機能します。
(5:562)$ equery uses wpa_supplicant [ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for net-wireless/wpa_supplicant-2.6: UI - - ap : Add support for access point mode + + dbus : Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc) - - eap-sim : Add support for EAP-SIM authentication algorithm - - fasteap : Add support for FAST-EAP authentication algorithm - - gnutls : Add support for net-libs/gnutls (TLS 1.0 and SSL 3.0 support) + + hs2-0 : Add support for 802.11u and Passpoint for HotSpot 2.0 - - p2p : Add support for Wi-Fi Direct mode - - qt4 : Add support for the Qt GUI/Application Toolkit version 4.x - - 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 - - smartcard : Add support for smartcards + + ssl : Add support for Secure Socket Layer connections - - tdls : Add support for Tunneled Direct Link Setup (802.11z) - - uncommon-eap-types : Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE - - wps : Add support for Wi-Fi Protected Setup
インストール。
-
emerge -av wpa_supplicant
#Gentoo -
aptitude install wpasupplicant
#Debian -
yum install wpa_supplicant
#Redhat - pacman
pacman -S wpa_supplicant
#アーチ
設定ファイルなしの接続
一度だけ接続する必要がある場合は、構成ファイルを作成して設定のすべての詳細を調べる必要はありません。 コマンドラインからいくつかの指示を入力するだけです。
オープンネットワークの例が最初に示されました。 閉じたWPAネットワークの場合、クイック接続は次のようになります。
まず、wpa_supplicantプログラム自体とそれに付随するwpa_cli
を実行する必要があります 。
[root@home ~]$ wpa_supplicant -Dnl80211 -iwlan0 -C/var/run -u & [root@home ~]$ wpa_cli -p/var/run
次に、 wpa_cli
インタラクティブインターフェイスからセットアップします。
> add_network > set_network 0 ssid "name of AP" > set_network 0 key_mgmt WPA-PSK > set_network 0 pairwise TKIP > set_network 0 psk "key" > enable_network 0
閉じたWPA2ネットワークの場合:
> add_network > set_network 0 ssid "name of AP" > set_network 0 key_mgmt WPA-PSK > set_network 0 pairwise CCMP > set_network 0 psk "key" > enable_network 0
最後に、DHCPデーモンを手動で起動する必要があります。
[root@home ~]$ dhcpcd wlan0
アドホックネットワークに接続する
私はこれに遭遇したことがありませんが、あなたはすべての準備ができている必要があります。 オープンなアドホックに接続します。
> add_network > set_network 0 ssid "adhoc-ssid" > set_network 0 mode 1 > set_network 0 frequency 2412 > set_network 0 key_mgmt NONE > enable_network 0
iw
同じです。
> iw dev wlan0 del > iw phy phy0 interface add wlan0 type ibss > ifconfig wlan0 up > iw dev wlan0 scan > iw dev wlan0 ibss join AdHocNetworkName 2412
ホームネットワークのセットアップ
ここで楽しい部分はセットアップです。 このプロセスは、 Arch Wiki 、 Debian Wiki、 Gentoo Wikiについて文書化されていますが、もちろん詳細はありません。
プログラムは通常/etc/wpa_supplicant/
ディレクトリに配置され、タスクはwpa_supplicant.conf
構成ファイルを正しく構成し、 それをワイヤレスネットワークインターフェイスの起動にバインドすることです。
wpa_supplicant.conf
から始めましょう。 自宅からWPA / WPA2に接続している場合、 WPA-PSK ("WPA-Personal")
モードに対応するWiFi接続にパスワードを使用している可能性が高いです。 WEP暗号化オプションは、オープンネットワークよりも優れていないため、考慮しません。
ドキュメントから典型的な設定を取得します。 たとえばこれ。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel # # home network; allow all valid ciphers network={ ssid="home" scan_ssid=1 key_mgmt=WPA-PSK psk="very secret passphrase" }
最初の行が必要ですctrl_interface
がないとctrl_interface
プログラムは起動しません。 GROUP = wheelは、wpa_gui GUIで通常のユーザーの下から実行するために必要ですが、これは私たちの方法ではありません。 したがって、ルートGROUP=0
変更しGROUP=0
。
ctrl_interface_group=0 ctrl_interface=/var/run/wpa_supplicant ap_scan=1
設定ファイルの各ネットワークには、 network {}
ブロックが必要です。 ソースコードをざっと調べてap_scan
と、 ap_scan
ファイルにap_scan
変数の適切なap_scan
見つかり、マニュアルとユーザーマニュアルの説明は非常に少ないことがわかりました。
ap_scan=0 # ap_scan=1 #wpa_supplicant , - ap_scan=2 # 0, SSID, ndiswrapper
ap_scan-APスキャン/選択
デフォルトでは、wpa_supplicantはドライバーにAPスキャンの実行を要求し、スキャン結果を使用して適切なAPを選択します。 もう1つの方法は、ドライバーがAPのスキャンと選択を行い、ドライバーからのIEEE 802.11アソシエーション情報に基づいてEAPOLフレームを処理するためにwpa_supplicantを使用することです。
1:wpa_supplicantはスキャンとAP選択を開始します(デフォルト)。
0:ドライバーは、スキャン、APの選択、IEEE 802.11アソシエーションパラメーター(WPA IE生成など)を処理します。 IEEE 802.1Xモードを使用する場合、このモードは非WPAドライバーでも使用できます。
APとの関連付けを試みないでください(つまり、外部プログラムは関連付けを制御する必要があります)。 このモードは、有線イーサネットドライバーを使用する場合にも使用する必要があります。
2:0に似ていますが、セキュリティポリシーとSSID(BSSIDではありません)を使用してAPに関連付けます。 これは、たとえば、ndiswrapperおよびNDISドライバーで使用して、非表示のSSIDおよび最適化されたローミングでの操作を可能にします。
このモードでは、ドライバーが正常な関連付けを報告するまで、構成内のネットワークブロックが1つずつ試行されます。 各ネットワークブロックには明示的なセキュリティポリシーが必要です(つまり、1つだけ
key_mgmt、pairwise、group、proto変数のリストのオプション)。
注:ap_scan = 2は、nl80211ドライバーインターフェイス(現在のLinuxインターフェイス)では使用しないでください。 ap_scan = 1は、nl80211で動作する最適化された作業です。 非表示のSSIDを使用してネットワークを検索するには、nl80211でネットワークブロックのscan_ssid = 1を使用できます。
-
bssid
基本サービスセット識別子(BSSID)、アクセスポイントの物理アドレス。 -
key_mgmt
認証プロトコル。 -
pairwise
-WPA2にはCCMPを、WPA2にはTKIPを指定します。 -
proto
-WPA / WPA2。 - psk-事前共有キーのパスワードハッシュ。
group:WPAの受け入れられたグループ(ブロードキャスト/マルチキャスト)暗号のリスト
CCMP = CBC-MACを使用したカウンターモードのAES [RFC 3610、IEEE 802.11i / D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i / D7.0]
WEP104 = 104ビットキーのWEP(Wired Equivalent Privacy)
WEP40 = 40ビットキーを使用したWEP(Wired Equivalent Privacy)[IEEE 802.11]
設定されていない場合、デフォルトはCCMP TKIP WEP104 WEP40になります。
pairwise:WPAの受け入れられたペアワイズ(ユニキャスト)暗号のリスト
CCMP = CBC-MACを使用したカウンターモードのAES [RFC 3610、IEEE 802.11i / D7.0]
TKIP = Temporal Key Integrity Protocol [IEEE 802.11i / D7.0]
NONE =グループキーのみを使用(非推奨。APがペアワイズキーをサポートしている場合は含まれません)
proto:受け入れられたプロトコルのリスト
WPA = WPA / IEEE 802.11i / D3.0
RSN = WPA2 / IEEE 802.11i(WPA2はRSNのエイリアスとしても使用できます)
設定されていない場合、デフォルトはWPA RSNになります
key_mgmt:受け入れられた認証済みキー管理プロトコルのリスト
WPA-PSK = WPA事前共有キー(これには「psk」フィールドが必要です)
WPA-EAP = EAP認証を使用するWPA(これは、IEEE 802.1X EAP認証に外部プログラム(Xsupplicantなど)を使用できます)
IEEE8021X = EAP認証および(オプションで)動的に生成されたWEPキーを使用するIEEE 802.1X
NONE = WPAは使用されません。 平文または静的WEPを使用できます
設定されていない場合、これはデフォルトでWPA-PSK WPA-EAPになります。
psk
パスワードハッシュを作成します。
$ wpa_passphrase MYSSID passphrase
すべてがネットワーク構成を作成する準備ができています。 結果のファイルは次のようになります。
ctrl_interface_group=0 ap_scan=1 ctrl_interface=/var/run/wpa_supplicant network={ proto=WPA2 pairwise=CCMP key_mgmt=WPA-PSK priority=5 ssid="MYSSID" bssid=44:b0:51:dc:ba:f8 psk=ce55977186ae1df2dffeb571acee8dacd92f49edddbdef53623132e3c24567ae }
bssid
、 group
、 proto
、およびpairwise
のbssid
値は、ワイヤレスネットワークをスキャンすることで決定できます。
[root@home ~]$ iwlist <wlan_interface> scan
Wireless Tools
スイートのiwlist
コマンドは廃止され、現在はiw
ます。
[root@home ~]$ iw dev <wlan_interface> scan
オフィスの802.1Xを構成する
IEEE 802.1X規格は、WiFiネットワークに接続するためのより厳密なモデルを定義しています。 psk
パスワードの代わりに、サーバー証明書を提示する必要があります。
-
ca_cert
-PEMまたはDER形式のCA証明書への絶対パスは、サーバー証明書を確認するために必要です。 -
ca_path
信頼できるリストに追加するCA証明書ファイル(PEM形式)が保存されているディレクトリへの絶対パス。 -
client_cert
-PEMまたはDER形式のクライアント証明書への絶対パス。 - eap-サポートされているEAPメソッドのスペース区切りリスト:MD5、MSCHAPV2、OTP、GTC、TLS、PEAP、またはTTLS。
-
identity
ユーザー名などのEAP ID。 -
password
-EAPパスワード。
これは、ユーザーアカウント情報が必要な802.1X PEAP認証を使用して、WPAエンタープライズモードでネットワークに接続するように構成されたブロックのように見える場合があります。
network = { ssid="Company WPA2 EAP" key_mgmt=WPA-EAP pairwise=TKIP group=TKIP eap=PEAP identity="username@domain" password="your_passphrase" ca_cert="/etc/cert/ca.pem" phase1="peapver=0" phase2="MSCHAPV2" }
これは、802.1X EAP-TLS認証を使用してWPA-Enterpriseモードでネットワークに接続するように構成されたブロックの例であり、サーバーとクライアントの証明書が必要です。
network = { ssid="Company WPA2 TLS" key_mgmt=WPA-EAP pairwise=CCMP group=CCMP eap=TLS ca_cert="/etc/cert/ca.pem" private_key="/etc/cert/privkey.p12" private_key_passwd="your_passphrase PKCS#12" }
wpa_supplicantをネットワークカードにバインドする
Gentoo Linuxの場合 、2行を/etc/conf.d/net
追加し/etc/conf.d/net
。
modules=( "wpa_supplicant" ) wpa_supplicant_wlan0="-Dnl80211"
サポートされている-D<driver>
ドライバーのリスト。 最新のチップとカーネルバージョンには、 nl80211
適しています。 古い鉄のwext
は離陸することができます。
-
nl80211
新しいドライバー。 -
wext
-Linuxワイヤレス拡張機能(汎用)。 -
wired
-wpa_supplicant有線イーサネットドライバー。 -
roboswitch
-wpa_supplicant Broadcomスイッチドライバー。 -
bsd
-BSD 802.11サポート(Atherosなど)。 -
ndis
-Windows NDISドライバー。
wlan0
ネットワークカードはlo0
とリンクする必要があります。
lrwxrwxrwx 1 root root 6 29 2014 /etc/init.d/net.wlan0 -> net.lo
また、 wpa_supplicantを自動実行に追加する必要があります 。
[root@home ~]$ rc-update add wpa_supplicant default
Debianユーザーは、 /etc/network/interfaces
ファイルにエントリを追加します。
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
RedHatユーザーは/etc/sysconfig/wpa_supplicant
追加し/etc/sysconfig/wpa_supplicant
INTERFACES="-iwlan0"
ファイル/etc/sysconfig/network-scripts/ifcfg-wlan0
ESSID="home" NAME=wlan0 MODE=Managed KEY_MGMT=WPA-PSK TYPE=Wireless BOOTPROTO=dhcp DEFROUTE=yes ONBOOT=yes HWADDR=aa:bb:cc:dd:ee IPV6INIT=yes IPV6_AUTOCONF=yes
デバッグ
wpa_supplicantがアクセスポイントに正常に接続した後、 dmesg
接続セットアッププロトコルを確認できます。
[243960.587] cfg80211: World regulatory domain updated: [243960.587] cfg80211: DFS Master region: unset [243960.587] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time) [243960.587] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A) [243960.587] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz, 92000 KHz AUTO), (2000 mBm), (N/A) [243960.587] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A) [243960.587] cfg80211: (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (2000 mBm), (N/A) [243960.587] cfg80211: (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (2000 mBm), (0 s) [243960.587] cfg80211: (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s) [243960.587] cfg80211: (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), [243960.587] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), [243963.070] wlan0: authenticate with aa:bb:cc:dd:ee [243963.075] wlan0: send auth to aa:bb:cc:dd:ee (try 1/3) [243963.077] wlan0: authenticated [243963.084] wlan0: associate with aa:bb:cc:dd:ee (try 1/3) [243963.088] wlan0: RX AssocResp from aa:bb:cc:dd:ee (capab=0x411 status=0 aid=3) [243963.090] wlan0: associated
代わりにエラーが表示される場合:
Successfully initialized wpa_supplicant nl80211: Driver does not support authentication/association or connect commands wlan0: Failed to initialize driver interface
次に、 wext
代わりにnl80211
ドライバーを使用する必要があります。 そしてエラー付き:
WEXT: Driver did not support SIOCSIWAUTH for AUTH_ALG, trying SIOCSIWENCODE
それどころか、 wext
はwext
必要があります。
エラーを特定できない状況では、 -dd
してwpa_supllicantを直接実行します。
[root@home ~]$ wpa_supplicant -Dnl80211 -iwlan0 -C/var/run/wpa_supplicant/ -c/etc/wpa_supplicant/wpa_supplicant.conf -dd
使用材料
- WL18XX Linux WIrelessアーキテクチャ
- Linuxカーネルワイヤレス
- RHEL 7のwpa_supplicantとwifi
- Linux WPAサプリカント(IEEE 802.1X、WPA、WPA2、RSN、IEEE 802.11i)