wpa_supplicant 工具使用

4. 無線網絡

內容:

4.a. 介紹

目前您可以使用我們提供的wireless-toolswpa_supplicant工具來配置無線網絡。請記住重要的一點是,您對無線網絡的配置是全局性的,而非針對具體的接口。

wpa_supplicant是一個最好的選擇,但缺點是它不支持所有的驅動。請瀏覽wpa_supplicant網站獲得它所支持的驅動列表。另外,wpa_supplicant目前只能連接到那些你已經配置好ESSID的無線網絡。

wireless-tools支持幾乎所有的無線網卡和驅動,但它不能連接到那些只支持WPA的AP。

警告: 由於linux-wlan-ng驅動有其自己特有的安裝和配置方式,而且與其他軟件的方式完全不同,因此目前它並不被baselayout所支持。有傳聞說linux-wlan-ng的開發者要將它的設置方式改成wireless-tools的方式——到時候您就可以在baselayout中使用linux-wlan-ng了。

4.b. WPA Supplicant

WPA Supplicant工具包可以讓您連接到那些使用WPA的AP。因爲還只是beta版,所以它的配置方法仍會常常變化——儘管如此,在大部分情況下它已經能很好的工作。

代碼 2.1: 安裝wpa_supplicant

# emerge net-wireless/wpa_supplicant

重要: 要讓wpa_supplicant正常工作,您必須在內核中打開CONFIG_PACKET支持。

現在我們需要配置一下/etc/conf.d/net文件以便我們可以選擇使用wpa_supplicant而不用wireless-tools(兩者都安裝在系統中時,默認使用的是wireless-tools)。

代碼 2.2: 在/etc/conf.d/net中配置wpa_supplicant

# 使用wpa_supplicant代替wireless-tools
modules=( "wpa_supplicant" )

# 因爲wpa_supplicant還不能很好的自動偵測驅動,所以需要我們爲其指定正在使用的驅動。
wpa_supplicant_eth0="-Dmadwifi"

注意: 如果您用host-ap驅動,您首先要將無線設備卡設置成Managed模式以便能正確地配合wpa_supplicant工作。你可以在/etc/conf.d/net中設置iwconfig_eth0="mode managed"來實現這一點。

看起來這很簡單,不是麼?不過我們還需要配置wpa_supplicant本身,這將會比較麻煩一些,具體取決於你要連接的AP的安全程度。下面的例子是從/usr/share/doc/wpa_supplicant-<version>/wpa_supplicant.conf.gz中抽取並簡化而來的,此文件出自wpa_supplicant軟件包。

代碼 2.3: 一個/etc/wpa_supplicant/wpa_supplicant.conf的例子

# 請不要修改下面這一行內容,否則將不能正常工作
ctrl_interface=/var/run/wpa_supplicant

# 確保只有root用戶能讀取WPA的配置
ctrl_interface_group=0

# 使用wpa_supplicant來掃描和選擇AP
ap_scan=1

# 簡單的情形:WPA-PSk密碼驗證方式,PSK是ASCII密碼短語,所有合法的加密方式都允許連接
network={
  ssid="simple"
  psk="very secret passphrase"
  # 優先級越高,就能越早匹配到。
  priority=5
}

# 與前面的設置相同,但要求對特定的SSID進行掃描(針對那些拒絕廣播SSID的AP)
network={
  ssid="second ssid"
  scan_ssid=1
  psk="very secret passphrase"
  priority=2
}

# 僅使用WPA-PSK方式。允許使用任何合法的加密方式的組合
network={
  ssid="example"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}

# 明文連接方式(不使用WPA和IEEE802.1X)
network={
  ssid="plaintext-test"
  key_mgmt=NONE
}

# 共享WEP密鑰連接方式(不使用WPA和IEEE802.1X)
network={
  ssid="static-wep-test"
  key_mgmt=NONE
  # 引號包含的密鑰是ASCII密鑰
  wep_key0="abcde"
  # 沒有引號包含的密鑰是十六進制密鑰
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}

# 共享WEP密鑰連接方式(無WPA和IEEE802.1X),使用共享密鑰IEEE802.11驗證方式
network={
  ssid="static-wep-test2"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
  auth_alg=SHARED
}

# 在IBSS/ad-hoc網絡中使用WPA-None/TKIP
network={
  ssid="test adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="secret passphrase"
}

4.c. Wireless Tools

初始設置和管理模式

Wireless Tools提供了一個通用的方法設置無線網絡接口,最高可達WEP安全等級。雖然WEP是一種較弱的安全方式,但它也是最普遍使用的加密方式。

Wireless Tools的配置由幾個主要變量來控制,以下配置文件的例子描述了您所需要了解的所有內容。要牢記於心的是:可確保“連接到沒有加密的並且信號最強的AP”的配置並不存在——但我們會一直嘗試並幫您連接到某個AP。

代碼 3.1: 安裝wireless-tools

# emerge net-wireless/wireless-tools

注意: 儘管您可以將無線設置保存在/etc/conf.d/wireless中,但是本指南還是推薦您將它們保存在/etc/conf.d/net之中。

重要: 需要參閱文檔變量名稱

代碼 3.2: 在/etc/conf.d/net中配置iwconfig的例子

# 使用iwconfig而不用wpa_supplicant
modules=( "iwconfig" )

# 爲名爲ESSID1和ESSID2的AP配置WEP密鑰
# 您最多可以配置4個WEP密鑰,但任何時候只有其中1個起作用。
# 所以我們提供一個默認的下標[1]來設置密鑰[1],之後緊接着把活動密鑰設置爲[1]。
# 我們這麼做以備你讓其他ESSID使用[1]以外的WEP密鑰。
#
# key加上前綴s:意味着它是一個ASCII密鑰,否則它就是一個16進制密鑰。
#
# enc open 指定開放安全性(最安全)
# enc restricted 指定限制安全性(較不安全)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"

# 以下僅在我們掃描可用的AP時起作用

# 有時有多個AP可見,所以我們需要規定一個首選的連接次序。
preferred_aps=( "ESSID1" "ESSID2" )

細緻調整AP選擇

您可以添加一些額外的選項來細緻的調整AP的選擇,不過正常情況下並不需要這麼做。

您可以決定是否只連接首選的AP。默認情況下,當配置中列出的所有AP的連接都失敗後,這時如果環境中有一個非加密的AP,系統將會與其連接。這個行爲可以用associate_order變量來進行控制。下面給出一個相關的值的列表以及它們如何控制AP的選擇。

描述
any 默認行爲
preferredonly 只連接首選列表裏的可見AP
forcepreferred 按首選列表裏的順序強制連接AP,如果掃描不到的話
forcepreferredonly 不進行掃描——按首選列表裏的順序直接嘗試連接AP
forceany forcepreferred一樣,外加連接到任何其他可用的AP

最後我們還提供了一些blacklist_apsunique_ap的選擇。blacklist_aps的工作方式和preferred_aps類似。unique_ap是一個yesno的值,它決定了是否允許兩個無線接口同時接入一個AP。

代碼 3.3: blacklist_aps和unique_ap的例子

# 有時您根本不想連接到某些AP
blacklist_aps=( "ESSID3" "ESSID4" )

#如果您有多個無線網卡,您可以決定是否允許每個卡都能連接到同一個無線AP
# 可以取的值是"yes"或者"no"
# 默認設置爲"yes"
unique_ap="yes"

Ad-Hoc和Master模式

當您在管理模式中無法連接到任何AP時,您也可以將自己的設備設置成Ad-Hoc節點。

代碼 3.4: 失敗後轉用ad-hoc模式

adhoc_essid_eth0="This Adhoc Node"

那麼,要如何連接到Ad-Hoc網絡,或者乾脆運行於Master模式使自身成爲一個無線接入點呢?這裏有這樣一個設置!您可能需要參照本章前面的內容來指定WEP密鑰。

代碼 3.5: ad-hoc/master配置的例子

# 設定模式爲managed(默認)、ad-hoc或者master。並不是所有的設備都支持所有的模式。

mode_eth0="ad-hoc"

# 設定接口的ESSID
# 在managed模式中,這將強制此接口只嘗試連接特定的ESSID。

essid_eth0="This Adhoc Node"

# 指定使用的頻道,否則將默認使用頻道3。

channel_eth0="9"

重要: 以下是從NetBSD 文檔的BSDwavelan文檔中逐字逐句複製過來的內容。目前共計有14個可用的頻道;1-11頻道在北美是合法的,而在歐洲大部分地區則是頻道1-13,在法國是頻道10-13,在日本只允許使用頻道14。如果有疑問,請參考隨您所購買的無線網卡或AP附帶的說明書。確保調整您的無線網卡與AP(或工作於ad-hoc模式的另一塊無線網卡)使用同一個頻道。默認情況下,在北美和歐洲大部分地區銷售的無線網卡使用頻道3;在法國使用頻道11,在日本使用頻道14。

Wireless Tools故障修除

一些環境或驅動的問題可能會使無線網絡不能正常工作,下表多給出一些變量,可能有助於你解決問題。

參數 默認值 描述
iwconfig_eth0   請參看iwconfig的man page瞭解iwconfig各項參數
iwpriv_eth0   請參看iwpriv的man pages瞭解iwpriv各項參數
sleep_scan_eth0 0 在嘗試掃描前的休眠時間(以秒爲單位)。當驅動/固件需要時間激活時設置這個值。
sleep_associate_eth0 5 無線網絡嘗試連接到AP等待的秒數,超時則轉向下一個AP。
associate_test_eth0 MAC 一些驅動程序在失去連接或嘗試連接時不會重置無效AP的MAC地址,而有一些驅動程序在碰到這些情況時不會重設quality level。這裏有效的設定是MACqualityall
scan_mode_eth0   某些驅動必須在ad-hoc模式下掃描,因此若掃描失敗的話請嘗試把此變量設置成ad-hoc
iwpriv_scan_pre_eth0   掃描前先向接口發送一些iwpriv命令。更多細節請參看iwpriv的man page。
iwpriv_scan_post_eth0   掃描後向接口發送一些iwpriv命令。更多細節請參看iwpriv的man page。

4.d. 針對每個ESSID的網絡配置

有時,您連接ESSID1需要使用一個固定IP,而連接ESSID2要使用DHCP。實際上,大多數模塊變量可以針對每個ESSID來定義。下面我們給出具體的做法。

注意: 只有使用WPA Supplicant或者Wireless Tools時,這些設定才起作用。

重要: 需要參閱文檔變量名稱

代碼 4.1: 覆蓋每一個ESSID的配置

config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )

config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )

# 我們可以定義DNS服務器和其他的一些東西
# 注意:DHCP將覆蓋這些設定,除非我們要求它不要覆蓋
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"

# 根據無線AP的MAC地址來覆蓋相關設定
# 這在不同地點有相同ESSID的情況下非常有用
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )


發佈了116 篇原創文章 · 獲贊 11 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章