メカトラックス様のラズベリーパイ用4G(LTE)通信モジュール「4GPi」で、グローバルIPアドレス固定割当の格安SIMイプシムを使ってみます。
#何ができるの?
有線LAN・無線LANが無い環境でも、外部からRaspberry Piを制御できます。
##ポイント
- Raspberry Piに直接グローバルIPアドレスが割り当てられます → APNを設定するだけ!
- インターネット側からRaspberry Piに接続可能です → ufwで必要な通信のみ許可します
※デフォルトの状態で使うと危険です。必ずufwやiptablesの設定を行いましょう。
※メカトラックス提供のOSイメージを用いる場合は、予めufwが有効になっています。
- Raspberry Pi 3 Model B+など
- ラズベリーパイ用4G(LTE)通信モジュール「4GPi」
- 適当な容量のmicroSDカード(4gpi-stretch-lite-20181029)
- 固定IPアドレスMVNO「イプシム」標準SIM
- モニタ・キーボード(または設定用PC+DHCPが有効な有線LAN)、ACアダプタ、ケーブルなど
##4GPiと3GPiの違い
4GPi | 3GPi | |
---|---|---|
通信方式 | 4G(LTE)専用 | 3G専用 |
対応キャリア | docomo/au/SoftBank | docomo/SoftBank |
ACアダプタ | 別途用意1 | 付属 |
環境構築済みmicroSD | 別途用意 | 付属 |
付属アンテナ | 2本 | 1本 |
#開封から接続まで
- microSDカードにOSイメージ(4gpi-stretch-lite-20181029)を書き込みます。
- Raspberry Piに4GPiを取り付け、4GPiにイプシムのSIMカードを取り付けます。
- Raspberry Piにモニタ・キーボードを接続します。なお、DHCPの割当状態が確認できる場合は、代わりに有線LANに接続し、Raspberry Piに割り当てられたIPアドレスを確認してください(ssh接続で作業できますので、モニタ・キーボードは不要です)。
- 起動します。
##初期設定(約1分)
-
Raspberry Piにコンソールまたはsshでログインします。
ID・初期パスワードは配布元を参照してください。 -
イプシムのAPNを設定します。
プリセットはされていないので、イプシムのAPN情報を設定します。
sudo nmcli con add type gsm ifname "*" con-name ipsim.net apn 4gn.jp user sim@with password sim
##接続確認(約3分)
![4GPI_LED.jpg](https://qiita-image-store.s3.amazonaws.com/0/211762/25641019-09f7-c88b-b22a-600ca318851d.jpeg)
1. 4GPiの青色LED
`《高速点滅》`
1. 4GPiパッケージコマンド [4gpi-networkmanager](https://github.com/mechatrax/4gpi-networkmanager/)
```text:4gpi-nm-helper
$ 4gpi-nm-helper show default all
4gn.jp sim@with sim
→APN情報が正しいことを確認します。
-
nmcliコマンド
nmcli(1)
$ nmcli con
NAME UUID TYPE DEVICE
ipsim.net 8bb407b2-3054-42e2-b3e7-************ gsm cdc-wdm0
Wired connection 1 d0840652-664f-39d5-9623-************ 802-3-ethernet --
```text:nmcli(2)
$ nmcli dev status
DEVICE TYPE STATE CONNECTION
cdc-wdm0 gsm connected ipsim.net
eth0 ethernet unavailable --
wlan0 wifi unavailable --
lo loopback unmanaged --
→DEVICEにcdc-wdm0が表示されること、STATEがconnectedになっていることを確認します。
-
ifconfigコマンド
ifconfig$ ifconfig -a eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether b8:27:eb:xx:xx:xx txqueuelen 1000 (Ethernet) RX packets 2672 bytes 215165 (210.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1169 bytes 268537 (262.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 18 bytes 882 (882.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 18 bytes 882 (882.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether ce:12:0f:96:95:60 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet XXX.XXX.XXX.70 netmask 255.255.255.252 destination XXX.XXX.XXX.70 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 485 bytes 34644 (33.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 333 bytes 31991 (31.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
→wwan0にイプシムのグローバルIPアドレス(今回のSIMの場合はXXX.XXX.XXX.70)が割り当てられていることを確認します。ppp0ではありません。2
-
netstatコマンド
netstat
$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 XXX.XXX.XXX.69 0.0.0.0 UG 0 0 0 wwan0
XXX.XXX.XXX.68 0.0.0.0 255.255.255.252 U 0 0 0 wwan0
→今回のSIMの場合はIPアドレスがキリのいい位置[^3]だっため/30扱いになっているようです。(/29以下になる場合もあると思います)
[^3]: IPアドレスの第4オクテットが.70で、/30の「中」に収まるため。
#実際に接続してみる
##Raspberry Piからインターネットに接続
- pingなどで実際の接続や名前解決を確認します。
##インターネット側からRaspberry Piに接続
1. ufwのデフォルト状態を確認します。ppp0とwwan0は、INが全拒否となっています。[^4]
```text:ufw
$ sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] Anywhere on ppp0 DENY IN Anywhere
[ 2] Anywhere on wwan0 DENY IN Anywhere
[ 3] Anywhere (v6) on ppp0 DENY IN Anywhere (v6)
[ 4] Anywhere (v6) on wwan0 DENY IN Anywhere (v6)
```
[^4]: /etc/default/ufwが`DEFAULT_INPUT_POLICY="ACCEPT"`に変更されているので注意しましょう。
1. 接続元のグローバルIPアドレス(YYY.YYY.YYY.YYY)を確認し、許可設定を最上位に追加します。
```
sudo ufw insert 1 allow from YYY.YYY.YYY.YYY to XXX.XXX.XXX.70 port 22 proto tcp
-
ufwのstatusを再確認します。
ufw$ sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] XXX.XXX.XXX.70 22/tcp ALLOW IN YYY.YYY.YYY.YYY [ 2] Anywhere on ppp0 DENY IN Anywhere [ 3] Anywhere on wwan0 DENY IN Anywhere [ 4] Anywhere (v6) on ppp0 DENY IN Anywhere (v6) [ 5] Anywhere (v6) on wwan0 DENY IN Anywhere (v6)
-
実際に手元のPCからインターネット経由でRaspberry Piにssh接続してみます。
LTE通信のため、3G通信と比較して圧倒的に高速・低レイテンシで使えるようになりました! -
後は、ufwに必要な許可設定を追加します。
##Raspberry PiからRaspberry Piに接続
- 同一構成を2つ以上用意すると、4GPi⇔4GPi間の接続も可能です。
#最後に
メカトラックス提供のOSイメージを使うと、ufwがインストール済みで、WAN側(固定IPアドレス側)はデフォルトでping応答以外は無効となっているため、比較的安全にインターネット側からRaspberry Piを制御可能な環境が出来上がります。ping応答も無効にしたい場合は、以前の3GPiの投稿を参考にしてください。
3GPiより高速な通信が可能になったことはもちろん、何よりも低レイテンシが嬉しいですね!
-
今回は5V/2.4AのACアダプタを用いてRaspberry Pi 3 Model B(B+ではありません)のmicro USBへの給電だけでも動作しましたが、メカトラックスさんによると4GPi用のACアダプタ(12V/2A/内径2.1mm)やslee-Piの使用を推奨とのことです。4GPi側にACアダプタを接続すると、Raspberry Pi側にも給電できます。(Raspberry Piのmicro USBへの給電が不要になります) ↩
-
raspberrypi-kernelの更新でwwanが使用できるようになったとのことです。 ↩