【現象】
無線LAN がつながらない
※「つながらない」ので、つながるように対応するわけだが、対応とともに現象も変わっていく
①起動時デバイスが認識しない
②つながったとしても断続的に通信が消れる
③ifup wlan0 にて起動させる時、アドレスを自動取得できない
【環境】
OS: CentOS 5.1 → 5.3
APL: wpa_supplicant v0.4.8 → 0.5.10
無線LANルータ: WHR-G54S firm:Ver.1.40 → 1.43
無線LAN子機: WLI-U2-KG54L(USB)
暗号化方式: AES(CCMP)
【接続手順】
1.ルータの暗号化方式を “AES” に設定する
2.ドライバ(zd1211rw、ndiswrapper) に合わせてインターフェース設定
3.設定ファイル “/etc/sysconfig/wpa_supplicant” “/etc/wpa_supplicant/wpa_supplicant.conf” を編集
4.wpa_supplicantサービス を起動
※2~3の手順は wpa_supplicant 参照
【対応】
1.「接続手順」に基づいて設定後、リブートすると無線LAN子機を認識しない
①コマンドにてデバイスの状態を確認
> lsusb
無線LAN子機の出力結果は無し
> dmesg | grep usb
usb 2-1: device descriptor read/64, error -110
usb 2-1: new full speed USB device using uhci_hcd and address 4
usb 2-1: device not accepting address 4, error -110
usb 2-1: new full speed USB device using uhci_hcd and address 5
usb 2-1: device not accepting address 5, error -110
→デバイスを抜き差しにて復帰する
②コマンドにてデバイスの状態を確認(正常時)
> lsusb
Bus 002 Device 006: ID 0411:00da MelCo., Inc.
※CentOS 5.3 の場合はデバイス名も表示される ↓
Bus 002 Device 006: ID 0411:00da MelCo., Inc. WLI-U2-KG54L
> dmesg | grep usb
usb 2-1.1: new full speed USB device using uhci_hcd and address 6
usb 2-1.1: configuration #1 chosen from 1 choice
usb 2-1.1: reset full speed USB device using uhci_hcd and address 6
2.無線LANクライアントから無線LANルータに ping にて疎通確認するが、断続的に結果が NG となる
①”ifdown wlan0;ifup wlan0″ にてインターフェースのダウンアップ
→状態変わらず
②”service network restart” にてネットワークサービスの再起動
→状態変わらず
③”service wpa_supplicant restart” にて wpa_supplicantサービスの再起動
及び、インターフェースの再起動
→状態変わらず
※インターフェースの起動中、wpa_supplicantの停止/再起動等行うとフリーズする場合がある
④ドライバのアンインストール/再インストール
手順は “wpa_supplicant” を参考にする
→状態変わらず
⑤CentOS 5.1 → 5.3 へアップグレードを実行する
それに伴い wpa_supplicant のバージョンも v0.4.8 → 0.5.10 と変更となる
→ping も途切れなくなり、正常に通信できるようになる
/etc/sysconfig/wpa_supplicant の内容
<v0.4.8>
# wlan0 and wifi0
# INTERFACES=”-iwlan0 -iwifi0″
INTERFACES=”-iwlan0″
# ndiswrapper and prism
# DRIVERS=”-Dndiswrapper -Dprism”
DRIVERS=”-Dwext”
<v0.5.10>
# Use the flag “-i” before each of your interfaces, like so:
# INTERFACES=”-i eth1 -i wlan0″
INTERFACES=”-i wlan0″
# Use the flag “-D” before each driver, like so:
#DRIVERS=”-D ndiswrapper”
DRIVERS=”-D wext”
# Other arguments
# -u Enable the D-Bus interface (required for use with NetworkManager)
# -f Log to /var/log/wpa_supplicant.log
OTHER_ARGS=”-u -f /var/log/wpa_supplicant.log”
※wpa_supplicant を v0.4.8 → 0.5.10 にアップグレードすると設定ファイルの内容も変更になる
ndiswrapper をドライバとして使用する場合は v0.4.8 の時は DRIVERS=”-Dndiswrapper で
設定して問題はなかったが0.5.10 の時は DRIVERS=”-D ndiswrapper” にすると /var/log/wpa_supplicant で
”Device wlan0 kernel driver name: ndiswrapper.” というエラーがでる
DRIVERS=”-D wext” に記述を変えればエラーはでない
3.再起動後、インターフェースがアドレスを自動取得できない
①tail -f /var/log/wpa_supplicant にてログを確認
→認証が成功しても DISCONNECTEDログ が多いので切断しているよう
WPA: Key negotiation completed with 00:16:01:90:e7:ab [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED – Connection to 00:16:01:90:e7:ab completed (auth) [id=0 id_str=]
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
Trying to associate with 00:16:01:90:e7:ab (SSID=’20451EB71EB14D7D116A0DDF4FF5E493′
freq=2412 MHz)
Associated with 00:16:01:90:e7:ab
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
CTRL-EVENT-DISCONNECTED – Disconnect event – remove keys
以下、繰り返し
②wpa_cli → level 0 にて wpa_supplicant の詳細ログを確認
→上記と同様のログ
③tail -f /var/log/messages にてログを確認
Nov 1 00:42:19 localhost kernel: ADDRCONF(NETDEV_UP): wlan0: link is not ready
Nov 1 00:42:21 localhost kernel: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Nov 1 00:42:22 localhost dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 1 00:42:28 localhost dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 1 00:42:35 localhost dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 7
Nov 1 00:42:42 localhost dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 20
Nov 1 00:43:03 localhost dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 1 00:43:11 localhost dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
Nov 1 00:43:15 localhost dhclient: No DHCPOFFERS received
→dhcp割当元(この場合は無線LANルータ) からの DHCPOFFERS が無い事がわかる
※インターフェースの起動中、wpa_supplicantの停止/再起動等行うとフリーズする場合がある
⑤wireshark にて通信状態を確認する
→無線LANルータ からの DHCPOFFERS が無い以外に原因は見当たらない
⑥無線LANルータ が正常に起動しているか確認
別の PC から無線LANルータ への疎通確認及び、アドレスを割り当てられるか確認
→疎通確認、アドレス取得問題なくできた
⑦無線LANルータ のログを確認
→割り当て出来ないクライアントからの Requestログ がない
⑧無線LANルータ のファームウエアを 1.40 → 1.43 にアップデートする
→正常に通信できるようになる
正常にアドレス取得出来た後に 無線LANルータ のログを確認したところ
2008/01/03 21:25:25 DHCPS sending ACK to xx.xx.xx.xx
2008/01/03 21:25:25 DHCPS sending OFFER of xx.xx.xx.xx
上記の 無線LANルータからの通信ログはあるが
無線クライアントの Requestログ は無かった
【結論】
Linux用の無線LANドライバは意外とまだ新しいものもあり、動作不安定のものもあるかも(?)
無線通信が出来ない場合は、すべてのデバイスのファームウエアをアップデートするのがいいかもしれない