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のソフトウェアマニュアルを参照してください。
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」というネットワークが表示されたでしょうか?
表示されない場合は、もう一度、設定内容を確認してください。
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サーバなど動かしてみてはどうでしょうか?