RaspberryPi
ipsim
CandyPi

CANDY Pi Lite+ Dで固定IPアドレスSIMイプシムを使う

CANDY LINE様のラズベリーパイ向け3G/4G LTE両対応の通信ボード「CANDY Pi Lite+ D」で、グローバルIPアドレス固定割当の格安SIMイプシムを使ってみます。同じソフトウェアで動作する「CANDY Pi Lite LTE」や「CANDY Pi Lite 3G」でも同じです。
CANDYPiLite+_1.jpg

何ができるの?

有線LAN・無線LANが無い環境でも、外部からラズパイを制御できます。

ポイント

  • ラズパイに直接グローバルIPアドレスが割り当てられます → APNを設定するだけ!
  • Internet側からラズパイに接続可能です → ufwで必要な通信のみ許可します

※デフォルトの状態で使うと危険です。必ずufwやiptablesの設定を行いましょう。
※CANDY LINE提供のOSイメージを用いる場合は、予めufwが有効になっています。

準備するもの

ipsim.jpg

  • Raspberry Pi 3 Model B
  • ラズベリーパイ向け3G/4G LTE両対応の通信ボード「CANDY Pi Lite+ D
  • 通信用USBケーブル A to micro B(いわゆるmicro USBケーブル)
  • 適当な容量のmicroSDカード(OSイメージアップデート v3.0.0)、ACアダプタ、ケーブルなど
  • 固定IPアドレスMVNO「イプシム」nano SIM
  • モニタ・キーボード(または設定用PC+DHCPが有効な有線LAN)

開封から接続まで

セットアップ(約15分)

CANDYPiLite+_2.jpg

  1. microSDカードにOSイメージアップデート v3.0.0書き込みます。sshで接続できるよう、/boot/sshの空ファイルも作成しておきます。
  2. CANDY Pi Lite+ Dを組み立て、イプシムのSIMカードを取り付け1ます。せっかくなので、高速通信が可能となるUSB拡張ボードも取り付けましょう。2
  3. ラズパイにモニタ・キーボードを接続します。なお、DHCPの割当状態が確認できる場合は、代わりに有線LANに接続し、ラズパイに割り当てられたIPアドレスを確認してください(ssh接続で作業できますので、モニタ・キーボードは不要です)。
  4. 起動します。

初期設定(約1分)

  1. ラズパイにコンソールまたはsshでログインします。

  2. イプシムのAPNを設定します。
    イプシムのAPNはOSイメージにプリセットされていないので、手動でAPN情報設定します。3

    sudo vi /boot/apn
    
    /boot/apn
    {
      "apn": "4gn.jp",
      "user": "sim@with",
      "password": "sim"
    }
    
  3. いったん電源をOFFにします。

    sudo shutdown -h now
    

接続確認(約3分)

  1. 電源をON、CANDY Pi Lite+のグリーンLEDが
    《ゆっくり点滅》→《はやい点滅》→《点灯または点滅》
    と変化することを確認します。またその後オレンジLEDが
    《0.4秒間隔で点滅》
    することを確認します。

  2. candy-pi-lite サービス

    candy-pi-lite
    $ sudo systemctl status candy-pi-lite
    ● candy-pi-lite.service - CANDY Pi Lite Service, version:4.0.0
       Loaded: loaded (/lib/systemd/system/candy-pi-lite.service; enabled; vendor preset: enabled)
       Active: active (running) since Mon 2018-05-14 19:00:02 JST; 1 weeks 0 days ago
     Main PID: 415 (bash)
       CGroup: /system.slice/candy-pi-lite.service
               ├─ 415 bash /opt/candy-line/candy-pi-lite/start_systemd.sh
               ├─ 823 bash /opt/candy-line/candy-pi-lite/start_systemd.sh
               ├─ 836 pppd /dev/QWS.EC25.MODEM 460800 user sim@with password sim connect ''chat -s  ABORT "NO CARRIER" ABORT "ERROR" ABORT "NO DIALTONE" ABORT "BUSY" ABORT "NO ANSWER" "" AT
               └─1035 python /opt/candy-line/candy-pi-lite/server_main.py /dev/QWS.EC25.AT 460800 ppp0
    
     5月 21 19:06:41 raspberrypi pppd[836]: Connect: ppp0 <--> /dev/QWS.EC25.MODEM
     5月 21 19:06:42 raspberrypi pppd[836]: CHAP authentication succeeded
     5月 21 19:06:42 raspberrypi pppd[836]: CHAP authentication succeeded
     5月 21 19:06:45 raspberrypi pppd[836]: Could not determine remote IP address: defaulting to 10.64.64.64
     5月 21 19:06:45 raspberrypi pppd[836]: local  IP address XXX.XXX.XXX.XXX
     5月 21 19:06:45 raspberrypi pppd[836]: remote IP address 10.64.64.64
     5月 21 19:06:45 raspberrypi pppd[836]: primary   DNS address 118.238.xxx.xxx
     5月 21 19:06:45 raspberrypi pppd[836]: secondary DNS address 118.238.xxx.xxx
     5月 21 19:06:46 raspberrypi server_main.<module>[1035]: [NOTICE] <candy-pi-lite> serial_port:/dev/QWS.EC25.AT (460800 bps), nic:ppp0
     5月 21 19:06:46 raspberrypi server_main.__init__[1035]: [NOTICE] <candy-pi-lite> RESTART_SCHEDULE_CRON=>[] is ignored
    
  3. candyコマンド4

    sim
    $ sudo candy sim show
    {
      "msisdn": "08000000000", 
      "state": "SIM_STATE_READY", 
      "imsi": "440100000000000"
    }
    
    network
    $ sudo candy network show
    {
      "operator": "NTT DOCOMO NTT DOCOMO", 
      "rssi": "-51", 
      "network": "N/A", 
      "rssiDesc": "OR_MORE", 
      "registration": {
        "cs": "Registered", 
        "ps": "Registered"
      }
    }
    
    modem
    $ sudo candy modem show
    {
      "counter": {
        "rx": "3728", 
        "tx": "4758"
      }, 
      "datetime": "18/05/21,10:10:26", 
      "functionality": "Full", 
      "imei": "000000000000000", 
      "timezone": 9.0, 
      "model": "EC25", 
      "revision": "EC25JFAR06A04M4G_DCM", 
      "manufacturer": "Quectel"
    }
    
  4. ifconfigコマンド

    ifconfig
    $ ifconfig -a
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether b8:27:eb:xx:xx:xx  txqueuelen 1000  (イーサネット)
            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
    
    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  (ローカルループバック)
            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
    
    ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
            inet XXX.XXX.XXX.XXX  netmask 255.255.255.255  destination 10.64.64.64
            ppp  txqueuelen 3  (Point-to-Pointプロトコル)
            RX packets 20  bytes 664 (664.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 7  bytes 148 (148.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether b8:27:eb:xx:xx:xx  txqueuelen 1000  (イーサネット)
            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=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (イーサネット)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 180 (180.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    →ppp0にグローバルIPアドレス(XXX.XXX.XXX.XXX)が割り当てられていることを確認します。

  5. netstatコマンド

    netstat
    $ netstat -nr
    カーネルIP経路テーブル
    受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インタフェース
    0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0
    10.64.64.64     0.0.0.0         255.255.255.255 UH        0 0          0 ppp0
    

    →まぁ、PPPですからね。

実際に接続してみる

ラズパイからInternetに接続

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

Internet側からラズパイに接続

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

    sudo ufw insert 1 allow from YYY.YYY.YYY.YYY to XXX.XXX.XXX.XXX port 22 proto tcp
    
  2. ufwのstatusを確認します。

    ufw
    $ sudo ufw status numbered
    Status: active
    
         To                         Action      From
         --                         ------      ----
    [ 1] XXX.XXX.XXX.XXX 22/tcp     ALLOW IN    YYY.YYY.YYY.YYY           
    [ 2] Anywhere on ppp0           DENY IN     Anywhere                  
    [ 3] Anywhere on wwan0          DENY IN     Anywhere                  
    [ 4] Anywhere on eth0           ALLOW IN    Anywhere                  
    [ 5] Anywhere on wlan0          ALLOW IN    Anywhere                  
    [ 6] Anywhere on usb0           ALLOW IN    Anywhere                  
    [ 7] Anywhere (v6) on ppp0      DENY IN     Anywhere (v6)             
    [ 8] Anywhere (v6) on wwan0     DENY IN     Anywhere (v6)             
    [ 9] Anywhere (v6) on eth0      ALLOW IN    Anywhere (v6)             
    [10] Anywhere (v6) on wlan0     ALLOW IN    Anywhere (v6)             
    [11] Anywhere (v6) on usb0      ALLOW IN    Anywhere (v6)             
    
  3. 実際に手元のPCからInternet経由でラズパイに接続してみます。
    LTE通信のため3G通信よりレイテンシが低く、sshは問題なく使えました。

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

ラズパイからラズパイに接続

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

最後に

CANDY LINE製のOSイメージを使うと、予めufwがインストールされている上、WAN側(固定IPアドレス側)はデフォルトでping応答以外は無効となっているため、比較的安全にInternet側からラズパイを制御可能な環境が出来上がります。ping応答も無効にしたい場合はこちらを参考にしてください。
アンテナの固定方法を考える必要はありますが、USBドングルで苦労した身としては簡単にLTE高速通信に対応できるのは魅力的ですね!


  1. nano SIMです。 

  2. ラズパイ純正ケースでもなんとか入りました。当然蓋は閉まりませんが…。 

  3. OSイメージを書き込んだPC等で直接/boot/apnファイルを生成しても構いません。(改行コードに注意) 

  4. 検証ではSMS対応SIMを用いたため、データ専用SIMの場合とは一部の出力が異なるかもしれません。