Howto

Armadillo-300をアクセスポイントとして使う

Armadillo-300を無線LANアクセスポイントとして使用する方法について説明します。 Armadillo-300の無線LANインターフェースをアクセスポイントに設定し、ルーティングなどの設定を行うことで、PCなどの無線LANクライアントから外部ネットワーク(インターネットなど)に接続できるようになります。

以下のLinuxが持つ機能を利用して実現します。これらは全て、Armadillo-300の開発環境に含まれています。

  • ネットワークインターフェースの設定コマンド
  • Linux 2.6のIPv4ルーティング機能
  • Linux 2.6のIPv4 NAT機能

これから説明する例では、以下のネットワーク環境を想定しています。ご利用の環境に合わせて適宜読みかえてください。

  • 外部ネットワーク(Ethernet LAN)
    ネットワークアドレス:172.16.0.0/16
    Armadillo-300のIPアドレス:172.16.19.100

  • 内部ネットワーク(無線LAN)
    ネットワークアドレス:192.168.10.0/24
    Armadillo-300のIPアドレス:192.168.10.100

1. カーネルとユーザランドイメージの準備

まず、NAT機能を有効にした、Armadillo-300のカーネルとユーザランドのイメージを作ります。 カーネル設定の変更により、iptablesコマンドをリコンパイルする必要があるため、ユーザランドのイメージも再作成する必要があります。

カーネルのコンフィギュレーションやatmark-distのビルド方法、イメージファイルの書き込み方法は、Armadillo-300のソフトウェアマニュアルを参照してください。

iptablesコマンドが正常にリコンパイルされるように、新規に展開したatmark-distで作業されることをお薦めします。すでにビルドされたatmark-distを利用する場合は、次のコマンドを先に実行してください。
[PC ~/atmark-dist]$ cd user/iptables
[PC ~/atmark-dist/user/iptables]$ make clean

atmark-distのコンフィギュレーションを行います。

[PC ~/atmark-dist]$ make menuconfig 

カーネル設定を選択します。

Kernel/Library/Defaults Selection  --->
  [<font color="yellow">*</font>] Customize Kernel Settings (NEW)

カーネル設定でNATを有効にするために、以下の項目を選択します。

Device Drivers  --->
  Networking support  --->
    Networking options  --->
      [*] Network packet filtering (replaces ipchains)  --->
            IP: Netfilter Configuration  --->
          
            <<font color="yellow">*</font>> Connection tracking (required for masq/NAT)
            <<font color="yellow">*</font>> FTP protocol support
            <<font color="yellow">*</font>> IRC protocol support
            <<font color="yellow">*</font>> TFTP protocol support
            <*> IP tables support (required for filtering/masq/NAT)
            <<font color="yellow">*</font>>   Full NAT
            <<font color="yellow">*</font>>     MASQUERADE target support

NAT機能を含むカーネルイメージをビルドします。

[PC ~/atmark-dist]$ make

できあがったカーネルとユーザランドのイメージファイル(linux.bin.gz, romfs.bin.gz)をArmadillo-300のフラッシュメモリに書き込みます。

2. ネットワークインターフェースの設定

無線LANインタフェース

シリアルコンソールからArmadillo-300にログインします。 wlanconfigコマンドでArmadillo-300の無線LANインタフェース(ath0)の通信モードをアクセスポイントに指定して再作成します。

[armadillo ~]# wlanconfig ath0 destroy
[armadillo ~]# wlanconfig ath0 create wlandev wifi0 wlanmode ap

WEP-KEY を使用する場合、iwconfigコマンドを使用して設定します。
ここでは使用するアクセスポイントのWEP-KEYが「00-01-02-03-04-05-06-07-08-09-10-11-12」であると仮定します。

[armadillo ~]# iwconfig ath0 enc 00010203040506070809101112

iwconfigコマンドを使用して、アクセスポイントのESS-IDを設定します。
ここでは使用するアクセスポイントのESS-ID が「myap」であると仮定します。そして、ath0インタフェースのIPアドレスを設定します。

[armadillo ~]# iwconfig ath0 essid myap
[armadillo ~]# ifconfig ath0 192.168.10.100

以上で、設定はおしまいです。Armadillo-300と無線で通信できるか確認してみましょう。
Windows PCでワイヤレスネットワーク接続の表示機能で、「myap」というネットワークが表示されたでしょうか? 表示されない場合は、もう一度、設定内容を確認してください。

winxp-wlan-list

LANインタフェース

ifconfigコマンドを使用して、LANインタフェース(eth0)IPアドレスを設定します。

[armadillo ~]# ifdown eth0
[armadillo ~]# ifconfig eth0 172.16.19.100

通信できることを確認するのは、pingコマンドで内部ネットワークにあるPCやサーバのアドレス(例: 172.16.0.1)を指定します。

[armadillo ~]# ping -c 2 172.16.0.1
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: icmp_seq=0 ttl=64 time=1.2 ms
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.7 ms

3. ルーティング設定

外部ネットワークと内部ネットワークの間にデータが転送されるように設定します。

[armadillo ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[armadillo ~]# cat /proc/sys/net/ipv4/ip_forward
1

次に、他のネットワークに通信できるように、routeコマンドでデフォルトルータを指定します。

[armadillo ~]# route add -net default gw 172.16.0.1 dev eth0

ルート情報は以下のようになります。

[armadillo ~]# route
Kernel IP routing table                                                         
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface   
192.168.10.0    *               255.255.255.0   U     0      0        0 ath0    
172.16.0.0      *               255.255.0.0     U     0      0        0 eth0    
default         172.16.0.1      0.0.0.0         UG    0      0        0 eth0

4. NAT設定

データが外部ネットワークから内部ネットワークに正しく転送されるように設定する必要があります。

外部ネットワークのデフォルトルータで内部ネットワーク(192.168.10.0)のルーティング情報を追加することが1つの方法ですが、デフォルトルータの設定を簡単に変えられない場合があると思いますので、今回はSNAT (Source NAT)機能を利用します。

以下のコマンドで、内部ネットワークからのデータのIPアドレスがArmadillo-300の外部ネットワークのIPアドレス(172.16.19.100)に変換されて、外部にあるサーバやPCと通信できるようになります。

[armadillo ~]# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 172.16.19.100

これで、Armadillo-300をアクセスポイントとして利用する準備が完了です。

5. 動作確認

Windows PCでワイヤレスネットワーク接続の表示機能で、「myap」ネットワークを選択して、必要に応じてWEP-KEYを入力してから、ワイヤレスネットワーク接続に適切な固定IPアドレスやネットワークアドレスを設定すると、外部のネットワークと通信できるようになります。以下が推奨のアドレスです。

  • IPアドレス:内部ネットワークの範囲にあるアドレス(例:192.168.10.150)
  • サブネットマスク:255.255.255.0
  • デフォルトゲートウェイ:Armadillo-300の無線LANインターフェースのIPアドレス(192.168.10.100)

6. 設定を起動時から有効にする

上記で行った設定を起動時から有効にするには、/etc/config/intefaces と /etc/config/ath0-pre-up を修正します。以下のように修正してから、flatfsdコマンドで保存して、再起動してください。

/etc/config/intefaces

# /etc/network/interfaces

auto lo eth0 ath0

iface lo inet loopback

iface eth0 inet static
        address 172.16.19.100
        netmask 255.255.0.0
        broadcast 172.16.255.255
        gateway 172.16.0.1
        up echo 1 > /proc/sys/net/ipv4/ip_forward
        up iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 172.16.19.100
        down iptables -t nat -F

iface ath0 inet static
        address 192.168.10.100
        netmask 255.255.255.0
        broadcast 192.168.10.255
        pre-up /etc/config/ath0-pre-up

/etc/config/ath0-pre-up

#!/bin/sh

IFACE=ath0
ESSID=myap
ENC=00010203040506070809101112
MODE=ap

if [ "$MODE" = "ap" ]; then
        wlanconfig ath0 destroy
        wlanconfig ath0 create wlandev wifi0 wlanmode ap
fi

if [ "$ESSID" = "" ]; then
        echo "Error: not set SSID."
        echo ""
        wlanconfig $IFACE list scan
        exit 1
fi

iwconfig $IFACE essid $ESSID &&
if [ ! "$ENC" = "" ]; then
        iwconfig $IFACE enc $ENC
fi

7. おわりに

このHowtoでは、PCからArmadillo-300経由で外部のネットワークに接続できるようになりました。これができたら、DHCPサーバやファイアーウォール、DNSサーバなど動かしてみてはどうでしょうか?