SoracomでIPv6を使う

この記事はSORACOMさんのSoftware Design巻頭特集記念リレーブログ 5/4日の記事です。

何か面白い使い方を?というのを考えて、やはり自分と言ったらIPv6じゃん(w)ということで、SoracomのNW上でIPv6を使うことに。

なぜIPv6か

普通に使うとMVNOのNWで端末にはIPv4プライベートが降ってくるですね。まぁ、Global IPv4が降ってきたらちょっぴりビックリはするけど、プライベートIPということで、上位のNWから直接何か攻撃されるとかってリスクは防げている。
ただし、やっぱりあれだよね、IoTというかM2M的というか、はるか昔からそれ系のと言ったら…IPv6(藁)だーよーね。IPv6 Globalを降るとIPv6 NW側から直接端末にリーチする事が出来るようになる。これはこれで便利。ただし、Global IP直撃アタックのリスクも出てくる。その辺は、NWがNativeでIPv6に対応していて、上位のFWで選択的にACLを書けたら素敵だなーとは思うけど、とりあえずは端末に直撃で振って使う事に。

使うもの

使うものはRPi3、L-02C、soracom simです。
IMG_1127

ここで、端末にどーやってIPv6を振るか…というと、トンネル、VPNものですね。ただし、NAT越えか上位ルータでのプロトコル番号41番を通したりが必要になったりする。

1) Hurricane Electric IPv6ブローカを使ってみる
これはうまくいった。上位のNWで41番通してくれているのね(多分)。本当は6to4とか残っていたらなーとか思ったけど、見つけられなかった。もうこの手のトンネルものはIPv6の普及と共に少なくなってきたもんね。
このHurricane Electricのは適当にメアドで登録するとブローカが使えるようになる。ただし、1日にGlobal IPに対して2個の設定しか食わせられない…そう、仮に上位のNWのGlobal IPが変わると割り当てされるブローカ、IPv6が変わるというか再設定をするハメになるから、ちょっとなぁ…といった感じだった。

2) SoftEther IPv6割り当てサービスを使う
これはたまに使っているIPv6接続サービス。素晴らしいっす。これを使うと構成は次のようになる。

IMG_1129

RPi用のARM SoftEtherクライアントでIPv6サーバに接続することで、IPv6のNWを引き込むことができる。これで別のIPv6 NW上のサーバから直撃でアクセスも可能になる。実際に接続した状態はこちら。

スクリーンショット 2016-04-25 20.42.01

ppp0はsimで接続したもので、vpn_soracomはSoftEther VPN IPv6接続で作ったinterface。ちゃんと2001から始まるGlobal IPv6が振られてますね。(あ、もうこのIPにアクセスしてもムルポッス。止めてるから:)
これでやりたい事は出来た。次に実際データを流してみる。

パケット圧縮を使う

SoftEtherにはパケット圧縮という機能が付いていて、これを利用するとNW上に流れるパケットを事前に圧縮する事が出来る。もちろん、Plain Textとかだと効率がいいけど、バイナリだと効率が悪くなる。とわ言え、流したデータ量に対して従量課金が発生すると思うと、この辺はできるだけ抑えたくなる。
ということで、IPv6サーバから毎秒ping6を流して、圧縮、非圧縮じのデータ量比較を確認してみる。

結果はこちら。これはSoracomさんの時間毎データ量から見ることができる。

pic1

1) 一番右のもっともデータ量が大きい : 非圧縮
2) 右から2番目のもの : 圧縮
3) 右から3番目より左 : ping6も何も投げない定常接続

ということで、ping6のデータ(64byte文字)だと当然っちゃ当然の結果になった。何もしないで接続だけの場合だと1MByteくらいのデータ量で、毎秒ping6(64byte)の圧縮だと2MByte、非圧縮だと3.1Mbyteという結果に。SoftEtherのパケット圧縮が効いてますねー。
もちろん、圧縮処理をすると端末もパケットを投げる時に、圧縮/解凍が走るからその分重くなるけど、RPi3 quad-core ARMのハイスペックだと毎秒64byteなんて投げても負荷はもちろんゼロ。

まとめ

ということで、IoT/M2M的にはやっぱIPv6だーよーねー、というのは将来的な部分や可能性として6LoWPANという利用もあるから、何にしてもIPv6を引き込みたくなる(気がする)。
とりあえず、HurricaneとSoftEther IPv6を使ったけどSEの方が自分は便利だと思う。軽快に動くし、パケット圧縮という機能で流量を圧縮することができる。これは従量課金という部分にヒットする所だけど、IoT/M2M的なデータ流通ってそんなにサイズ的・頻度もあるかどうか…だし端末への圧縮/解凍負荷をどう考えるか?という部分にも効いてくる。全部が全部、RPi3ほどのハイスペックじゃないからね(と言っても、たまにデータを投げるくらいでテキストとかなら軽めの圧縮をした方が良いと思われ)。
こうやって、IPv6をトンネル/VPNで通さなくてもNativeでIPv6が使えるよーになったら、何かもっとテンションが上がるよーな気がする:-)

TMCN Intel RealSense USB 3.0 original board

Intel RealSense用のUSB 3.0基板がelecrowから届いた。TMCNロゴが光輝いてますね。
P_20160414_212231

Windows10 RealSense SDKでバッチリ動いてます。


もちろんMac with librealsenseでも動作バッチリ。


この基板が作られたTMCNコミュニティ、kouさん、leeさんといった種々のノウハウの集合体でバッチリ動いて安定した基板が出来てきた。何か物や個人で…というのはあったりするけど、こういうコミュニティベースでノウハウが集まったできる、そしてバッチリ動いているというのは感動すら覚える。物、アプリ、カメラ、電気まわりのノウハウが自然に集まって、物ができるというのは素晴らしい!!!!の一言に尽きます。

この基板とコネクタがあると次の利点がある。
– RealSense R200/F200の形状に関わらず好きな形状を3Dプリンタとかで出力して、独自センサー(な物)を作れる。
– AR/VR向けの何か特殊デバイスや、組込み向けの物とかでも利用可能。
– ケーブル・足回りも独自のものが作れる。
…etc
といった面白い利用方法がある。fb/tw上にUSB 3.0の写真をアップしていたり、「何してんのwww」と言われたりしたのは、この実験をひたすらしていたという訳ですね。以下は自分のUSB 3.0、RealSenseハックの苦闘の歴史を。

元のRealSenseを分解

まずRealSenseを分解すると次のような構成要素になる。
pic1

カメラ、謎の基板、ケーブル、USB 3.0ケーブル。

次にUSB 3.0ケーブルを分解して実際に流れている電圧をチェック。
IMG_0440
IMG_0448

自分のノリだと、USB3.0ってもどーせUSB 2.0と同じノリでケーブルをちぎって繋ぎ変えて、電気まわりをハックすれば大丈夫だろう…と思ったら、USB 3.0との長い戦いが始まるとは思ってもみなかった。USB 3.0すげーよ。こんな線の中に最大5Gbps、2.4GHzとの電波干渉、TX(+/-)/RX(+/-)のGNDツイストとか…実体験としてわかったのは、「USB 3.0ケーブルは絶対にちぎるな!!」これに尽きる。TX(+/-)/RX(+/-)は電波干渉を避けるため被膜やツイスト、同軸と同じような作りといった、USB 2.0と同じような天真爛漫なノリで挑むと必ずハマる>< 2.4GHzのWiFiと干渉するって、もう剥いたら終了というのは後々知ったことで、この時点では天真爛漫になんとかなるだろと思っていたりしたwww
そして元のIntel RealSense基板の接続を見ながら結線を確認。3.0からの電気、信号線の並びを確認しつつ、5.0Vの電圧を3.3Vに変換してつなげればOKじゃん!!的な天真爛漫な気分でいたけど、地味にケーブルを処理するというのが切ない作業になるとは思っても見なかった。

超絶細い同軸ケーブルとの戦い

分解してUSB 3.0の5Vを3.3Vに変換して繋げばOKやろ!!と思ったものの、基板とカメラを繋げているこのケーブルの処理が超細かい作業だった。この写真、左は自分の髪の毛、そして右は接続ケーブル、ただしこの細さの同軸!!
IMG_0608

見えるでしょか…この細さで、シールド、外部導体、内部導体、絶縁体、内部導体という作りをしていて、この内部導体を結線するという作業が超絶細かい。髪の毛の細さが0.1mm-0.06mmとした場合、髪の毛の細さ位の同軸で、導体の処理をする、絶縁の処理をしてあげるという処理が必要になる。構造的に、0.0xmm以下くらいオーダーの処理をするなんて初めてで、シールドに少し力を入れると、全部ちぎれちゃう!!とか何度食らったことか。まぁ、この位のサイズでも慣れちゃえば、1本剥くのに1分もかからないくらいの熟練度に上がっていく。ちなみに、ルーペとか使わないで指先の感覚だけで処理する感じ。まぁ、慣れれば何でも問題ない。

ケーブルをちぎって、USB 3.0側と接続実験してみた時はこんな感じ。
IMG_0556

USB 3.0変換

USB 3.0ケーブルを剥いて使うと電波干渉や何が起こるか分からない…というのがあったから、千石さんでUSB 3.0変換基板をゲットしてきた。これで3.0ケーブルを剥かなくても信号線を取り出せることに。そして、3.0から5Vを3.3Vに変換するのは秋月さんでレギュレータ、TIのDC/DCを使って実験してみたり。

IMG_0588

これで動いた時は感動でした。初動はこんな感じ。

IMG_0591

この接続実験&検証の後、基板をデザインしてもらって、elecrowに発注&アセンブリして出来たのが一番最初の写真の基板。安定性バツグンです。Windows(RealSense SDK)/Mac(librealsense)のどちらで放置して動かしてもバッチリ安定稼働。素晴らしいっす。

色々と分かったこと

– コミュニティの力は凄い。元気になる。
– USB 2.0と3.0はスゲー!!のレベルが全然違う。
– USB 3.0ケーブルは絶対に剥くな。当然だけど変換使おう。
– どんなに小さいサイズでも感覚で慣れれば問題ない。
– 勝手基板だけど、これを活用して何か作れそう。

Intel RealSense USB 3.0 original board

Here is Intel RealSense R200 tear down.
pic1

And this is original(hacked) the Intel RealSense R200 USB 3.0 board and connector cable.
P_20160414_214159

P_20160414_212231

Running on Windows 10 with Intel RealSense SDK.



Following is Mac OS X EL Capitan with librealsense.



This original board for RealSense works very well on Windows/MacOS 🙂 Just USB 3.0 micro type B connector for this board/USB 3.0 Type A Male is needed. This RealSense board can use for special case/frame/housing, AR/VR original camera, and more different use for over the R200 case/connector restrictions.
Thanks for TMCN community, kou, lee!!

Following is 1st prototype version. Hack the USB 3.0 cable and power line on RealSense is very difficult. USB 3.0 SuperSpeed transmitter/receiver differential pair is sensitive, having a 2.4GHz radio interference. It was hard to hack:-P
IMG_0588

IMG_0448

IMG_0440

This board BOM list and circuit design is here.
Intel RealSense R200 datasheet is here.