WPA-PSKを使用したリナックス(FC5)の無線LAN接続について

1、目的

FMV-BIBLO NF40Tに導入したlinuxで 無線LANルータWPA-PSKを使用して接続する。

2、はじめに

CG-WLBARGNS(http://www.corega.co.jp/prod/wlbargns/)はその価格にもかかわらず非常に使い易い無線ブロードバンドルーターでWIN-XP、VISTAについては何の苦労も無くほぼ自動で接続できた。

Linuxについても、マルチAP(上記ホームページ参照)により、認証方式をOpen Systemとすれば比較的簡単に接続出来るが、セキュリティーを考えると家庭用であってもWPA2を使用した認証方式で使用したい。

3、おさらい

(1)CG-WLBARGNSを介したインターネットへの接続

インターネットへの接続環境は、私の場合下記の形態となります

プロバイダー <---> ADSL回線 <---> ADSL-MODEM <---> CG-WLBARGNS(AP) <---> NT40T(STA)

(2)インフラストラクチャー・モード

インフラストラクチャー・モード(infrastructure mode)とは、それぞれの端末に設置された無線LANのアダプタが、ネットワークを統括する「アクセス・ポイント」(以下APと表示)を介して通信する方式である。

CG-WLBARGNSがアクセスポイント(AP)となり、NT40Tがステーション(sta)となる。

(3)WPA2(RSN)による認証と暗号化

(WPA2とRSNは同じ規格を表します、以降混乱をさけるためにwpa2またはWPA2と表記することにします)

無線通信は傍受が極めて容易であるため送信されるパケットを暗号化して傍受者に内容を知られないようにすることで、有線通信と同様の安全性を持たせようとしている。

無線LANの認証と暗号化方式の規格にはWEP,WPA,WPA2があり、三者の中でWPA2が最も最新且つ強固なデータ暗号化規格である。
WPA2では、TKIPまたはAES(どちらも暗号化アルゴリズムです)をベースにしたCCMPが認証とデータ暗号化に利用される。

(4)WPA2の認証方式

WPA2の認証方式にはwpa-psk(wpa-personal)とwpa-enterpriseがある。
wpa-enterprizeではradiusなる外部サーバーが必要となるため、個人使用の場合はwpa-pskを使用することとなる。

wpa-pskではPre-Shared Keyと呼ばれる共通鍵によってステーション(sta)を認証する。アクセスポイント側とステーション側に共通の文字列をPre-Shared key(PSK)として登録しておき、これが認証に利用される。

(5)dhcp

家庭内でのLAN構成(IPアドレス設定)は特別な理由が無い限りdhcpによる自動設定が簡単である、CG-WLBARGNSにはdhcpサーバーの機能がついており、これを利用することとなる。

4、下調べ

(1)ハードウェアの構成

本体  :FMV-BIBLO NF40T(以下'NT40T'と表記)(http://www.fmworld.net/product/hard/pcpm0608/biblo_loox/nf/lineup/index.html#cat02)

無線LANインタフェース :本体内臓 Atheros AR5006EXS

AP :無線ブロードバンドルータ corega CG-WLBARGNS

(2)ソフトウェアの構成

Fedora Core5(2.6.20-1.2320.fc5)以下'FC5'と表記

(3)CG-WLBARGNSの設定

[無線アクセスポイントの設定]

(4)作業の内容

無線LANインターフェース用のデバイスドライバーのインストールとWPA制御用プログラムのインストールを行い、関連するスクリプト、設定ファイルの編集を行う。

Atheros社の無線LANインターフェイスについては、madwifi(http://madwifi.org/)なるデバイスドライバーがオープンソースで無償提供されている。 なお、FC5用にはlivna.org(http://rpm.livna.org)よりFC5用のrpmがダウンロード可能。

WPA制御用(APとの認証/関連付け)にはwpa_supplicantなるサポートプログラムが必要。 なお、FC5にはwireless拡張モジュールとwpa_supplicantプログラムが標準で装備されている。

その他、以下のファイルをいじる必要がある。

  • /etc/modprobe.conf
  • /etc/sysconfig/network-scripts/ifcfg-ath0
  • /etc/sysconfig/network-scripts/keys-ath0
  • /etc/sysconfig/wpa_supplicant
  • /etc/wpa_supplicant/wpa_supplicant.conf

5、作業前の注意・・・

(1)これからの操作はシステム関連のファイルを変更します、rootでのログオンを前提に話を進めていきます。

(2)基本の基本

まず、システムのバックアップ(特に/etc以下のファイルは全てバックアップを行うこと)をとります。
cpコマンドでフォルダーごと安全な場所にコピーすればよいです(バックアップのやり方が分からない場合は・・・危険すぎます!、いじらないでください)

(3)GUIに頼らない

FC5の場合、「ネットワーク設定」というタイトルで、system-config-networkなるネットワーク設定用のGUIプログラムが提供されておりますが、WPA接続の構成には対応していませんので各種構成ファイル等は手動で作成・変更する必要があります。(なお、system-config-networkを使用すると、/etc/sysconfig/network-scripts/ifcfg-ath0の内容が上書きまたは消去されてしまいますので、注意が必要です。)

それでは、始めましょう

6、madwifiのinstall

Atheros社のLinux版ドライバMADWiFiと対応するカーネルモジュールをインストールする。
FC5ではlivna.orgより提供されているrpmパッケージをyumを使ってインストールするのが手っ取り早い。
2008年5月時点でのFC5用最新安定版はデバイスドライバーが「madwifi.i386 0.9.3.1-1.lvn5」、対応するカーネルモジュールが「kmod-madwifi.i686 0.9.3.1-1.2.6.20_1.2320.fc5」である。

(注)2008年5月時点では既にFC9がリリースされており、FC5に対するFedora Projectの正式サポートが終了しているが、livna.orgではまだサポートしています。(と言うか、まだFC5用のリポジトリが残ってる)

まずrpmコマンドでlivna.orgのリポジトリを登録します。

[root@localhost wlan]# rpm -ivh http://rpm.livna.org/livna-release-5.rpm

そして、yumを使用して、madwifiをインストールします。(カーネルモジュール等の依存パッケージは必要に応じてyumがインストールしますので特に明示する必要はありません。)

[root@localhost wlan]# yum -y install madwifi

つぎのコマンドでインストールの確認ができます
[root@localhost wlan]# yum list installed | grep 'mad'
kmod-madwifi.i686 0.9.3.1-1.2.6.20_1.232 installed
madwifi.i386 0.9.3.1-1.lvn5

7、madwifiドライバーのロード定義

<参照 http://madwifi.org/wiki/UserDocs/autocreate>

madwifiドライバー(ath_pci)にath0というエイリアスを追加し、いくつかの起動パラメーターを指定する必要があるため、/etc/modprobe.confへのmadwifiドライバーのロード定義を追加します。

alias ath0 ath_pci # ath_pciにath0という、エイリアスを指定
options ath_pci countrycode=392 autocreate=sta  # ath_pciの起動パラメーター

MADWiFi ドライバでは、まず wifi0 というベースデバイスが作成され、その上に仮想AP (VAP) を作ることによって接続制御を行う仕組みになっています。 autocreate=staはath0というstationモードのVAPを作成することをath_pciに指示します(autocreate=staはデフォルト)。VAP のモードには sta, ap, adhoc などがありますが、インフラストラクチャーモードの子機として設定する今回はstaとなります。countrycode は使用する周波数リストや電波強度決定に影響します、国コードのリストは MADWiFi のユーザドキュメントで解説されています。 なお、alias wifi0 ath_pciの行が追加されている場合はコメントアウトすること。

#alias wifi0 ath_pci

/etc/modprobe.confの例

8、ネットワークインターフェイスの作成

ath0に対応するインターフェース設定スクリプト(/etc/sysconfig/network-scripts/ifcfg-ath0)を作成します。ここに設定されたパラメーターはifupコマンドによって読み込まれます。ifupは対応するインターフェース(デバイスドライバー)をこの情報を使用してセットアップします。

しかし、wpa_supplicantを使用する場合は、ほとんどの設定情報はwpa_supplicantがネゴシエーションを通じて設定し、またIPアドレスはdhcpプロトコルを通じて取得されますのでifcfg-ath0ではわずかな項目を指定すれば済みます。

<参照 http://www.redhat.com/docs/manuals/
enterprise/RHEL-4-Manual/ja/ref-guide/ch-networkscripts.html>

vi等で、以下の内容を編集し、/etc/sysconfig/network-scripts/ifcfg-ath0として書き込みます。

    DEVICE=ath0
    TYPE=Wireless
    ONBOOT=no
    BOOTPROTO=none
    USERCTL=yes
    IPV6INIT=no

ESSID=,MODE=,等他のエントリーは通常不要です(wpa_supplicantがネゴシエーションを通じて設定を行うため)

ifcfg-ath0の例

9、WEPパスフレーズファイル

ダミーのwep keyを/etc/sysconfig/network-scripts/keys-ath0に書き込みます。

[root@localhost wlan]# echo ' KEY="s:dummyKey"' > /etc/sysconfig/network-scripts/keys-ath0

本来WEP接続時のパスフレーズであり、WPA/WPA2 接続の場合は不要のはずですが、ifupコマンドで使用されるifup-wireless スクリプトの構造上、KEY が空文字になっていると `iwconfig ath0 key off' が実行されてしまいます。(WPAでは、その設計思想によりWEPのキー管理ハードウェアを使用します ---- つまりkey onでなければならない)

10、wpa_supplicant(WPA/WPA2 キーネゴシエータ)の設定

wpa_supplicant は、ドライバと協調して、APとの接続ネゴシエーションを行い、また定期的に変更/交換される WPA および WAP2 キーの面倒を見てくれるデーモンです。 <参照 /usr/share/doc/wpa_supplicant-0.4.9>

wpa_supplicantは受け入れるネットワーク(AP)とそのセキュリティーポリシーを/etc/wpa_supplicant/wpa_supplicant.confにて指定します。

/etc/wpa_supplicant/wpa_supplicant.conf の作成

wpa_passphraseコマンドを使い、wpa_supplicant.confの土台を作ります。APのESSID(SSIDとも表記) と、平文パスフレーズを指定してwpa_passphraseの出力を/etc/wpa_supplicant/wpa_supplicant.confにリダイレクトします。

ApのESSIDが”abcdefg”平文パスフレーズ(pskと同義)が”xyzwu”とすると

[root@localhost wlan]# /usr/sbin/wpa_passphrase abcdefg 'xyzwu' -
 >> /etc/wpa_supplicant/wpa_supplicant.conf

こうしてできた wpa_supplicant.conf をvi等で編集します。

ctrl_interface=/var/run/wpa_supplicant # UNIXドメインソケット
               #ファイルを作成するディレクトリ。
               #/var/run/wpa_supplicantでなければならない
               #
ctrl_interface_group=wheel  #上記ソケットディレクトリおよびソケット
               #ファイルの所有グループ。指定しなければ
               #rootしかアクセスできない
               #
ap_scan=0      #1=wpa_supplicant initiates scanning
               #  and AP selection
               #0=scanning and AP selection by driver
               #
network={      #ネットワークブロック
    ssid="abcdefg"
    proto=WPA2
    #psk="xyzwu"
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

wpa_supplicant.confはグローバルパラメータとネットワークブロックパラメーターで構成されます。

グローバルパラメーター

ctrl_interfaceとctrl_interface_groupはwpa_supplicant.confの最初に一回だけ記述し、外部プログラムが使用するUNIXドメインソケットを作成するディレクトリーとそのソケットにアクセスできるグループを指定します。(wpa_cli等が使用)

FC5の場合、ソケットを作成するディレクトリーは/var/run/wpa_supplicantでなければならずアクセスできるグループは事前定義でwheelとなっています。

ap_scanはAPのスキャンをデバイスドライバーが行うのかwpa_supplicantが行うのかを指定します。

ネットワークブロックパラメーター

wpa_supplicant.confは複数のネットワークブロックをそれぞれのSSIDを指定して登録することが出来ます。 一つのネットワークブロックが一つのAPに対応します。

ssidはAP(CG-WLBARGNS)に設定されているものを使用します。
protoは受け付け可能なプロトコルのリストで、今回はWPA2に限定します。 関連するパラメーターとしてkey-mgmt、pairwise、group等がありますが今回は全てデフォルト値でかまいません。

/etc/wpa_supplicant/wpa_supplicant.confの例

なお、複数のネットワークブロックを記述した場合、wpa_supplicantはネットワークブロックに指定した優先順位とセキュリティーレベル及び信号強度に応じて、使用するネットワーク(AP)を自動的に選択します。

11、動作確認

デバイスドライバー(ath_pci)をロードするために、マシンを再起動します。 他のインターフェースが活動しているときは、非活動化します。

    ex. [root@localhost wlan]# dhclient -r
        [root@localhost wlan]# ifdown eth0

gnome端末を三台起動する(term-a,term-b,term-c)、それぞれath0のイベントの監視、wpa_supplicantの起動、その他の操作に使用します。

(監視不要ならこの項スキップ) term-aでiweventを起動し ath0 イベントを監視します
[root@localhost wlan]# iwevent

term-bでwpa_supplicantをデバックモードで起動します
[root@localhost wlan]# wpa_supplicant -i ath0 -c /etc/wpa_supplicant/wpa_supplicant.conf -D wext -dt

term-cでインターフェースの起動を行い、dhcpサーバーからipアドレスを取得します。

[root@localhost wlan]# ifup ath0
[root@localhost wlan]# dhclient ath0
Internet Systems Consortium DHCP Client V3.0.3-RedHat
Copyright 2004-2005 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP

wifi0: unknown hardware address type 801
wifi0: unknown hardware address type 801
Listening on LPF/ath0/xx:xx:xx:xx:xx:xx
Sending on   LPF/ath0/xx:xx:xx:xx:xx:xx
Sending on   Socket/fallback
DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 8
DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 19
DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 19
DHCPOFFER from 192.168.1.1
DHCPREQUEST on ath0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.22 -- renewal in 77506 seconds.

以上の操作で無事IPアドレスが取得出来ればokです。

(注)原因はまだわかりませんが、ifdown ath0で一度インターフェースを終了した場合、リナックスを再起動しないと再びath0を活性化することが出来ません。

12、自動起動の設定

自動起動のためには、wpa_supplicantの起動パラメータ(/etc/sysconfig/wpa_supplicant)、インターフェース設定ファイル(/etc/sysconfig/network-scripts/ifcfg-ath0)およびinitスクリプトの設定を行います。

(1)wpa_supplicant起動パラメータの設定

自動起動の場合、initスクリプトの中で、wpa_supplicantを起動します、その場合wpa_supplicantのコマンドラインパラメーターは/etc/sysconfig/wpa_supplicantファイルに記述することになります。

以下の2行を起動パラメーターで指定する

    INTERFACES="-iath0"
    DRIVERS="-D wext"
    (注)fc5では"-D madwifi"ではなく"-D wext"を指定)

/etc/sysconfig/wpa_supplicantの例

(2)インターフェース設定ファイルの変更

インターフェース設定ファイル(/etc/sysconfig/network-scripts/ifcfg-ath0)の2行を変更します

    ONBOOT=yes
    BOOTPROTO=dhcp

自動起動用/etc/sysconfig/network-scripts/ifcfg-ath0の例

(3)initスクリプトの設定

/etc/init.d/wpa_supplicantの修正

ifup ath0スクリプトが実行される前に、wpa_supplicantを起動する必要があります、 そのために、/etc/init.d/wpa_supplicantスクリプトの#chkconfig – 12 88とある行を#chkconfig – 9 91に変更します。

この行は"#"で始まっていますが、chkconfigが起動スクリプトの順番決定に使用します

/etc/init.d/wpa_supplicantスクリプトの例

runlevelのwpa_supplicant起動スクリプトを確実にリセットするためchkconfigコマンドを使用します。

[root@localhost wlan]# chkconfig --del wpa_supplicant
[root@localhost wlan]# chkconfig --add wpa_supplicant

wpa_supplicantの自動起動を設定します。
[root@localhost wlan]# chkconfig wpa_supplicant on
以上で、自動起動の設定は終わりです。

他のインターフェース(LANケーブル接続なら/etc/sysconfig/network-scripts/ifcfg-eth0等)の自動起動を止めて(ONBOOT=no、BOOTPROTO=noに変更)から、マシンを立ち上げ直せば無線LANにつながっているはずです。

13、Pingコマンドで接続を確認します。

(192.168.1.1はCG-WLBARGNSのデフォルトipアドレスです。)

[root@localhost wlan]# ping -c1 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.962 ms

--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.962/0.962/0.962/0.000 ms

14、関連コマンド

無線LANの設定、確認に際し次のコマンドを使用しました。(詳細はMANページ)
[root@localhost wlan]# lsmod
[root@localhost wlan]# iwconfig
[root@localhost wlan]# iwpriv
[root@localhost wlan]# ifconfig
[root@localhost wlan]# ip
[root@localhost wlan]# ping
[root@localhost wlan]# iwlist
[root@localhost wlan]# athstats
[root@localhost wlan]# 80211stats
gohome.gifホーム・ページ
tosihalu@gmail.com