Posted at

4GPiで固定IPアドレスSIMイプシムを使う

メカトラックス様のラズベリーパイ用4G(LTE)通信モジュール「4GPi」で、グローバルIPアドレス固定割当の格安SIMイプシムを使ってみます。

4GPi.JPG


何ができるの?

有線LAN・無線LANが無い環境でも、外部からRaspberry Piを制御できます。


ポイント


  • Raspberry Piに直接グローバルIPアドレスが割り当てられます → APNを設定するだけ!

  • インターネット側からRaspberry Piに接続可能です → ufwで必要な通信のみ許可します

※デフォルトの状態で使うと危険です。必ずufwやiptablesの設定を行いましょう。

※メカトラックス提供のOSイメージを用いる場合は、予めufwが有効になっています。


準備するもの

ipsim.jpg


  • 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本


開封から接続まで


セットアップ(約15分)

4GPi_SIM.jpg


  1. microSDカードにOSイメージ(4gpi-stretch-lite-20181029)を書き込みます。

  2. Raspberry Piに4GPiを取り付け、4GPiにイプシムのSIMカードを取り付けます。

  3. Raspberry Piにモニタ・キーボードを接続します。なお、DHCPの割当状態が確認できる場合は、代わりに有線LANに接続し、Raspberry Piに割り当てられたIPアドレスを確認してください(ssh接続で作業できますので、モニタ・キーボードは不要です)。

  4. 起動します。


初期設定(約1分)


  1. Raspberry Piにコンソールまたはsshでログインします。

    ID・初期パスワードは配布元を参照してください。



  2. イプシムの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


  1. 4GPiの青色LED

    《高速点滅》



  2. 4GPiパッケージコマンド 4gpi-networkmanager


    4gpi-nm-helper

    $ 4gpi-nm-helper show default all
    
    4gn.jp sim@with sim

    →APN情報が正しいことを確認します。




  3. 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 --


    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になっていることを確認します。




  4. 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




  5. 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以下になる場合もあると思います)




実際に接続してみる


Raspberry Piからインターネットに接続


  • pingなどで実際の接続や名前解決を確認します。


インターネット側からRaspberry Piに接続



  1. ufwのデフォルト状態を確認します。ppp0とwwan0は、INが全拒否となっています。4


    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)





  2. 接続元のグローバルIPアドレス(YYY.YYY.YYY.YYY)を確認し、許可設定を最上位に追加します。

    sudo ufw insert 1 allow from YYY.YYY.YYY.YYY to XXX.XXX.XXX.70 port 22 proto tcp
    



  3. 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)




  4. 実際に手元のPCからインターネット経由でRaspberry Piにssh接続してみます。

    LTE通信のため、3G通信と比較して圧倒的に高速・低レイテンシで使えるようになりました!


  5. 後は、ufwに必要な許可設定を追加します。



Raspberry PiからRaspberry Piに接続


  • 同一構成を2つ以上用意すると、4GPi⇔4GPi間の接続も可能です。


最後に

メカトラックス提供のOSイメージを使うと、ufwがインストール済みで、WAN側(固定IPアドレス側)はデフォルトでping応答以外は無効となっているため、比較的安全にインターネット側からRaspberry Piを制御可能な環境が出来上がります。ping応答も無効にしたい場合は、以前の3GPiの投稿を参考にしてください。

3GPiより高速な通信が可能になったことはもちろん、何よりも低レイテンシが嬉しいですね!





  1. 今回は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への給電が不要になります) 



  2. raspberrypi-kernelの更新でwwanが使用できるようになったとのことです。 



  3. IPアドレスの第4オクテットが.70で、/30の「中」に収まるため。 



  4. /etc/default/ufwがDEFAULT_INPUT_POLICY="ACCEPT"に変更されているので注意しましょう。