Back | Top

Linuxによる無線LAN Access Pointの構築

Latest update: $Date: 2003/03/05 13:57:22 $


計算機(PC)に無線LANカードが搭載されているのも珍しくなくなりました. このような計算機にLinuxをインストールし,かつ搭載されている無線LANカードを 使って「アクセスポイント」と構築してみましょう.この計算機がNote PCなら "モバイルアクセスポイント(?)"にすることもできます.さすれば, 無線LANアクセスポイントを持ち歩かなくても(持ち歩かない?)よくなります.

このWebで紹介するのはPrism社製内蔵無線LANを持つIBM ThinkPad X22を例にとり, アクセスポイントの構築方法を紹介する.これはハードウェアに依存するようなので Prism社製以外のハードウェアを利用している場合は検索エンジン等でそのような ことを紹介しているページを探して見るといいだろう.ちなみにIBM ThinkPad X22の 内蔵無線LANはPCIバスに直結しているタイプの内蔵無線LANで,Prism 2.5仕様のもの だそうです(未確認).


というわけで,動作試験環境は以下の通りです.

ハードウェア: IBM ThinkPad X22
無線LAN: built-in PCI card (Prism 2.5仕様)
OS: RedHat Linux 7.2 (kernel version 2.4.18-24.7.x)

作業手順は以下の通り.

  1. 無線LANアクセスポイント化用カーネルドライバのインストールと設定
  2. IPアドレスを無線LANクライアントに配布するためのDHCPサーバのインストールと設定
  3. 無線LANからの通信を外部ネットワーク(Internet)に中継するための設定

ここではLinuxが稼働するノートPCを使用しているので,内蔵無線LANを 無線LANアクセスポイントにそして有線ethernetをInternet側に接続して 「ルータ」として稼働させることを目指す.


1. 無線LANアクセスポイント用カーネルドライバの作業

インストール作業

さてインストール作業は以下の通りである.

  1. ソースコードをdownloadする
  2. Host AP driver for Intersil Prism2/2.5/3からhost access pointドライバー となる"hostap<YYYY-MM-DD>.tar.gz"をdownloadする.
    このWeb pageを書いている時点での最新版は "hoshtap-2002-10-22.tar.gz"であった.

  3. カーネルのソースコードとコンパイル済み状態(?)にする
  4. カーネルのソースコードが必要になるので取得しておく, www.kernel.orgからdownloadしてもいいが, 使用しているのがRedHat Linuxなので updates.redhat.comから"kernel-source-2.4.18-24.7.x.i386.rpm"を downloadしてinstallした.

    ソースコードをインストールしたら/usr/src/linux-2.4配下に".config" ファイル,つまりカーネル機能設定のためのファイルを用意する必要がある. このファイルはmake menuconfig等のカーネルコンパイル作業をすれば作成されるが, RedHatの場合は,それでは動作しているカーネルと機能設定が異なってしまうので, 今回の場合はRedHatのカーネルにあわせるべく,/usr/src/linux-2.4/configs配下の "kernel-2.4.18-i686.config"ファイルを/usr/src/linux-2.4/.config ファイルとしてコピーすることでカーネルの機能設定済み状態とした.

  5. コンパイル準備
  6. まずソースコードを展開する.そうしたら展開したディレクトリ内のMakefileを 一点だけ編集する.それはカーネルのソースコードがあるディレクトリの指定である. RedHatの場合は2.4系カーネルであり,そのためにソースコードの展開されている ディレクトリも/usr/src/linuxから"/usr/src/linux-2.4"に変更されて いるためMakefileを書き換える必要がある.

    % tar zxvf hostap-2002-10-22.tar.gz
    % cd hostap-2002-10-12
    % vi Makefile
    
    変更前 (1-3行目)
    # Edit this path to match with your system (it should point to the root
    # directory of the Linux kernel source)
    KERNEL_PATH=/usr/src/linux
    
    変更後 (1-3行目)
    # Edit this path to match with your system (it should point to the root
    # directory of the Linux kernel source)
    KERNEL_PATH=/usr/src/linux-2.4
    

  7. コンパイル
  8. 実際にコンパイルを行う.今回は内蔵pci cardなのでmake picを実行する. なおこのパッケージはpccardやplx版のドライバーも構築できることが, 単にmakeと入力した時に表示されるhelpからも見てとれる.

    % make (試しにやってみた)
    Select the version to be build:
    make pccard      PC Card (PCMCIA) driver (Prism2 or Prism2.5)
    make plx         PLX-based PCI card with PC Card
    make pci         Prism 2.5 PCI Card
    make crypt       Make hostap_crypt*.o
    make hostap      Make hostap.o
    
    % make pci (PCIカード版 AP用ドライバのコンパイル)
    ...(途中略)
    Run 'make install_pccard' as a root to install hostap_cs.o
    Run 'make install_plx' as a root to install hostap_plx.o
    Run 'make install_pci' as a root to install hostap_pci.o
    

  9. インストール
  10. 引き続いてインストールをしよう.
    コンパイルの最後に表示されていた通り,rootユーザになり, 該当するmake installコマンドを実行する.今回の場合は内蔵pci cardなので make install_pciである.

    % su
    Password:
    # make install_pci (PCIカード版 AP用ドライバのインストール)
    ...(途中略)
    /sbin/depmod -a
    # exit
    % find /lib/modules/2.4.18-24.7.x | grep hostap (確認作業)
    /lib/modules/2.4.18-24.7.x/net/hostap_crypt.o
    /lib/modules/2.4.18-24.7.x/net/hostap_crypt_wep.o
    /lib/modules/2.4.18-24.7.x/net/hostap.o
    /lib/modules/2.4.18-24.7.x/net/hostap_pci.o
    


設定作業

手作業で行う.
もちろん,これら一連の作業を後でシェルスクリプトにしてもいいだろう.
  1. カーネルモジュールを有効にする
  2. % su
    Password:
    # modprobe hostap_pci
    Module                  Size  Used by    Not tainted
    hostap_pci             45388   1 
    hostap                 63492   0  [hostap_pci]
    hostap_crypt            2596   0  [hostap]
    i810_audio             23136   0  (autoclean)
    ...(以降省略)
    

    syslogには以下のような表示が出力されるはずである.

    Feb 19 23:33:03 hostA kernel: hostap_pci: hostap_pci.c 0.0.0 2002-10-12 (SSH Communications Security Corp, Jouni Malinen)
    Feb 19 23:33:03 hostA kernel: hostap_pci: (c) Jouni Malinen 
    Feb 19 23:33:03 hostA kernel: PCI: Found IRQ 11 for device 02:05.0
    Feb 19 23:33:03 hostA kernel: PCI: Sharing IRQ 11 with 00:1d.2
    Feb 19 23:33:03 hostA kernel: PCI: Sharing IRQ 11 with 00:1f.1
    Feb 19 23:33:03 hostA kernel: PCI: Sharing IRQ 11 with 02:03.2
    Feb 19 23:33:03 hostA kernel: hostap_pci: Registered netdevice wlan0
    Feb 19 23:33:03 hostA kernel: wlan0: NIC: id=0x8013 v1.0.0
    Feb 19 23:33:03 hostA kernel: wlan0: PRI: id=0x15 v1.0.7
    Feb 19 23:33:03 hostA kernel: wlan0: STA: id=0x1f v1.3.6
    Feb 19 23:33:03 hostA kernel: wlan0: Intersil Prism2.5 PCI: mem=0xf0000000, irq=11
    

    ifconfigコマンドによるNetwork Interfaceの状況確認結果は 以下のようになる.

    % /sbin/ifconfig -a
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:318 errors:0 dropped:0 overruns:0 frame:0
              TX packets:318 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 
              RX bytes:19302 (18.8 Kb)  TX bytes:19302 (18.8 Kb)
    
    wlan0     Link encap:Ethernet  HWaddr XX:YY:ZZ:AA:BB:CC
              BROADCAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 
              RX bytes:0 (0.0 b)  TX bytes:4960 (4.8 Kb)
    

  3. Network Interfaceの詳細設定
  4. 以下ではネットワークインタフェースの詳細設定をしていく.
    このWeb pageの説明では10.0.1.0/24のPrivate Networkをアクセスポイント (SSIDを"Idobata"とする)を中心とした無線LAN networkとして 構築することを前提とする.

    % su
    Password:
    # iwconfig wlan0 essid Idobata
     アクセスポイントのSSIDを決定する
    # iwconfig wlan0 channel 7
     アクセスポイントの使用するチャンネルを決定する
    # iwconfig wlan0 mode Master
     無線LAN interfaceをAP(Access Point)とする
    # iwconfig wlan0 確認作業 1
    Warning : Device wlan0 has been compiled with version 13
    of Wireless Extension, while we are using version 11.
    Some things may be broken...
    
    wlan0     IEEE 802.11-b  ESSID:"Idobata" 
              Mode:Master  Frequency:2.442GHz  Access Point: 00:VV:WW:XX:YY:ZZ
              Bit Rate:11Mb/s   Tx-Power:-6 dBm   Sensitivity=1/3  
              Retry min limit:8   RTS thr:off   Fragment thr:off
              Encryption key:off
              Power Management:off
              Link Quality:0  Signal level:0  Noise level:0
              Rx invalid nwid:0  invalid crypt:0  invalid misc:0
    
    # ifconfig wlan0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 up
     無線LAN interfaceにIPアドレスを設定する
    # ifconfig wlan0 確認作業 2
    ifconfig wlan0
    wlan0     Link encap:Ethernet  HWaddr 00:VV:WW:XX:YY:ZZ
              inet addr:10.0.1.1  Bcast:10.0.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 
              RX bytes:0 (0.0 b)  TX bytes:4960 (4.8 Kb)
    
    

    これらの設定が終わるとAppleやWindows等各種の無線LAN関連ツール(?)で アクセスポイント名が見えるようになるはずである.Mac OS Xで確認した時の 状況は以下の通りである.

    なお "iwconfig wlan0" で確認作業をしたときの"Warning" であるが,これは今回使用したwireless toolsのバージョンが古いために 表示されていると思われる.うまく動作しなければ新しいバージョンの wireless toolsをdownloadして,installすればこのWarningは表示されなく なるだろうと思われる(が,未確認).


その後の作業は二種類の方法がある

1. ブリッジ(Bridge化)編 / 2. ルータ(Router化)編


関連リンク集


Presented by Netaro the web | Since 2002