OpenMPTCProuter でネット接続をタバタバして(束ねて)みる
巷では Network bonding という技術というかコンセプトというか、まあそんなに新しいものではなく、古くはアナログモデムやらISDNやらADSLの時代からあったと記憶していますが、それが最近の配信熱で、でもWiFiがない!携帯キャリア経由だと特に上りが遅い!というような不満と要求から、この記事が注目を集めています。
一言でいうと、携帯・モバイルネット接続など遅いネット接続を複数「束ねて」一本の「早くて太い」ネット接続として扱う、というものです。
下の図はこの技術の紹介サイトからお借りしたものですが、
"OpenMPTCProuter"からVPSまでは、それにつながっているPCやタブレットからは「一本の」ネットワークに見えるけれど、実際には複数のネット接続が同時に「協力」してつなげている、というイメージで考えてください。
正しく働けば、ネットの帯域幅やスピードの改善以外にも、どれか一つのネット接続が落ちてもつながり続けることが期待できます。まさにネット配信などの「落ちてはとても困る」系の接続に求められていることですね。
早速やってみました。
また途中です(SIMがもう一つ要る(よなw)ので注文中...)
用意したもの
・Raspberry Pi 4B + micro SDHC 32GB
・Ubuntu 20.04 仮想マシン on Hyper-V(Windows仮想マシンプラットフォーム)
・スマホ + USBケーブル x 2セット(4つまで束ねられるらしい)
・ネットワークケーブル適量
VPSサーバーセットアップ
基本はこのレビュー記事そのまんまです。レビュー記事ではクラウドの仮想マシン(GCP - Google Cloud Platform)を使用していますが、わたしは手元になぜか固定IPアドレスwと、特定マシンにDMZ可能なYAMAHAルーター、それにHyper-VのホストPCがあったので、Ubuntu 20.04 Desktopイメージをダウンロードして新規VMにインストールし(ここまではルーチンワーク)、手順どおりに
VPSサーバーをセットアップします。ポートは全部開けとけと言うことですが、とりあえず開けてますがおっかないので後で必要なの以外は(YAMAHAルーターのIPフィルタで)閉じます。まあ素のままなら変なポートは開いてないはず。
ローカルでホストする場合は(怖くなれければ)DMZ指定すればいいでしょうし、GCP VM使うときの手順はこの記事に書かれていますが、AWS EC2やAzureのVM使うときはデフォルトでは全部閉じてますので適切にポートを開ける必要があります。無闇に開けると叱られます。
動作実績のあるクラウドはここにリストがあります。AWS EC2もAzureも載ってないのはちょっと気になるな。[2020/11/11追記] AWSがリストに載せられました。
VPSサーバー側は、セットアップ時にカーネルソース一部持ってきてビルドしてカーネルモジュールのロードまでやりますので、それなりに時間がかかります。まあCore i3の上に乗っけてるVMでも気になるほどではなかったので、これ自体は重くないはず。で、再起動するともう動く状態です。
~$ uname -a
でビルド名を確認して、
~$ netstat -a | grep LISTEN
で22のかわりにポート 65222 が ssh 用として見えてれば成功。VMの場合は22じゃなくて65222にまずsshしてください。
~$ ssh -p 65222 user@host
です。ちなみに sftp はなぜか大文字なので
~$ sftp -P 65222 user@host
です。なんでやねん!
OpenMPTCProuter セットアップ
これもGigazineの記事通り、手元のRaspberry Pi 4を使いました。イメージダウンロードして解凍してSDHCカードに書き込み、ブートするだけです。モニタをつなげておくとブートメッセージを確認できますが、キーボード入力(もローカルでのログインも)できないのでどちらもつないでおく必要はありません。ブートはとても速いので、10秒ちょっとまてばもうルーターに接続できます。
USBテザリングもこの手順の通りです。サーバーKeyが長いので、「書き写す」のはしんどいです。コピペかUSBメモリでファイルとして持ってくるのがいいかなと。
SIMがまだ一つなので、つながってる先は1パスですが、上のスクショのようにVPS経由でネットにつながっています。速度はこんな感じ。下りはともかく、上りは配信時にはこれではしんどいかもですね。
とりあえずデータ用SIMを一枚入手しなくちゃね。スマホは確かUSBテザリングできるのがもう一つあったはず。
ルータープラットフォーム OpenWrt 自体は安定して動くようです、というかかなり枯れているモノなので当然ですね。あとは、実際に Bonding してみてのパフォーマンス、安定性、そして動画配信した場合の「実際」を確認してみる予定です。
ところでこれ電源切るときはぶちぬいていいのかな..(とりあえず大丈夫みたいだ)
セキュリティどうなの?
VPSサーバーがつながってるYAMAHAルータでは
ip pp intrusion detection
を有効化してあるけれど、OpenMPTCProuterから「でかいサイズのicmpが来た」アラートの嵐w どうしてそんな大きなicmpを送り付けるんだ...w 相手のIPアドレスを固定化できないし、受け側ポートもいっぱい使うのでセキュリティ的には結構しんどいなこれ。VPSサーバは何かと兼ねちゃダメですね。ネットワーク的にもできるだけアイソレートしておいたほうがよさそう。
VPS設定と同時に ShoreWall というファイアウォールを入れてくれるので、それを信頼するしかないかな。
セキュリティホールが見つかったら即閉じるとかしないとヤバい...。
ま、サーバー側はもしかすると玄人さんに任せたほうがいいのかもしれない。使う人が多そうなら、商業化は考えてもいいかな..
[2020/11/10追記] Bondingしてみた!
追加のデータ専用格安SIMが届いたので、早速もう一台のスマホに仕込んで実験実験。
マルチでつながっているのを確認。
下りは変わらないなw。まあ前の実験は夜中だったからか。今回は平日の真昼間。そして上りはだいぶ改善されました。これぐらい出ていればストリーミング配信できそう?かな?
取るのを忘れていた各インターフェースごとのトラフィックと合計。
上り・下りともに順当に「合計」されているのがよくわかります。
結構電波状況とかVPSサーバーへのネット接続(上り・下りとも)に左右されるのかもしれません。この辺は、継続して評価してみないと何ともです。
あ、実験に使ったRaspberry Pi 4 はこういうヒートシンクを抱えていますが、結構熱くなるので、真夏運用にはファン付きの方が安心かもですね。