無線LAN

2007/05/13

librettoU100とVineLinux4.1でWPA-PSKの無線LANを使用する

以前、librettoU100とVineLinux3.2で無線LANを使うという記事で、めちゃめちゃ苦労しながらWEPでの無線LAN使用に成功し、VineLinux4.0からは簡単に無線LANが設定できるようになったため、librettoU100&VineLinuxで無線LANを満喫しております。

が、以前から頭にひっかかることがあったのでした。
今時、WEP でいいのか!? という点です。
Linuxで無線LANを使いたいがために、家中の無線LANの設定がWEPになっているのです。

そんな折、@ITで無線LANをWPAで暗号化して使用するにはという記事が出ていました。
なに!?LinuxでもWPA-PSKで無線LANできるのか!?これはやってみなくては!
ただし記事とは違って、嫁のWindowsノートがWPA-AESに対応していないので、WPA-TKIPでの設定です。


今回の環境
機種
libretto U100/190DSB
OS
Vine Linux4.1
ルータ
BUFFALO の AirStation WHR-HP-G54

まず前提としてルータの設定です。
ルータをWPA-PSKのTKIPに設定するのですが、
注意点としてESSIDをブロードキャストしないステルスモードでは
接続できないようです。ESSIDをサーチしに行った時に空白のIDが
返って来てしまいました。
私のルータ(BUFFALO の AirStation WHR-HP-G54)では、
「Any接続を許可」する設定になります。


アプリケーション→システム・ツール→Synapticパッケージマネージャ
でSynapticを起動
Synaptic のリポジトリに extras を追加していない場合は、
追加する必要があります。
Synapticの 設定→リポジトリ の各セクションに、extras を追加します。
セクションは、全体で
main plus updates nonfree extras
になります。

Synapticの再読み込みを行うと wpa_supplicant が追加されるので、
Synapticから wpa_supplicant をインストールします。

wpa_supplicant-gui ってのもあるので、一緒にインストールしておきました。
これはGUIでwpa_supplicantの状態をチェックできるので、
入れておくと確認が楽です。これのインストール時に、
一緒に qt もインストールされます。

/etc/sysconfig/wpa_supplicant を編集します。

# wlan0 and wifi0
# INTERFACES="-iwlan0 -iwifi0"
INTERFACES="-iath0"
# ndiswrapper and prism
# DRIVERS="-Dndiswrapper -Dprism"
#DRIVERS="-Dmadwifi"
DRIVERS="-D wext"


コメント(#)の無い所のみ必要です。あとはいりません。
INTERFACES="-iath0"
の部分ですが、libretto U100/190DSB は無線LANのチップに
Atheros製のチップ(Atheros AR5005GS)を使用しているので
ath0 になります。

#DRIVERS="-Dmadwifi" をコメントしていますが、ここはハマリどころでした。
WEPではmadwifiで無線LANの接続ができていたので、
ここでももちろんmadwifiを使用するものだと思ってました。
madwifiを使用すると途中までうまく行くのですが
途中で
Association request to the driver failed
と出て接続に失敗します。
デバッグモードで詳細を見ると、
ioctl[IEEE80211_IOCTL_SETMLME]: Invalid argument
ってなっていました。

今回は
DRIVERS="-D wext"
が正解でした。
ただ、ネットで調べるとmadwifiでうまくいっている人もいるので、
バージョンなどでまた変わってくるかもしれません。


# wpa_passphrase 無線LANのSSID
とコマンドすると、パスフレーズを聞かれますので、
WPAに接続するパスフレーズを設定します。
(ルータに設定したものと同じ物です。)
すると、入力したパスフレーズが暗号化されて画面に表示されるので
これをコピーして
/etc/wpa_supplicant/wpa_supplicant.conf
に貼り付けます。

私の環境の /etc/wpa_supplicant/wpa_supplicant.conf は、
このようになっています。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

network={
        ssid="無線LANのSSID"
        key_mgmt=WPA-PSK
        proto=WPA
        pairwise=TKIP
        group=TKIP
        #psk="入力したパスフレーズ"
        psk=暗号化されたパスフレーズ
}


WPA-AESの場合は、TKIPの部分がCCMPになるそうです。


/etc/sysconfig/network-scripts/ifcfg-ath0
を修正します。
ここに余計なものがいろいろと書かれていると
接続に失敗しました。
ここで必要なのは、DHCPを使用できる設定にすることです。
でないとDHCPでIPをもらえません。
私の環境ではこうです。

BOOTPROTO=dhcp
ONBOOT=yes
DEVICE=ath0
HWADDR=00:00:00:00:00:00 ←ここはlibrettoのMACアドレス
TYPE=Wireless
ESSID=無線LANのESSID


設定はこれだけです。

接続のテストをするのですが、その前にやっておくことがあります。
アプリケーション→システムツール→ネットワークの設定
を起動して、ath0が動いていたら停止させます。
これをやっておかないと wpa_supplicant がタイムアウトしてしまいます。
ここでもハマりました・・・。

wpa_supplicant を起動させます。
# /etc/init.d/wpa_supplicant start
ちなみに止めるのは start が stop になります。

次に、wpa_supplicant-gui を起動させます。
# /usr/bin/wpa_gui

wpa_supplicant-gui でconecct とかすると、
接続が開始されます。
イベントに CTRL-EVENT-CONNECTED って出ていればOKです。

でも、このままではまだ繋げません。
DHCPからIPを取得できていないからです。
アプリケーション→システムツール→ネットワークの設定
を起動して、ath0が動いていたら停止させます。
再度 ath0を動かすと、IPを取得していると思います。
# ifconfig
で確認し、ath0 に正常なIPが割り振られていれば、
無線LANに接続できています。


次に、自動起動の設定です。
ath0が接続する前に wpa_supplicant を起動させる必要があります。
デフォルトだとここがうまく行かないので
/etc/init.d/wpa_supplicant の
chkconfig: 部分を - 12 88 から 2345 09 88 に 変更します。
ちなみに、2345はランレベル、09は開始順、88は終了順です。
最初の部分は、

#!/bin/bash
#
# wpa_supplicant
#
# chkconfig: 2345 09 88
# description: wpa_supplicant is a WPA Supplicant for Linux, BSD and \
# Windows with support for WPA and WPA2 (IEEE 802.11i / RSN). Supplicant \
# is the IEEE 802.1X/WPA component that is used in the client stations. \
# It implements key negotiation with a WPA Authenticator and it controls \
# the roaming and IEEE 802.11 authentication/association of the wlan driver.#
processname: wpa_supplicant
# config: /etc/wpa_supplicant/wpa_supplicant.conf
#

となります。

で、
# chkconfig wpa_supplicant on
とコマンドすれば、自動起動が有効になります。

再起動して確認すると、無線LANに接続できていると思います。
が、できていないこともあるんです。このへんは何故なのかまだよく解りません。
その時は、
アプリケーション→システムツール→ネットワークの設定
を起動して、ath0が動いていたら停止させます。
再度 ath0を動かします。
で、接続できます。

07/05/15 追記 上記起動時にうまく接続できない件ですが、
/etc/sysconfig/network-script/
に、ifcfg-wifi0 という全然使っていないファイルがあったのが原因みたいです。
(起動時に毎回接続しようとして落ちてました。(笑))
このファイルを他のディレクトリに移動させれば、うまくつながるようになりました。


おまけ
wpa_supplicant -h
でヘルプ。使用できるドライバも見れる。

wpa_supplicant -iath0 -c/etc/wpa_supplicant/wpa_supplicant.conf -Dwext -w
で、wpa_supplicant のログを見ながら起動できる。Ctrl+C で停止。
(wpa_supplicant-gui のイベントログと同じ)

wpa_supplicant -iath0 -c/etc/wpa_supplicant/wpa_supplicant.conf -Dwext -dd
で、wpa_supplicant のデバッグログを見ながら起動できる。Ctrl+C で停止。


参考にしたページ
YANO's digital garage
madwifiでもwextを使うところ、起動スクリプトの書き換え、など参考にさせていただきました。

Linux上でのWPA/PEAP-TKIP設定
Vine Linux 3.2、madwifi、wpa_supplicant-0.3.9、WPA-EAP での接続実績です。

[Fedora 2708] madwifi WPA-PSK(TKIP) + wpa_supplicant動作報告

ryoblog Redhat9.0 + WLI-CB-G54 + WPA(AES)

shag の日記 2007-01-25 Ubuntu Edgy で無線LAN を WPA-PSK で使う

他いろいろ・・(忘れた・・・。)
上記の方々の情報のおかげです。本当にありがとうございます。

| | コメント (0) | トラックバック (2)

2006/05/14

librettoU100とVineLinux3.2で無線LANを使う

librettoU100/190DSB を買ってから、ちょろっとWebを見る時なんかにはデスクトップPCではなく、librettoを使っています。
しかし、WindowsXP時は無線LANで繋がっているのにLinuxで起動させる時はわざわざLANケーブルを引っ張って来なくてはいけない・・・。
Linuxでも無線LANを使いたい!と思ったのでした。
でも、ハードウェア関係のことになると急にレベルが高くなります。
というのも、OSとハード、どちらでも動くドライバを探さなくてはいけません。そのため、情報量が急に少なくなってしまします。
そんなわけで、今回はかなり失敗したし、けっこう大変でした。

幸い東芝はノートパソコンをLinuxで使うための情報を積極的に公開してくれています。
そこで、librettoの無線LANは Atheros AR5005GS というチップを使っており、Atheros製の無線LANチップは「madwifi」というモジュールを使用すれば使える可能性があることが解りました。

まず、madwifi のソースがどこにあるかですが、
今まではSourceforgeのCVSにあったので、ネットで検索するとそこから取って来るというものがけっこう見つかりますが、今はhttp://madwifi.org/に場所が変わっており、ソースはhttp://snapshots.madwifi.org/に置いてあります。
06/05/14 現在、
madwifi-ng-current.tar.gz 13-May-2006 02:42 3.0M
madwifi-old-current.tar.gz 28-Jan-2006 02:44 2.0M
の2つありますが、
madwifi-ng-current.tar.gz ではmake時にエラーが出てしまうので
madwifi-old-current.tar.gz を使いました。

kernel-sourceが必要との事で、アプリケーション→システム・ツール→SynapticパッケージマネージャでSynapticを起動し、kernel-sourceを探してインストールしました。
このkernel-sourceがkernelのバージョンと違っていることに気付かず、ハマりました。(汗)
$ uname -r とコマンドを打てば現在のkernelのバージョンが表示されるので、kernelとkernel-sourceのバージョンが違うようならkernelをアップグレードする必要があります。

kernelのアップグレード方法は、VineLinuxのオンラインマニュアルを参考にしました。
VineLinuxオンラインマニュアル 第 13章カーネルのアップグレード、設定の方法
でも、ここで問題が発生したんだな・・・。

というのも、librettoでLinuxを起動させるのにWindowsのNTLoaderを使用しているのですが、liloの設定を変えたためにNTLoaderからは起動できなくなってしまったのです。一瞬焦りました。
デュアルブート構築時にSDカードに入れておいたMBMで起動し、事なきをえました。


さて、madwifiのインストールなんですが、その前にやっておくことがあります。
rootでログインし、/usr/src/linux ディレクトリに移動します。
# cd /usr/src/linux
configファイルをコピーします。
# cp /usr/src/linux-2.4.31/configs/kernel-2.4.31-i686.config /usr/src/linux/.config
ちなみに私は最初、コピーせずにデフォルトで置いてあったconfigファイルを使い、ハマりました。(汗)

# make xconfig
画面が出てくるので、何もせずに save & exit を選択
# make dep

・・・この部分、実際何が行われているのかよく解っていません。(汗)
ネットの情報をそのまま丸写しって感じで。
たぶん kernel-source にconfigerみたいなことをやってるんだと思ってます。
でもこの部分は大切で、この処理をしておかないと、madwifiのモジュール組み込み時にエラーが出ます。
私はエラーを出してしまい、何が原因かが判るまでけっこう時間を使ってしまいました。
たぶん、make時と環境が違います!みたいな感じで怒られてたんでしょうね。


いよいよmadwifiのインストールです。
ここからは、普通のインストール作業です。
madwifi-old-current.tar.gz を適当なディレクトリに置いて展開します。
# tar xzvf madwifi-old-current.tar.gz
展開されたディレクトリに入ります。
# cd madwifi-old-r1417-20060128
# make KERNELPATH=/usr/src/linux
# make install KERNELPATH=/usr/src/linux

KERNELPATHオプションは、madwifiのバージョンによって必須だったりいらなかったりしているようです。
私の使ったバージョンは、必須でした。

make install までエラーが無ければ、たぶん成功していると思います。
OSを再起動すると、インストールしたモジュールを
認識してくれます。
# iwconfig
でath0ができていると思います。


ネットワークの設定をします。
アプリケーション→システムツール→ネットワークの設定 を起動します。
「追加」から無線LANを追加します。
ネットワーク名は無線LANのESSIDになります。

私の
/etc/sysconfig/network-script/ifcfg-ath0 ファイルはこんな感じです。
「ネットワークの設定」で、ほとんど設定できますが、WEPキーは直接ファイルに書きました。

BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=yes
NAME="無線 LAN カード"
DEVICE=ath0
ESSID=無線LANのESSID
PEERDNS=yes
KEY="WEPキー"

WEPキーを書いているので、ファイルのパーミッションはroot専用にすべきでしょうね。

あとは、ネットワークの設定で
使いやすいように設定します。
私はeth0の「起動時に有効にする」を外し、ath0を「起動時に有効にする」にしました。
eth0を「起動時に有効」にしていると、有線LANで繋いでない場合、起動時に接続がタイムアウトするまで待たされてしまいますので。


今回は東芝Linux情報のページのメーリングリストで質問し、先達の方々に助けていただきました。
どうもありがとうございました。m(_ _)m

| | コメント (0) | トラックバック (0)