2015年1月20日火曜日

Raspberry Piで遊んでみた

ゴルフ場の年始の福引で、プレイ無料券を引き当てた新村です。
2015年も良い年にしていきたいものです。

私の新年一発目の記事ですが、早速趣味に走っていきます。
年末年始に「Raspberry Pi(ラズベリーパイ)」という、イギリスでプログラミングの学習用に開発されたクレジットカードサイズの安価なコンピューター(シングルボードコンピューター)を使って、ルーティング機能の無い簡単なWifiアクセスポイントを作ってみました。

元々は、ラズベリーパイをスイッチングハブに刺せば、勝手にネットワークパケットを収集してクラウド上のサーバーに転送、サーバー上でパケット解析を行って、パケット情報に応じたリアルタイムなフィードバックを返すという仕組みを計画して、ラズベリーパイを購入しました。しかし、ネットワークパケットを収集するのに適したスイッチングハブが手近に無かったので、計画がとん挫してお蔵入りしていたのですが、年末年始休暇で時間があったので、引っ張り出して遊んでみました。



雑感


ラズベリーパイは、汎用的だからこそ、使いどころが難しい機材だと感じます。ラズベリーパイは、Linux OSを使いますが、単純にサーバーとして使うのであれば、IaaS上にLinux環境を立てた方がパワフルで使いやすいです。一方で、センサー端末として使うのであれば、Arduinoのようなマイコンボードの方がシンプルで使いやすいです。

「学習用に開発された」という目的通り、センサーと処理を既存の言語でサクッと開発するのが、ラズベリーパイの使いどころだと感じています。ラズベリーパイで実現可能なことは、他の端末の方が、より効率的に実現できるのですが、敷居が低いという点において、ラズベリーパイに勝るものは無いように思います。


OSのインストール手順


では、ラズベリーパイで、Wifiアクセスポイントを作っていきたいと思います。
ラズベリーパイは、自作PCと同じですので、はじめにOSをインストールする必要があります。
公式サイト(http://www.raspberrypi.org/)からラズベリーパイ向けのOSイメージをダウンロードして、Win32 Disk Imager (http://sourceforge.net/projects/win32diskimager/)などのツールを使って、マイクロSDカードに起動イメージを書き込みます。私は、Debian系のラズベリーパイ向けディストリビューション”Raspbian”のOSイメージを使いました。

起動イメージの作成が終わったら、ラズベリーパイに、モニタとLANケーブル、USBマウスとキーボード、起動イメージを書き込んだマイクロSDカードを接続して、電源ケーブルを差し込みます。私はHDMI対応のモニタを用意できなかったので、HDMI-Dsubコンバーターを使ってDsub端子を持つモニタに接続しています。


電源ケーブルを差し込んでしばらくすると、OSの基本設定ウィザードが表示されます。


このウィザードで、以下の操作を行ってから、<Finish>を選択します。
  • Expand Filesystem: 
    デフォルトのファイルシステムだと、SDカードの2GB程度しか利用することができないので、ファイルシステムを拡張して、SDカードすべてを利用できるようにします。この項目は選択すれば、設定は自動で完了します。
  • Internationalisation Options > Change Locale:
    “ja_JP.UTF-8”を選択して、メッセージが日本語で表示されるようにします。
  • Internationalisation Options > Change Timezone:
    Asia > Tokyo を選択して、時計をJSTに変更します。
  • Advanced Options > Update:
    “raspi-config”(この画面)のアップデートをします。

<Finish>を選択すると、OSが再起動します。

OSのセットアップ


再起動が終わるとログインできるようになります。ユーザー名”pi”、パスワード”raspberry”でログインできます。
汎用的な初期設定として、以下の操作を行っていきます。

viエディタの変更
Raspbianのデフォルト・エディタには、vimの最小構成版であるvim-tinyが設定されています。慣れていればいいのかもしれませんが、vim-tinyでは、方向キーが使えなかったり、バックスペースキーの挙動が普段とは異なるものになるため、使いにくいです。以下の操作でデフォルト・エディタをvim-hugeに変更します(赤字の部分を入力)。

pi@raspberrypi ~ $ sudo apt-get -y install vim
pi@raspberrypi ~ $ sudo update-alternatives --config editor
  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /bin/nano            40        自動モード
  1            /bin/ed             -100       手動モード
  2            /bin/nano            40        手動モード
  3            /usr/bin/vim.basic   30        手動モード
  4            /usr/bin/vim.tiny    10        手動モード
現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3

セキュリティ上の設定
デフォルト状態のLinuxでは脆弱性が高いので、SSHポート変更やユーザー・パスワードの変更、ソフトウェアのアップデートなどを行います。

アクセスポイント化


ようやく本題です。IO-DATA社のwifi子機”WN-G150UMK”をUSBポートに接続します。

ソフトウェアのインストール

まずは、アクセスポイント用のソフトウェア “hostapd”と、Wifi子機と有線LANをブリッジするソフトウェア “bridge-util”をインストールします。

dadiv@raspberrypi ~ $ sudo apt-get install hostapd bridge-utils

次に無線LAN子機を親機化するためのドライバをセットアップします。hostapdでは複数の親機用のドライバに対応していますが、今回使用している”WN-G150UMK”が利用している、Realtek社製のドライバには対応していないので、追加します。
Realtek社で公開しているドライバのソースコードを、有志の方がコンパイルして公開しているので、これを利用します。

dadiv@raspberrypi ~ $ wget http://www.adafruit.com/downloads/adafruit_hostapd.zip
dadiv@raspberrypi ~ $ unzip adafruit_hostapd.zip
dadiv@daspberrypi ~ $ rm -r adafruit_hostapd.zip
dadiv@raspberrypi ~ $ sudo mv /usr/sbin/hostapd{,.org}  ←もともとのファイルをバックアップ
dadiv@raspberrypi ~ $ sudo mv hostapd /usr/sbin/
dadiv@daspberrypi ~ $ sudo chmod 755 /usr/sbin/hostapd

ブリッジの設定
eth0(有線)とwlan0(無線)をブリッジさせて、Wifiからのトラフィックを有線LANに流せるように設定ファイルを変更します。なお、設置場所の制約上、下記の設定はブリッジに固定IPを振ってありますが、上位にDHCPサーバーが存在する場合は、”iface br0 inet dhcp”でも問題ありません。

pi@raspberrypi ~ $ sudo vi /etc/network/interfaces
--------------------------
auto lo
iface lo inet loopback
## eth0
allow-hotplug eth0
iface eth0 inet manual
## wlan0
allow-hotplug wlan0
iface wlan0 inet manual
## bridge
auto br0
iface br0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1
bridge_ports eth0 wlan0
--------------------------

アクセスポイントの設定
Wifiの通信仕様を設定します。特に必要が無ければ、下記のssidとwpa_passphraseを任意の名称に変更するだけで問題ありません。より詳細に設定をしていきたい場合は、ここ(https://github.com/tatsuya6502/rensai_arm/blob/master/02/hostapd-example.conf)を参考にするのが良いと思います。

dadiv@daspberrypi ~ $ sudo vi /etc/hostapd/hostapd.conf
--
interface=wlan0
ssid=<RaspberryPi>
hw_mode=g
channel=3
wpa=2
wpa_passphrase=<Password>
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
--

仕上げ
最後に、「アクセスポイントの設定」で作成した”hostapd.conf”が、デーモン起動時に読み込まれるように設定します。

dadiv@raspberrypi ~ $ sudo sed -i -e "s/#DAEMON_CONF=\"\"/DAEMON_CONF=\"\/etc\/hostapd\/hostapd.conf\"/g" /etc/default/hostapd

OSの再起動を行います。

dadiv@raspberrypi ~ $ sudo reboot

クライアントPCから以下のように接続できれば、設定は完了です。



参考


Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset)
http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/


0 件のコメント:

コメントを投稿