ログBOXのアクセスポイント化

目の病気がなかなか快方に向かわず、只でさえ維持しにくくなっている集中力が上がりません。。orz
特に交渉毎に使う神経が疲れてしまっているので。。。
ちょっと、久々に技術屋に戻っております。

今までのログBOXには、いわゆる3G対応のWifiルータが内蔵されていました。
なので、何もしないでもWifiのアクセスポイントとして機能していました。
# ログBOXとしてWifiサービスがもれなく付いてきたって訳です。
しかし、その便利なWifiルータが生産中止になり、同じ価格帯以下で技適を採っているWifiルータが見当たらない状況になってしまった事で、3Gチップを搭載したモジュールを自ら制御する方向に切り替えています。

その3Gモジュールは、その名の通り、3G方式の携帯無線ネットワークへの接続を行うものでWifiとは何ら関係ありません。
BOX1台だけの計測を行うのであれば、これでも機能は満たしますが、3G搭載のBOXを親機として子機をぶら下げる目的や、タブレット等でモニタリングする目的を達成する為には、少なくともWifiのアクセスポイントとして機能し、3Gモジュールが確立するインターネットへの中継を行う事が必要になります。

3Gネットワークへの接続

今回、3Gネットワークへの接続には、SIM5320J という通信チップを搭載したモジュールを利用します。
ある会社さんが提供するUART接続が可能なモジュールを、Raspberry-piのUARTから制御して通信します。

ppp の設定は、
・接続する物理的デバイス条件と接続先プロバイダ情報を記述します。
ここでは、現在利用しているDTIのLTE-SIMを対象とします。
/etc/ppp/peers/DTI-LTE   ←名称は任意です。

hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/DTI-LTE"  ←ATコマンドでの接続コマンドシーケンスを記述したファイル
debug
/dev/ttyAMA0 ←3Gモジュールと接続するデバイス名
115200   ←最大スピード(bps)
defaultroute
noipdefault
user "user@dream.jp"
remotename DTI-LTE
ipparam DTI-LTE

persist
usepeerdns

で、PAP、CHAP手順のパスワードを
/etc/ppp/pap-secrets
/etc/ppp/chap-secrets
に記述しておきます。
そして、PPPの
は、Linuxからは pppd で行います。


# pon DTI-LTE    で起動
# poff DTI-LTE    で停止

Wifiアクセスポイントの構築

アクセスポイント化は、当然ながら Wifiアンテナを付ける必要があります。
今回は、PLANEX の GW-USNANO2Aを使います。
まず、/etc/network/interfaces にて

auto wlan0
iface wlan0 inet static
address 192.168.0.1
netmask 255.255.255.0

そして、hostapd でアクセスポイントとして機能させる事ができます。


# apt-get install hostapd

なお、今回使用している Wifi ドングルは 8192cu なので、apt-get でインストールされる hostapd では認識されません。バイナリをこちらからダウンロードして入れ替える必要があります。
設定としては、以下のような感じです。

/etc/hostapd/hostapd.conf

interface=wlan0
driver=rtl871xdrv
ctrl_interface_group=0
ssid=agrilog_ap1        SSID名です

hw_mode=g
channel=1
max_num_sta=255
auth_algs=3
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=a1b2c3d4   パスフレーズです。
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

後は自動起動するように設定します。


# chkconfig hostapd on
# service hostapd start

DHCPサーバの設定

なお、アクセスポイントを構築するには、アクセスしてきたクライアントに hostapd が形成するネットワークに加わる為のIPアドレスを貸し出す機能が必要になります。(クライアントが静的に hostpapd が形成するネットワークのIPアドレスを設定してあれば良いですが、それにはクライアントに対して、Wifiアクセスに必要なSSID+パスフレーズ以外のネットワーク情報まで開示する必要があり、その設定方法まで知ってもらうということまで必要になるので、ここでは考えません。)
このIPアドレスを貸し出す機能を提供するのが、DHCP になります。
ここでは、その実装として ISC社のdhcpを使おうと思っています。

ちなみに、この isc-dhcp は、数年後にメンテナンスを止めるようで、
http://netbuffalo.doorblog.jp/archives/4953451.html
ここで紹介されている kea-dhcp への移行も検討しました。
しかし、DBでアドレスのリース状態を管理することや、BIND10への対応など高機能ですが、まだ 0.9.2 であることやここまでの機能は不要であることから十分に安定している isc-dhcp とします。


# apt-get install isc-dhcp

設定は、以下の感じです。
/etc/dhcp/dhcpd.conf

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;     リースするIPアドレスの範囲
option broadcast-address 192.168.0.255;   ブロードキャストアドレス
default-lease-time 3600;           リース時間(秒)
max-lease-time 86400;           最大リース時間
option routers 192.168.0.1;         ディフォルトゲートウェイ
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4; DNSはGoogleのを借用
}

自動起動に設定します。

# chkconfig isc-dhcp-server on
# service isc-dhcp-server start

ルーティングの設定

このアクセスポイント「wlan0」に接続してきたクライアントのパケットのディフォルトゲートウェイとして3Gネットワークに接続した「ppp0」を割り当てて、更にこの ppp0 の持つIPアドレスでマスカレードすることで、クライアントはインターネットにアクセスできるようになります。
これは、iptables で設定します。


*nat
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
*filter
-A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o ppp0 -j ACCEPT
COMMIT

これで、ログBOXをアクセスポイントにできます。
これを何とかサラッと設定できる仕組みを考えないといけないのですが。。
もうちょっと勉強しないといかんですね。