DELL Inspiron 1300 内蔵無線 LAN を FreeBSD から WPA2 で使う(旧)

このページの記述は古いです。FreeBSD 8 に更新してから書 き直した、新しいページの方を参照して ください。

DELL のノートマシン Inspiron 1300 に FreeBSD をインストールして、内蔵 の無線 LAN で WPA2 の暗号化を行って接続を行ったときの顛末です。

いきさつ

これまで無線 LAN は一応暗号化してはいたものの、使っていたのは WEP で した。これは以前から「弱い暗号だ」という話は聞いていて、「そろそろ手を打 たにゃいかんな」と思ってはいたんですが、先日「 WEP は 10 秒で破れる」という話が出て、さすがに「こりゃいかん」と急遽 対策を打つことにしました。

と言っても、ご近所さんを疑っているわけじゃあないですけどね。ただ、車 にアンテナを積んでそこら辺を走り回るという手法があるので、そういう悪意を 持って無作為に破ろうという奴に、たまたま通りがかりに数秒で解読されてしまっ てはかなわない、と思ったわけです。

新宿の量販店で最近の暗号規格 WPA2 に対応した無線親機を買ってきて、 総務省の案 内通りに

を実現しようとしたわけです。

これまでは、わりと古い Dynabook に FreeBSD 4.11 を入れ、WEP にしか対 応していない無線 LAN カードを挿してずっと使っていたのですが、これを機会 に新マシンにし、FreeBSD のバージョンも一気に 7.0 に上げ、内蔵無線 LAN デ バイスを使うようにしました。

環境が一気に変わったことともあいまって、FreeBSD で上記の条件を実現する にはちょっとしたコツがいりましたが、余り公開されてはいないようなので、覚 え書きを兼ねて記録を残しておこうと思います。

さらなる背景

旧マシンはもう結構長い間使っていて、そろそろハードディスクが壊れたり してもおかしくない時期には差し掛かってるな、と数年前から意識はしていまし た。ただ、こちらの心配とは裏腹に、もうピンシャンしながら平気でずっと稼働 していたんですよね。バッテリーはもうすっかりダメになって、常時コンセント とつないでないとダメな状態でしたが、それ以外はまったく不調な所はありませ んでした。が、そういう心配から、実は2年ほど前「いざとなってから慌てなく てすむように」と新マシンを手配して、移行を試みてはいたんです。

ただ、当時の FreeBSD 5.x ではまだ、そのマシンの内蔵無線 LAN を使えるよ うにはなっていなかった。いや、いろいろ手を尽くせば使えたのかもしれないん ですが、当時の私にはそれだけの情報を探し出すことはできなかったんです。そ れで、FreeBSD 機としての利用はまだ時期尚早と考え、仕方なく単なる windows xp 機としてずっと使い続けていました。

その間、幸いにも旧マシンはクラッシュひとつなく無事に動き続けてくれ、ロ クに CPU パワーもディスク容量の余裕もないので OS をバージョンアップもせず、 最近の派手な総合デスクトップ環境を入れることもなく騙し騙し使い続けていた んですが、今回のことを機に、再び移行を試みてみたわけです。幸い、予備調査 してみると、どうも今なら内蔵無線 LAN を使うこともできるっぽかったので、 「WPA も何とかなるだろう!」と楽観的に予想して移行に踏み切りました。

なお、windows 側で調べてみると、本機の内蔵無線 LAN は、「Dell wireless 1370 WLAN mini PCI card」なる規格のシロモノ(←よくわかってない) らしいです。

本題・FreeBSD 7.0R + DELL Inspiron 1300 + 内蔵無線 LAN + WPA2

親機の準備

まず、あらかじめ無線親機の設定は済ませておきます。念のため、DELL のサ ポートサイトで、本体の windows 用の無線ドライバを新しいものに更新してお きます(たぶん、後々の展開のためには、これが大事)。

私の場合は C:\DELL\drivers\RXXXXXX\DRIVER\ という所に展 開されていて、

という3つのファイルができていました。

その上で、無線親機を次のような設定にしておき、windows で起動したとき にはちゃんと繋がるようにしておきましょう(これは、動作確認の意味もこめて です)。

後で必要になりますから、SSID と共有キーはメモっておいてください。 SSID を推測されにくい名前にし、ANY 接続を許可しないのは、上の運用ガイ ドにもあるように、外部の人に容易に親機を利用・接続されないようにするため です。※ 試してないのでわかりませんが、AOSS などの自動設定の仕組みを使う と、SSID や共有キーは何かランダムな文字列になるのかな?その場合 ANY 接続 を不可にできるのかどうかわからないので、ひょっとしたらこの辺は手動設定が 必要な部分があるかもしれません。

また、親機の DHCP サーバー機能はオンにして、無線子機には IP address やら何やらが自動的に割り当てられるようにしておきます。

子機の設定

ここからは子機の FreeBSD としての設定です。なお、以下の話はすべ て FreeBSD 7.0 でのものです。それ以前のバージョンで動作するものかどうか はまったく確かめていないのでご了承ください。また、FreeBSD のインストール そのものはもう済んでいて、windows と dual boot で立ち上げ分けられるよう になっているとします。

まずは、windows xp を終了し、FreeBSD として起動し直します。windows 側のディスクは、適当なディレクトリにマウントして見えるようにしておきましょ う。

/etc/fstab で、例えば

/dev/ad0s1 /win ntfs ro

とかしておくと、 /win/DELL/drivers/RXXXXXX/DRIVER/ の位置に必要なファイルが 見えるようになります。

また、以下の FreeBSD での作業はすべてルートになって行うもの とします。

ドライバ

まずは FreeBSD で内蔵無線 LAN を認識させ、適切なドライバを入れてやらな くてはなりません。それには、 この辺 この辺によって、ndis ドライバを使えばwindows 用のものを流用できるらしいこと がわかっていました(これが、実は FreeBSD 5.x のときは私にはうまくできな かったんですよねえ…)。

上に挙げたように、windows 用の 3 つのファイル bcmwl5.inf, bcmwl5.sys, bcmwl564.sys が今 FreeBSD から見えています。これらを、/tmp あたりにコピーして、そこで作業します。そして、ここにあるように、念のため bcmwl5.inf の文字コー ドを utf-8 にしておきましょう。iconv を pkg_add しておかない といけないでしょうね(そこにある、 Ndis\params\IBSSGMode\enum の修正は、更新したドライバでは不 要になったようです。そんな項目は見つからない。また、そこにある、 wlan_*_load 変数の記述は不要になったようです)。

以下、大体そこの記述通りに作業していきます。

# ndisgen bcmwl5.inf bcmwl5.sys

とコマンドを実行。すると何度か質問されます。大抵の 質問にはそのまま Enter を押すだけでよく、「ドライバが追加のファームウエ アのファイルを使うなら、それを挙げよ」と言われる所でだけ、bcmwl564.sys と入力します。最後まで質問に答え終わると、bcmwl5_sys.ko というファイルを 作ってくれます。これが FreeBSD 用の無線 LAN ドライバになります。

先ほどのページの記述通り、# cp bcmwl5_sys.ko /boot/modules/ して、/boot/loader.confbcmwl5_sys_load="YES" と書いておきます(再起動時に、自動的 にドライバが読み込まれるための設定)。そこで # kldload bcmwl5_sys.ko とすれば、再起動しなくてもドライバが読み込まれ、使え るようになります。おそらく、ドライバがアダプタを認識したメッセージが出る と思います。一応、# ifconfig ndis0 として認識されていることを 確認しておきましょう。

WPA

このままでは、親機を認識したり暗号用のパスワードを入力したりなどの作 業をまったくしていませんので、当然まだ繋がるわけはありません。その作業を していきます。今度は、このページに沿って作業していきます(むーん、これも 見つからなくなってる…仕方ないんで、参考に FreeBSD Handbook を挙げておきます)。

まずは、/usr/src/contrib/wpa_supplicant/wpa_supplicant.conf/etc/ にコピーし、編集していきます。さて、ここが重要 なのですが、本稿のように

ときは、/etc/wpa_supplicant.conf必ず以下の 2 ヶ所をこの通り修正しなければなりません。元 のままでは接続できません(ここの所が、web の検索で見つかるページでは書い てなくてはまりました。大体どこも、セキュリティーの設定を甘くして、暗号化 なしや WEP で接続する場合のことしか書いてなかったので…)。

  1. ap_scan2 にする。そして、そこの注 記にもある通り、
  2. ファイル最後の network ブロックでは proto, key_mgmt, pairwise, group は明示的に1つを指定すること(指定を省略すると、複数のデフォ ルトが指定されたことになって、それがダメみたい)。また、scan_ssid についての説明にある通り、scan_ssid=1 にすること(でないと、ANY 接 続拒否の親機に「探し出してこちらから接続を要求する」ことができない (しない)模様)。

例えば、network ブロックはこんな具合にします。ここで、さっき触れたよ うに、親機に設定した SSID と共有キーが必要になってきます。

network {
	ssid="あなたのSSID"
	scan_ssid=1
	proto=RSN
	key_mgmt=WPA-PSK
	pairwise=CCMP
	group=CCMP
	psk="あなたの共有キー"
}

SSID と共有キーは秘密情報なので、 /etc/wpa_supplicant.conf は root 以外は読めないようなパーミッ ションにしておきましょう。

この設定が済んだら、# /etc/rc.d/wpa_supplicant forcestart ndis0 とコマンドを実行して、接続試験をしてみましょう。プロンプトが 戻ってきたら # ifconfig ndis0 してみたら、「status」の欄が 「associated」になり、上で設定した SSID やら、「authmode WPA2/802.11i」 なんていう表示やらが見えて、無事繋がってるのがわかるはずです。

そこで # dhclient ndis0 してみると、ちょっと待たされるけど、 しばらくするとプロンプトが帰ってくるはずです。そこで # netstat -rn してみると、localhost の他に、ちゃんと無線親機への route が出 来てることがわかるはず。おめでとうございます、無線 LAN による Internet 開通です。

こうやって /etc/wpa_supplicant.conf に正しい記述ができあ がったら、/etc/rc.conf

ifconfig_ndis0="WPA DHCP"
という行を追加しておけば、次の起動からは親機との接続も、DHCP の設定も、 自動でよきにはからってくれるようになります。

その他

解像度

X window を使おうとしてまず困ったのが、解像度が合わなくて荒い画面にし かならないことでした。windows xp で起動すると、1280x800 の 32bit で綺麗 な画面になってくれるのですが。

色々調べてみると、とっくに知られた現象らしく、 この辺りの説明を参考に解決することができました。ports から 915resolution をインストールし、/etc/rc.conf にて

i915resolution_enable="YES"
i915resolution_modes="38"
i915resolution_width="1280"
i915resolution_height="800"

のようにし、xorg.conf の "Screen" セク ションにて

        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes    "1280x800"
        EndSubSection

という欄を追加し、 DefaultDepth 24 な んて行を足した所、期待通りの画面となりました。

KDE

ディスク容量も、CPU パワーも、メモリも、OS のバージョンも何もかもこれ までと段違いになったので、総合デスクトップ環境として KDE を入れてみました(常用ブラウザを Opera にしたかったので、GNOME ではな く Qt をベースにした KDE を選択しました)。

起動したら自動的に xdm 相当のログインマネージャが立ち上がってくれるよ うにする方法がなかなかわからなくて困りましたが(みんな「インストールの仕 方」は力を入れて説明してあるんだけど、「インストールした後、どうすれ ば KDE が使い始められるのか」については書いてくれないんですよねえ…。 「その人にとっては」インストールが一番の山場で、そここそが説明したかった、 という事情はわかるんですが)、 KDE FreeBSD チームの解説でその方法もわかりました。 んで、KDE そのものについては、こち らを参考にして色々設定してみました。おお、こんな感じなんですね。確か に、これまで使ってきた twm とは全然違います。特に amd なんかの設定をしな くても、removable media を自動マウントしてくれる所なんか、細かい所に手が 届く感じですねー。

ものすごいいろんな機能がありますが、まだその一部しか使っていない感じ です。これから少しずつ使いこなしていきましょう。

ただ、音楽 CD を演奏させても音が聞こえないなあ…?起動時の音声はちゃ んと鳴るし、mplayer で mp3 とか wav とか鳴らすとちゃんと聞こえるんで、た ぶんどっかちゃんと設定すると聞こえると思うんですが、まだきちんと調べてい ません。

あと、ghostscript が、日本語のフォントを認識してくれず文字化けするの もちょっと困っています。ghostscript 8.x を使うのは初めてなので、何かきっ と日本語フォントの設定がおかしくなってるんだと思いますが。

suspend/resume

KDE とは無関係なことでひとつ困っているのが、 suspend/resume がうまく働かない、ということ。一度 suspend すると、 resume させても画面が真っ暗なままです。resume そのものはできているらし く、予めプロンプトを出した状態でsusupend/resume させたあと、真っ暗な画 面に対して shutdown コマンドを打ち込んでみると、ちゃんと shutdown なり reboot なりしているので、OS 的にはちゃんと動いていて、液 晶画面が消灯した状態のまま復帰しないだけではあるようなのですが。 いつの間にか、ちゃんと動作するようになっていました。FreeBSD 7.1 にバージョ ンアップしたときにたぶんそこも改善されていたんだと思います。確認が面倒で 放置しちゃっていました。

関係あると思われる設定を書いておきます。

  1. /boot/loader.confは、http://lists.freebsd.org/mailman/htdig/freebsd-mobile/2007-January/009441.html を参考に
    acpi_video_load="YES"
    
  2. を追加。
  3. /etc/rc.resume は、http://lists.freebsd.org/mailman/htdig/freebsd-mobile/2007-January/009443.html および http://www.running-dog.net/2007/05/hwacpivideoout0active.html#comments を参考に、
    sleep 2 && \
    sysctl hw.acpi.video.ext0.active=0; \
    sysctl hw.acpi.video.lcd0.active=0; \
    sysctl hw.acpi.video.lcd0.active=1
    
    を追加しています。試してませんが、sleep 以外の行はひょっとしたら active=1 の行だけでもいいのかもしれません。 ファイル内には、「無線 LAN が suspend 後再接続しないようだから、こ こで再接続させるようにしろ」みたいな指示がありますが、私の場合は suspend しても問題なく繋がるようなので、ほってあります。
  4. /etc/sysctl.confは、 Running-Dog さんの所を 参考に
    hw.acpi.standby_state=S3
    hw.acpi.suspend_state=S3
    hw.acpi.lid_switch_state=S3
    
    という行を追加してあります。これで、LCD パネルを閉じると自動的に suspend して、開くと自動的に復帰してくれます。復帰に当たって、特に キー入力等の刺激を与える必要はありません。開いただけで勝手に動き出 して、液晶画面も点灯してくれます。 上の 3 行のうち、最後の行を省くと、パネルを閉じると液晶が消灯する だけで suspend はしません。パネルを開くと再点灯してくれます。これ はこれで役に立つ、という人もいるでしょう。


コンピュータ関連のページ目次へ
トップページへ
井汲 景太 <ikumikeita@jcom.home.ne.jp.NOSPAM.>(迷惑メールお断り)
最終更新日: 2010年1月16日