読者です 読者をやめる 読者になる 読者になる

サラリーマン休日副業で月10万円以上目指すページ

普通のサラリーマンが副業で月10万円以上稼ぐ方法を一挙公開

MVNOの格安SIMを使ってRaspberry PiでLTE3Gモバイルルータを作ってみよう!

プログラミング ガジェット

f:id:linuxdiary:20150502002937j:plain

モバイルルータを作ろう!

最近よく耳にするようになってきた格安SIM
月額1000円以下という低価格で定額パケット通信を利用することができます。

中には月額500円を切るものもあります。

日本全国ほとんどどこでも通信可能なdocomoネットワークが
こんなに安い値段で使えてしまっていいのでしょうか?



格安SIMを使うためにはSIMを挿して使う
携帯端末かモバイルルータが必要です。

この端末がそれなりに高いわけで・・・

今回は5000円以下で入手可能な激安端末RaspberryPiを
格安SIMを挿入可能なモバイルルータにしてみます。

要求仕様は下記の通りとします。

  • 予算1万円以内(SIM代は除く)
  • 複数無線端末から同時接続可能
  • docomoネットワークのLTE接続可能
  • モバイルバッテリーで駆動可能
  • 有線LANのネットワークにも対応
  • カバンの中に納まるサイズ

普通に上記スペックのモバイルルータは2万円以上はします。

かなりお得に作れますよ!!



システム構成

下記にシステム構成図を示します。


f:id:linuxdiary:20150502024105p:plain


LTE3G外部ネットワークへはdocomoのUSBデータ通信端末
「L-02C」を使って接続します。

f:id:linuxdiary:20150502022211j:plain


内部ネットワークの各無線端末との通信は
USB無線アダプタ「WLI-UC-GNM」を使います。

f:id:linuxdiary:20150502022230j:plain


その他、100均のケースやケーブルを加工し使いました。

f:id:linuxdiary:20150502022320j:plain


モバイルバッテリーは2Aクラスの出力が可能なものを。

f:id:linuxdiary:20150502030331j:plain


準備するもの

  • Raspberry Pi本体(3800円)

Raspberry Pi Model B+ (Plus)

Raspberry Pi Model B+ (Plus)

  • 無線LANアダプタ(WLI-UC-GNM)(700円)

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

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

  • SDカード(4GB以上のもの)(800円)

  • モバイルバッテリー(1350円)

  • 格安SIMカード(OCNモバイル前提)

OCN モバイル ONE【SMS対応】マイクロSIM 月額1,020円(税抜)~

OCN モバイル ONE【SMS対応】マイクロSIM 月額1,020円(税抜)~


総額 8650円ナリ


最新のRaspberryPi+モデルはSDカードではなく
microSDカード対応になってますのでご注意ください。


各種設定

以下の設定はRaspberryPiを有線LANに接続し、
同一ネットワークにつながるデスクトップPC等から行います。

一から導入を知りたい方は下記サイトなどを参考にしてください。

RaspberryPiでドライブレコーダ 【RaspberryPiセットアップ】 - My Linux Diary


1.アクセスポイント機能(hostapd)導入

まずは手持ちの各携帯端末とRaspberryPiを無線で接続できるように
アクセスポイント機能を導入し、DHCPサーバーを立ち上げます。

有線LAN側eth0はDHCPでIPアドレスを自動割り当て、
無線LAN側wlan0は固定IPアドレスを割り当てます。

$ sudo vi /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をインストールします。

$ sudo apt-get install hostapd

WLI-UC-GNMはhostapdのバージョンが古く対応していません。
新しく本家のサイトから最新版をダウンロードします。

http://w1.fi/hostapd/ からソースファイル
(hostad-2.0.tar.gz)をダウンロードし展開します。
関連ライブラリもインストールしましょう。

$ wget http://w1.fi/releases/hostapd-2.0.tar.gz
$ tar xvf hostapd-2.0.tar.gz
$ sudo apt-get libnl-genl-3-dev libssl-dev

コンパイルを行います。

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

コンパイルしたhostapdを置き換えます。

$ sudo mv /usr/sbin/hostapd{,.orig}
$ sudo mv hostapd /usr/sbin/

設定ファイル(hostapd.conf)を書き換えます。
SSIDとパスワードは適宜書き換えてください。

$ vi /etc/hostapd/hostapd.conf
 
interface=wlan0
driver=nl80211
ssid=myraspberrypi
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=mypasswords
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

hostapdの起動設定をします。

$ vi /etc/default/hostapd

DAEMON_CONF="/etc/hostapd/hostapd.conf"

WPASupplicantを無効にしておきます。

$ sudo mv /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service ~/

下記コマンドでデーモンとして起動します。

$ sudo service hostapd start

これで固定IPでの各端末からの接続は可能となりました。
DHCP機能がないため、まだ自動的にIPアドレスが割り振られません。


起動毎にhostapdが立ち上がるようにします。

$ sudo update-rc.d hostapd enable

2.DHCPサーバー(isc-dhcp-server)導入

まずはインストールします。

$ sudo apt-get update
$ sudo apt-get install isc-dhcp-server

設定ファイル(dhcp.conf)を編集します。

$ vi /etc/dhcp/dhcpd.conf
 
#コメントアウト
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
 
authoritative;
 
subnet 192.168.100.0 netmask 255.255.255.0 {
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";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

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

$ vi /etc/default/isc-dhcp-server
 
INTERFACES="wlan0"

DHCPサーバーを起動します。

$ sudo service isc-dhcp-server start

これで各携帯端末から自動的に接続可能となりました。

起動毎にDHCPサーバーが立ち上がるよう下記を設定します。

$ sudo update-rc.d isc-dhcp-server enable

3.IPマスカレードの設定

この状態で各携帯端末から有線LAN経由で
外部ネットワークに接続できるようにします。

パケットを転送できるようにシステム設定します。

$ sudo vi /etc/sysctl.conf
 
net.ipv4.ip_forward=1

$ sudo reboot

iptablesの設定によりIPマスカレードを有効にします。

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これで有線モバイルルータとして機能するようになりました!

4.LTE/3G無線ネットワーク接続

いよいよRaspberry PiをLTEネットワークに接続します。

なぜかL-02CをRaspberryに接続するとCD-ROMと認識されます。

$ dmesg
 
[ 718.387690] usb 1-1.2: new high-speed USB device number 5 using dwc_otg
[ 718.490575] usb 1-1.2: New USB device found, idVendor=1004, idProduct=61dd
[ 718.490610] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 718.490626] usb 1-1.2: Product: docomo L02C
[ 718.490640] usb 1-1.2: Manufacturer: NTT DOCOMO, INC.
[ 718.490654] usb 1-1.2: SerialNumber: 353168043428010
[ 718.500367] usb-storage 1-1.2:1.0: USB Mass Storage device detected
[ 718.506959] scsi host0: usb-storage 1-1.2:1.0
[ 718.533685] usbcore: registered new interface driver uas
[ 719.509159] scsi 0:0:0:0: CD-ROM LG Autorun 2.00 PQ: 0 ANSI: 0
[ 719.557418] sr 0:0:0:0: [sr0] scsi-1 drive
[ 719.557457] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 719.562875] sr 0:0:0:0: Attached scsi CD-ROM sr0
[ 719.592345] sr 0:0:0:0: Attached scsi generic sg0 type 5

CD-ROMをejectするためのコマンドをインストールします。

$ sudo apt-get install eject

CD-ROMをejectすると・・・

$ eject sr0

今度は正しく認識されます。

$ dmesg
 
[ 839.523291] usb 1-1.2: USB disconnect, device number 5
[ 839.525094] scsi 0:0:0:0: rejecting I/O to offline device
[ 839.525131] scsi 0:0:0:0: killing request
[ 839.932198] usb 1-1.2: new high-speed USB device number 6 using dwc_otg
[ 840.034681] usb 1-1.2: New USB device found, idVendor=1004, idProduct=618f
[ 840.034716] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 840.034733] usb 1-1.2: Product: docomo L02C
[ 840.034748] usb 1-1.2: Manufacturer: NTT DOCOMO, INC.
[ 840.140872] usbcore: registered new interface driver usbserial
[ 840.144246] usbcore: registered new interface driver usbserial_generic
[ 840.144999] usbserial: USB Serial support registered for generic
[ 840.186171] usbcore: registered new interface driver option
[ 840.188284] usbserial: USB Serial support registered for GSM modem (1-port)
[ 840.189350] option 1-1.2:1.0: GSM modem (1-port) converter detected
[ 840.194371] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 840.195086] option 1-1.2:1.1: GSM modem (1-port) converter detected
[ 840.196391] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 840.197081] option 1-1.2:1.2: GSM modem (1-port) converter detected
[ 840.200921] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[ 840.201625] option 1-1.2:1.3: GSM modem (1-port) converter detected
[ 840.204714] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB3

wvdialというパッケージをインストールします。

$ sudo apt-get install wvdial

wvdialの設定ファイルを作成します。
下記はOCNモバイルの場合を想定しています。
自身のMVNOに合わせて書き換えてください。

$ sudo vi /etc/wvdial.conf
 
[Dialer Defaults]
Init1 = ATZ
Init2 = 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 = lte-d.ocn.ne.jp
Modem = /dev/ttyUSB2
ISDN = 0
Phone = *99***1#
Password = mobile
Username = mobileid@ocn
Carrier Check = no

下記のコマンドで接続します。

$ sudo wvdial
 
-> WvDial: Internet dialer version 1.61
-> Initializing modem.
-> Sending: ATZ
ATZ
OK
-> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
-> Modem initialized.
-> Sending: ATD*99***1#
-> Waiting for carrier.
ATD*99***1#
CONNECT
-> Carrier detected. Starting PPP immediately.
-> Starting pppd at **
-> Pid of pppd: 2954
-> Using interface ppp0
-> local IP address **.**.**.**
-> remote IP address **.**.**.**
-> primary DNS address **.**.**.**
-> secondary DNS address **.**.**.**

PPP接続が確立されていることが確認できます。

$ ifconfig ppp0
 
- ppp0 Link encap:Point-to-Point Protocol
inet addr:153.157.141.198 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:151 errors:0 dropped:0 overruns:0 frame:0
TX packets:175 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:47872 (46.7 KiB) TX bytes:28680 (28.0 KiB)

iptablesの設定によりIPマスカレードを有効にします。

$ sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

これでLTEモバイルルータとして機能するようになりました!

起動毎にPPP接続が確立されるようにします。

$ sudo vi /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 &

$ sudo chmod +x /etc/init.d/wvdialloop.sh
$ update-rc.d wvdialloop.sh defaults

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

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

これで電源投入時に自動的にPPP接続が確立され、
モバイルルータとして機能するようになります。


LTE通信中の総消費電流は0.9A弱。
結構発熱しますが・・・

f:id:linuxdiary:20150502030416j:plain


モバイルバッテリーでもしっかり駆動します。


RaspberryPiで学ぶ ARMデバイスドライバープログラミング

RaspberryPiで学ぶ ARMデバイスドライバープログラミング



まとめ

激安PCの先駆けとなるRaspberryPiを使って安価に
LTEモバイルルータを構築する仕組みを紹介しました。

今回使った技術は色々な応用が考えられます。

特にLTEネットワークに接続できる点は大きいですね。

GPSと連携してグーグルマップを表示させたり
カメラと連携させて見守りシステムを構築したり
可能性は無限大です。

グローバルIPを取得できれば遠隔操作等の応用も可能です。

とにかく「モノのインターネット(IoT)」の時代は
すぐそこまで来てるって感じです。

さああなたも無限の可能性にチャレンジしてみては?