OBSSによる無線LANアクセスポイントの構築
OBSSはぷらっとホームが販売している、linuxカーネルで動くマイクロサーバです。
何とか、無線LANアクセスポイントにできたので、手順を整理しておきます。
注 もし、あなたがOBSSを持っていて、無線LANアクセスポイントを欲しいだけなら、アクセスポイントそのものを買ってきた方が安上がりで手間も省けます。コストはだいたいこのようになります。 |
使える無線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/
あたりにあります。