Edited at

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

More than 1 year has passed since last update.

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の場合とは一部の出力が異なるかもしれません。