$yuzu->log();

技術ネタなど。

格安SIM(MVNO)とRaspberry Pi(ラズベリーパイ)でモバイルルータを作った 〜初期設定から完成まで〜

f:id:yuzurus:20150523195517j:plain
最近ジワジワ人気になってきた格安SIM(MVNO)とRaspberry Pi(ラズベリーパイ)。 今回はこの2つを使ってモバイルルータを作ってみたいと思います。

格安SIM(MVNO)とは?

格安SIM(MVNO)は非常に低価格でモバイル通信できます。 安いものだと月額500円以下のプランもあります。 非常に低価格なのですが、格安SIM(MVNO)を使うためには殆どの場合ドコモ端末かSIMフリー端末が必要となります。

Raspberry Pi(ラズベリーパイ)とは?

Raspberry Pi(ラズベリーパイ)とは手のひらサイズの超小型コンピュータで電子工作やプログラミング等に使えます。 価格も非常に安く、5000円ほどで手に入ります。

用意するもの

・Raspberry Pi Model B+(4266円)

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

必須です。最近Amazonでも取り扱うようになりましたね。

・L-02C (4500円)

ヤフオクで中古品(2000円ぐらい)が出回っているのでそちらでも可。

・DMM mobile (最安プラン 660円)
Alt DMM mobile
今回は手持ちの格安SIM(MVNO)のDMM mobileを使用しました。

無線LANアダプタ (713円)

BUFFALO 無線LAN子機 コンパクトモデル 11n技術・11g/b対応 WLI-UC-GNM

BUFFALO 無線LAN子機 コンパクトモデル 11n技術・11g/b対応 WLI-UC-GNM

安くて良いです。

・8GB microSDカード (824円)

OSを入れるのに使用します。
以前のRaspberry Pi(ラズベリーパイ)はSDカードでしたが最新のモデルはmicroSDカードなのでご注意を。

・軽いモバイルバッテリー

今回は私の手持ちのモバイルバッテリーで代用しましたが持ち運びを考えると軽いものが良いです。

・有線LANケーブル (583円)

セットアップに使います。

RaspberryPi(ラズベリーパイ)の初期設定

作業PCはMacを使用します。
まずmicroSDカードにOSイメージを焼きます。OSはせっかくなのでRaspbian(ラズビアン)を使います。
公式サイトからRASPBIANを選択しダウンロード、解凍します。今回は2015-05-05リリースのものを使用します。ダウンロードが終わったらSDカードをMacに接続します。

df -hでSDカードのディスク名をチェック

$ df -h                                                               
Filesystem                                                    Size   Used  Avail Capacity  iused     ifree %iused  Mounted on
/dev/disk2s1                                                  29Gi  2.3Mi   29Gi     1%        0         0  100%   /Volumes/NO NAME

ディスク名は/dev/disk2s1でした。

diskutilでアンマウント

# diskutil unmountDisk /dev/disk2s1                                         
Password:
Unmount of all volumes on disk2 was successful

成功です。

ddコマンドでSDカードにOSイメージを書き込み

# dd if=2015-05-05-raspbian-wheezy.img of=/dev/disk2s1 bs=4m                  
781+1 records in
781+1 records out
3276800000 bytes transferred in 290.594687 secs (11276187 bytes/sec)

30分ほど時間がかかりました。これでSDカードにOSイメージが書き込まれました。

RaspberryPi(ラズベリーパイ)へ接続

f:id:yuzurus:20150523195645j:plain SDカード、有線LANをRaspberryPi(ラズベリーパイ)へ接続したあと、microUSBポートに電源を差し込みます。
赤と緑のLEDが点灯し緑が点滅すれば成功です。
私は初めて接続した時、赤と緑のLEDが点灯したまま点滅しませんでした。焼きがうまく行っていなかったようで、再度焼き直したら起動できました。
使用しているルータにアクセスしてRaspberryPi(ラズベリーパイ)に割り振られているIPアドレスを確認。今回は192.168.11.13でした。

MacからSSHを使って接続してみます。usernameはpi, passwordはraspberryです。

$ ssh pi@192.168.11.13           
The authenticity of host '192.168.11.13 (192.168.11.13)' can't be established.
RSA key fingerprint is 0d:6e:e9:9d:25:28:2b:51:59:c0:34:0e:6b:78:01:82.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.13' (RSA) to the list of known hosts.
pi@192.168.11.13's password:
Linux raspberrypi 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri May 22 05:04:12 2015

無事接続できました。

初期設定

今後はRaspberry Pi(ラズベリーパイ)上での作業となります。

# raspi-config

上記のコマンドを実行すると下記のような画面が表示されます。
f:id:yuzurus:20150523195643p:plain

ここで日本locale設定だけにします。

  1. Expand Filesystemを選択します。
  2. Internationalisation Options > Change Locale > ja_JP.UTF-8で日本語環境にします。
  3. Internationalisation Options > Change Timezone > Asia > Tokyoで日本時間にします。

パッケージ更新

パッケージ更新
# apt-get update
# apt-get upgrade

Vimをインストール

ついでにみんな大好きVimをインストールしておきましょう。

# apt-get install vim
# update-alternatives --set editor /usr/bin/vim.tiny

これでRaspberry Pi(ラズベリーパイ)の初期設定はひとまず完了です。

WiFiアクセスポイント機能有効化

Raspberry Pi(ラズベリーパイ)に無線LANアクセスポイントであるWLI-UC-GNMを差し込んでください。 Wi-Fiアクセスポイント機能を有効にするためにhostapdを導入します。
有線LANのeth0にDHCPIPアドレスを割り当て、無線LANのwlan0に固定IPアドレスを割り当てます。

# vim /etc/network/interfaces

auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
address 192.168.100.1
network 192.168.100.0
netmask 255.255.255.0
gateway 192.168.11.1

次にhostapdをインストールします。

# apt-get install hostapd

ここでhostapdの設定を行いますが、使用するアダプタ(ドライバ)によって手順が変わってきます。
今回は「用意するもの」で挙げたWLI-UC-GNMを使った設定を行います。
lsmodして、ドライバを確認します。

# /sbin/lsmod

ドライバがmac80211ベースでした。 こちらは本家のhostapdがサポートしているのですが、apt-getでインストールされるものはバージョンが古いためhostapdを入れ替える必要があります。 公式サイトから最新のソースをダウンロード、コンパイルします。

$ cd /tmp
$ wget http://w1.fi/releases/hostapd-2.0.tar.gz
$ tar xvf hostapd-2.0.tar.gz

コンパイルに必要なライブラリをインストールします。

# apt-get install libnl-genl-3-dev libssl-dev

必要な設定を加えてコンパイルします。

$ cd hostapd-2.0/hostapd
$ cp defconfig .config
$ echo "CONFIG_LIBNL32=y" >> .config
$ make
# make install

hostapdの設定ファイルを修正。 ssid, channel, wpa_passphraseは適宜変更してください。

interface=wlan0
driver=nl80211
ssid=korokkeyasan
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=korokkeyasan
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

hostapd起動のための設定をします。
DAEMON_CONFがコメントアウトされているので下記のように修正してください。

# vim /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

WPASupplicantを無効にしておきます。一応適当なところにバックアップしておきます。

# mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service /tmp

DHCPサーバの導入

IPアドレスを自動で割り振るDHCPサーバを導入していきます。

# apt-get install isc-dhcp-server

設定ファイルを編集します。(設定した部分だけ抜粋)

# vim /etc/dhcp/dhcpd.conf

#コメントアウト
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

#アンコメント
# 正当な DHCP サーバーであることの宣言 
authoritative;

# ネットワークアドレスとサブネットマスク指定 
subnet 192.168.100.0 netmask 255.255.255.0 {

  # 貸し出すIPアドレスの範囲指定
  range 192.168.100.10 192.168.100.50;

  # ブロードキャストアドレス指定
  option broadcast-address 192.168.100.255;
  
  # デフォルト貸出期間
  default-lease-time 600;

  # 最大貸出期間
  max-lease-time 7200;

  # ゲートウェイアドレス指定
  option routers 192.168.100.1;

  # ドメイン名指定
  option domain-name "local";

  # ネームサーバーのホスト名 (Google)
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

DHCPサーバの起動設定をします。

# vim /etc/default/isc-dhcp-server
INTERFACES="wlan0"

先ほど設定したhostapdをデーモンとして起動するようにしたいので下記のように設定します。

# service hostapd start

また起動時にhostapdを起動させたいので下記のように設定します。

# update-rc.d hostapd enable 

DHCPサーバを起動します。

# service isc-dhcp-server start

また起動時にDHCPサーバを起動させたいので下記のように設定します。

#  update-rc.d isc-dhcp-server enable

これで自動でIPアドレスが割り振られるようになりました。

IPマスカレードの設定

カーネルの機能なので、ここでは特に何かインストールする必要はありません。

# vim /etc/sysctl.conf
 
# アンコメント
net.ipv4.ip_forward=1

一度再起動してこの設定を有効にします。

# reboot

再起動が終わったら再度SSH接続してください。 IPテーブルの設定でIPマスカレードを有効にします。

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これで有線LAN接続状態でクライアントが無線でインターネットに接続出来るようになりました!

LTEネットワーク接続

f:id:yuzurus:20150523195644j:plain いよいよ有線LANで接続ではなくLTEネットワークでの接続設定をしていきます。 予めL-02CをRaspberry Pi(ラズベリーパイ)に挿入しておいてください。

# apt-get install wvdial
# apt-get install eject

wvdialはダイアルアップ接続用ソフトなのですがejectはCD/DVD-ROMドライブをEjectするためのコマンド。 なぜか今回使用するL-02CはRaspberry Pi(ラズベリーパイ)につなぐとCD-ROMドライブとして認識され、Ejectしないと使えないという謎仕様。だから安いんですけどね。。

# eject sr0

確認します。

$ lsusb

L-02Cが一覧に出てくればOKです。
次に使用するSIMの設定を行っていきます。今回はDMM mobile(IIJmio系)を想定しています。

# vim /etc/wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","iijmio.jp"
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attempts = 3
Stupid Mode = 1
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
APN = iijmio.jp
Modem = /dev/ttyUSB2
ISDN = 0
Phone = *99***1#
Password = iij
Username = mio@iij
Carrier Check = no

Phoneは"99*1#"でも"99#"でも可能です。 いよいよ接続です。

# wvdial

PPP接続できました!! IPマスカレードの設定をします。

# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

起動時にPPP接続できるようにします。

# vim /etc/init.d/wvdialloop.sh
 
#!/bin/bash
LOG='/var/log/wvdial'
eject /dev/sr0
(
  while : ; do
  wvdial 2>&1
  sleep 15
  done
)   2>&1 > ${LOG} < /dev/null &
# chmod +x /etc/init.d/wvdialloop.sh
# update-rc.d wvdialloop.sh defaults

rc.localにIPマスカレードの設定を追加します。

# vim /etc/rc.local
 
# exit 0 の前に追加
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

これで電源を入れたらLTEネットワークに接続されモバイルルータとして機能するようになりました!!

その他

初期設定のままSSH接続していましたが、ちゃんと運用するのであればパスワードを変更するなり鍵を設定するなりしてセキュリティを高めてください。
また結構熱を持つのでRaspberry Pi(ラズベリーパイ)のケースを買ったほうが良いかもしれません。

まとめ

モバイルネットワークにつながると夢が広がりますね。とはいっても実はドコモ系MVNOはグローバルIPアドレスが割り振られないようで、遠隔操作やWEBサーバとして使うのは難しいようです。。ngrokを使うといけそうな気もするので次回挑戦してみたいと思います。

参考にしたサイト

http://qiita.com/makoto_kw/items/393e098f214f81449c9f
http://sideb.hatenablog.com/entry/mvno_kakuyasu_sim_raspberry_pi_lte_3g_mobile_router