OBSSによる無線LANアクセスポイントの構築


OBSSぷらっとホームが販売している、linuxカーネルで動くマイクロサーバです。
何とか、無線LANアクセスポイントにできたので、手順を整理しておきます。

もし、あなたがOBSSを持っていて、無線LANアクセスポイントを欲しいだけなら、アクセスポイントそのものを買ってきた方が安上がりで手間も省けます。コストはだいたいこのようになります。

・既製品のアクセスポイント

ルータなしでだいたい1万5千円です。特価品だと、1万2千円くらいであるようですね。

・OBSSアクセスポイント

PCMCIA拡張カード(1万3千円)+無線LANカード(6千円)として、2万円近い出費となるでしょう。さらに、構築する手間がかかります。


使える無線LANカード

以下のような理由で、Intersil(Harris)のPrismチップセットを採用したカードでしか構築できないようです。

・Lucentのチップは自分自身のMACアドレスでしかパケットの送出をしないのでブリッジとして使えない
・Intersilのチップは、外部ホストからアクセスポイントのコントロールが可能なよう設計されているらしい

Intersilのチップを使ったカードには下記のような文句が書いてあるので、見分けられると思います。

 Intersil (Harris) Prism on board

 このようなロゴです。Prismでもロゴなしもあるようです。

私はメルコのWLI-PCM-S11Gを使用しました。Prismが使われていれば大抵は動くのではないかと思われます。

動作確認のとれたカード

・メルコ WLI-PCM-S11G (Prism3)
・Logitec LWN-B11P (Prism2.5)
・Corega PCC-11(Prism2 FW v0.7.0)
・Corega PCCL-11(Prism3 FW v1.3.4)

動くと思われるカード

・I-O DATA WN-B11/PCMH (Prism 3) 
・PLANEX GW-NS11H (Prism 3)

どうも、Prism2のカードをAPにすると、クライアントのAP検索ツールから検索に引っかかるが、Prism3の場合は検索には引っかからないという事象があるようです。手動でAP登録すれば、どちらともAPとして機能します。

ちなみに、Intersilは 旧Intersil -> Harris -> Intersilと社名が昔に戻っています。余談ですが、Fairchildも復活してますね。


構築手順

セルフ環境でしかやってないので、セルフ環境があることを前提に書きます。linuxソースも必要なので、ぷらっとホームからダウンロードしておいてください。linuxソースは /usr/src/linux に置くのが一般的なようです。

pcmcia-cs-3.1.29 のビルド&インストール

OBSS+PCMCIAにカードサービスを追加します。プラットホームにコンパイル済のバイナリパッケージがあるのですが、これは使いません。また、無線LANとは関係ないのですが、オリジナルには入っているかなりのドライバが削られているようなので、おすすめも出来ません。なんで削っているのか疑問です。

あらかじめカーネルの依存関係を作成する必要があるらしいです。

#cd /usr/src/linux

#make oldconfig

#make dep

このあたり、からpcmcia-csを入手します。

#tar xzf pcmcia-cs-3.1.29.tar.gz

#cd pcmcia-cs-3.1.29

#make all

Linux source directory [/usr/src/linux]: (そのままリターン)

Build 'trusting' versions of card utilities (y/n) [n]: (そのままリターン)

Include 32-bit (CardBus) card support (y/n) [y]:(そのままリターン)

Module install directory [/lib/modules/2.4.10]:(そのままリターン)

なんだかんだ表示して、ビルドが始まります。ビルド後は

#make install

してください。


hostap のビルド&インストール

http://hostap.epitest.fi/からhostapを入手します。最新版はhostap-2002-09-12.tar.gz のようです。('02/09/19現在)

#tar xzf hostap-2002-09-12.tar.gz

#cd hostap-2002-09-12

Makefileを編集します。Makefileの先頭に PCMCIA_PATH 定義がありますので、pcmcia-cs-3.1.29展開したディレクトリを下記のように(例です)指定します。

PCMCIA_PATH=/home/momose/pcmcia-cs-3.1.29

Makefile編集後

#make pccard

でビルドします。ビルド後

#make install_pccard

でインストールします。ここでOBSSを再起動しておきます。


無線LANファームウェアの確認と更新

無線LANカードは内部にFLASH ROMを持っており、制御ファームが書き込まれています。ファームのバージョン1.4.2ではアクセスポイントとして動作しないことが確認されているため、もし、1.4.2であればバージョンアップします。

確認方法

無線LANカードをOBSSのソケットに突っ込みます。

もし、バージョン1.4.2のカードであれば、/proc/kmsgに下記のようなメッセージが出てきます。

wlan0: Warning: secondary station firmware version 1.4.2 does not seem to work in Host AP mode

まともにLANカードが認識されていない場合にも当然上記メッセージは出ませんので、認識されているかどうかは

#iwconfig wlan0

とやってみて

wlan0    IEEE 802.11-b ESSID:"secret" Nickname:"aoi"
           Frequency:2.422GHz Sensitivity=1/3 Mode:Master
           Access Point: 00:07:40:26:4E:1E
           Bit Rate=11Mb/s RTS thr:off Fragment thr:off
           Power Management:off
           Link quality:0 Signal level:0 Noise level:0
           Rx invalid nwid:0 invalid crypt:0 invalid misc:1846016

のような表示がでることで確認できます。

メルコWLI-PCM-S11Gは特別の設定をしなくてもカードが認識されましたが、dmesg や/var/log/messagesに 「unsupported card in socket 0」なる表示が出てきた場合、/etc/pcmcia/hostap_cs.conf で適切なカード名を設定すれば(Prismベースのカードで有れば)使える可能性が高いです。このファイルの書式は/etc/pcmcia/configと同じようです。

なお、バージョンはdmesgして下記のようなラインでも確認できます。

wlan0: NIC: id=0x801b v1.0.0
wlan0: PRI: id=0x15 v1.1.0  (プライマリファームウェアバージョン)
wlan0: STA: id=0x1f v1.4.2 (セカンダリファームウェアバージョン)

1.4.2ではなかったラッキーな人は更新作業は飛ばしましょう。

更新作業

ファームウェアはこのあたりから入手

 http://www.netgate.com/support/prism_firmware/

Flash更新ツールはこのあたりから入手

 http://www.senao.com/service%20&%20support/drives%20download.htm
 「Firmware update program」というやつです。

上記サイトから更新ツールが消えているので、ダイレクトに置きます。2004/04/30
WinUpdate-0-7-0.exe

!!! Caution !!! 

ファーム更新するとメーカの保証がきかなくなる可能性が高いです。

また、失敗すると修復不可能になる可能性もありますので、自己責任でお願いします。念のため。

ファーム更新はWindowsマシンで行います。

あらかじめ、ファーム更新するカードをWindowsマシンで認識させ、ドライバ(当然Windowsのもの)を入れておきます。

ファームは最新版(2002.09.18)の1.4.9をダウンロードします。
zipを解答すると、更に2つのzipがでてきます。

p42PCPCIv1.1.0a.zip(プライマリファームウェア)
s42pc_pci.zip(セカンダリファームウェア)

無線LANカードは2つのファームウェアがあり、プライマリとセカンダリというようです。セカンダリはステーションファームウェアともいうようです。このうち、プライマリ側は1.4.2、1.4.9ともに1.1.0というバージョンのようなので、更新しません。

セカンダリのzipを解答し、SF010409.HEXファイルを取り出します。

更新ツールをインストールし、ファーム更新する無線LANカードをソケットに挿入後にツール起動します。

更新前はこんな感じです。

解凍したセカンダリファームを読ませます。

更新完了するとこうなります。

再度バージョン確認すると、こうなってました。


きちんとUpdateできたようです。更新作業自体は非常に簡単です。


無線LANインタフェースの設定

バージョン確認作業が済んでいるので、この段階でOBSSが無線LANカードを認識していないという問題はないはずです。

マシン起動時に自動的に設定するために /etc/pcmcia/wireless.optsを編集します。まず、下記のような行が頭の方にあるのでコメントアウトします。

# --------- START SECTION TO REMOVE -----------
#*,*,*,*)  (ここと)
# ;;     (これをコメントアウト)
# ---------- END SECTION TO REMOVE ------------

さらに、このような行を追加します。似たようなものが既に記述されているので、コピペして作ります。

*,*,*,00:07:40:*)
INFO="Wavelan Setting" (適当につけて)
ESSID="essid"    (ESSID決めて設定)
MODE="master"   (APにする場合は master です)
RATE="auto"
;;

赤字の部分は使用する無線LANカードのMACアドレスを記入します。適当にマッチングさせてください。

編集後に再起動し、iwconfigをかけてESSIDやModeが設定と同じであるか確認します。

この状態で、ステーションとして動作しているはずです。クライアントから接続してみてください。まだ暗号化はしていないので、クライアントの設定からは暗号設定を外します。

無線LANインタフェースにIPアドレスを割り振る場合は

#ifconfig wlan0 ....

とやります。以降のブリッジ化作業をする場合はIPアドレス設定の必要はありません。


ブリッジ化準備

ブリッジとして使うためにカーネルを再構築します。ブリッジとはいわゆるハブのことです。無線LAN環境と有線LAN環境を同じサブネットに載せるにはブリッジ機能が必要です。もし、ブリッジをしない場合はOBSSでNATもしくはルーティングをかけないと有線LANと通信できなくなります。逆に言えば、有線・無線間を同一セグメントにしないのなら、、ブリッジは不要であり、カーネル再構築の必要はありません。ブリッジ化作業は飛ばしましょう。

カーネルコンフィグレーションをします。

#cd /usr/src/linux

#make menuconfig

で[Networking options]->[802.1d Ethernet Bridging]をBuilt-inにします。

以降の作業および、カーネル再構築についての詳細はOBSS MLの過去ログ「[obu:01141] OBSS のカーネル再構築」を参照願います。


ブリッジ制御コマンドのインストール

http://bridge.sourceforge.net/から入手します。最新版はbridge-utils-0.9.5.tar.gzのようです。('02/09/19現在)

#tar xzf bridge-utils-0.9.5.tar.gz

#cd bridge-utils

#make

でビルドします。なお、このMakefileにはインストールターゲットが無いようなので、手動でコマンドをインストールします。

#cp brctl/brctl /sbin


ブリッジの設定

ここでは例として eth0 と wlan0 をブリッジにする手順を示します。

# brctl addbr br0
# brctl addif br0 eth0
# brctl addif br0 wlan0
# ifconfig eth0 0.0.0.0
# ifconfig wlan0 0.0.0.0


要は eth0 と wlan0 へIPアドレスを直接振り付けるのをやめて、br0 というブリッジに eth0 と wlan0 を追加するということのようです。コマンドと実際の反映の間には30秒程度の時間差がありますので、設定後に速攻でpingをかけ、応答が無いからといって焦らないでください。SWハブのごとく、MAC学習時間のようです。

この段階で、無線LAN・有線LAN間でpingが通るはずです。

OBSSのIPアドレスは br0 をインタフェースとして割り付けます。

# ifconfig br0 192.168.1.3 netmask 255.255.255.0

赤字の部分は実際の環境のIPアドレスを設定します。

(追加'02/09/20)

上記の設定によりデフォルトルートが失われるようなので、下記を追加しました。

#route add default gw 192.168.1.1 br0

デフォルトルータのアドレスは実際の環境のIPアドレスを設定します。

上記の動作を自動で行うために、/etc/rc.d/rc.localあたりに書いておけば良いと思います。なお、wlan0はPCMCIAが初期化された後でないと存在しないので、起動順序には注意します。また、初期化シーケンスは非同期ですので、適当にsleepなどしないとwlan0が見つからない可能性もあります。当方の場合、念のため5秒スリープさせてから上記のシーケンスを走らせています。rc.localの最終部分に下記のようにしてあります。本当はこのような直打ちではなく、もうすこし美しく設定すべきでしょう。

/bin/sleep 5
/sbin/brctl addbr br0
/sbin/brctl addif br0 eth0
/sbin/brctl addif br0 wlan0
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig wlan0 0.0.0.0
/sbin/ifconfig br0 192.168.1.3 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 br0


WEP暗号化の設定

暗号化しなくても良いというオープンシステム指向の方はこれは飛ばしてもらっても結構です。^^///

WEP暗号化はhostapで作成したカーネルドライバを使います。デフォルトではこれはロードされないので、ロードしてやる必要があります。/etc/pcmcia/wirelessを開き下記の行を追加します。

'start')
[ -n "$VERBOSE" -a -n "$INFO" ] && echo "$INFO"
# Set all desired settings via iwconfig

# Load WEP crypto driver              (これはどうでもいいが)
/sbin/modprobe hostap_crypt_wep  (これを追加します)

以降のKEY設定ではこのドライバを使うため、startの頭の方に追加します。そして、/etc/pcmcia/wireless.optsを再度編集します。先に追加しておいた、セクションにKEY="暗号キー"を追加します。

*,*,*,00:07:40:*)
INFO="Wavelan Setting"
ESSID="essid"
MODE="master"
RATE="auto"
KEY="s:WEPキー"    (これを追加する)
;;

WEPキーは "s:文字列"のように指定すると文字列指定となり、xxxx-xxxx-xx...のように指定すると16進数指定のようです。メルコのクライアントマネージャは5文字(64ビット暗号化)か、13文字(128ビット暗号化)でしか指定できないので、それに従います。暗号化されている場合

#iwconfig wlan0

wlan0    IEEE 802.11-b ESSID:"essid" Nickname:"aoi"
           Frequency:2.422GHz Sensitivity=1/3 Mode:Master
           Access Point: 00:07:40:26:4E:1E
           Bit Rate=11Mb/s RTS thr:off Fragment thr:off
           Encryption key:xxxx-xxxx-xxxx-xxxx-xxx.... Encryption mode:restricted
           Power Management:off
           Link quality:0 Signal level:0 Noise level:0
           Rx invalid nwid:0 invalid crypt:256 invalid misc:718336

赤字の部分が出ます。


おしまい

これでおしまいです。当方の環境は以上の手順により下のようになっています。


ADSL backbone
         | (Global addr)
+-------------+
|  ADSL Router  |
+-------------+
         | (192.168.1.1)            (192.168.1.3)                              (192.168.1.5)
+-----------+                 +------------+                           +--------+
 | L2 SW HUB |-----------| OBSS with AP| <=== Wireless ===> | Note PC |
 |                  |                 +------------+                           +--------+
 |                  |                   (192.168.1.2)
 |                  |                 +---------+
 |                  |-----------|  母艦PC  |
 |                  |                 +---------+
 |                  |                   (192.168.1.4)
 |                  |                 +-----------+
 |                  |-----------|Sparc station|
 |                  |                 +-----------+
+-----------+

DHCPは好みでないので使っていませんが、無線LAN側も同一セグメントに載っているので、ADSLルータのDHCPで無線LAN側へアドレスが振り付けられることは確認しました。もちろん、OBSSでDHCPすることも可能でしょう。


その他

理由は不明ですが、ブリッジ後に iwconfig すると、無線LANが見つからないことがあります。

気になる場合はiwconfigを新しい物にしてみてください。この問題は修正されているようです。

ftp://ftp.riken.go.jp/pub/Linux/debian/debian/pool/main/w/wireless-tools/

あたりにあります。

戻る