OpenMPTCProuterを使って家族のスマホ回線を束ねて使いやすい回線(=高速...ではない)にする

我が家は3台のスマホがある.
1. 楽天モバイル(データ容量無制限で一番高速、とはいえめちゃくちゃ速いわけでもない、8Mくらい?)
2. mineo(docomo)のパケット放題 Plus回線(データ容量無制限で最大1.5M)
3. 会社のiphone(auの回線で一番速いがたくさん使うと1Mに制限される。今回の検証作業用に参加)
4. 超低速のWIFI回線(およそ150kくらい、スマートリモコン用として利用)
という回線がある。3は書いてある通り仕事用なのでプライベートでは未使用なので普段は1または2に接続して家パソやタブレットを使っている。

**1 or 2 ...なぜ1 + 2で使えないのか。そう思ったことありますよね?!**
**1があるときは1を、1がないときは2を...と接続切り替えが面倒と感じたこともありますよね?!**
この記事はOpenMPTCProuterというソフトルータで複数回線束ねて使いやすい1本の解析を作ることにチャレンジした記録です。

OpenMPTCProuterという単語で検索するとQuiitaを含めいくつかの日本語サイトがヒットする。そのどこもが有線回線+スマホのUSBテザリングという構成で、なぜかスマホのWIFIテザリングの例がでてこない。なぜなのか?
海外の記事も探してみたけれどあまり見当たらなず「できる」とは書いてある。
便利そうなのに...なぜないのか?
なぜならすごく癖のある構成をしなければいけないから...と思う。

いろいろ試行錯誤した結果をOpenMPTCProuterのステータス画面で見ると以下のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/cb942c51-a93f-6d9c-723d-d2b297db0ec6.png)

これをわかりやすい図にすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/c1ec4700-dd35-3f61-c7fb-8858cd729ddb.png)

実際スピードテストすると3回線に負荷分散されていることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/338ee8b3-d1d5-d7e0-a5ee-1da7c72a8271.png)
それぞれのグラフは縦のスケールが異なるため(OpenMPTCProuterの仕様)どの回線がたくさん使われているか小さな画像から判断するのは難しいが、要するに分散されているということがわかる。
前の画像では束ねて20Mとなっているが、スピードテストの結果は8.35M...これは夜の11時くらいでピークタイムであったこと(空いてる時間帯なら15Mくらいになる)、proxyとなるVPSの速度が遅い(高いVPSにすればもっと早くなると思われる。現在はconohaの激安プランを利用中)という理由からそうなっている。
**とにかく束ねれば速くなる。というものではない。特にレイテンシーは確実に悪化し、ゲーム向きではないと思われる**

共働きの我が家では私が楽天モバイル妻がmineoを使っておりそれぞれ帰宅時間が異なる。楽天モバイルが最も高速ではあるが、私が帰宅するまでは使えないのでmineoテザリングでタブレットを使っている。私が帰宅しても切り替えずに妻はmineoテザリングのまま使っている。より高速である楽天モバイルがあるにも関わらずだ。それは切り替えが面倒だからに他ならない。
OpenMPTCProuterで束ねる仕組みをつくっておけばテザリング回線が増えると自動的に増速される。これが今回目指したところだ。

**利用した機器**
1. ラズパイ4(メモリ4Gモデル) 有線が1と無線が1
2. USBのLANアダプタ(ラズパイにもう1つ有線を増やすため)
3. USBのWIFIアダプタWLI-U2-KG54L(ラズパイに無線を増やすため)このアダプタは要ドライバインストール。
4. USBのWIFIアダプタLAN-W300AN/U2(ラズパイに無線を増やすため)このアダプタは何もせず認識された。
5. Buffalo WZR-HP-AG300HにOpenWRTを入れたもの(ラズパイに無線APを担わせると再起動のとき面倒なので外だしした)、DHCPは無効としている(DHCPはラズパイで動かすOpenMPTCProuterが担当、外だししたものでDHCPを動かしても構わないがシステム>OpenMPTCProuterのステータスタブから表示されるNetwork overviewで左上のPCやタブレットが×マークになる。理由はOpenMPTCProuterが払い出したIPではないから...×でも問題なく使えるのでDHCPを外だしするのも手ではある)
6. microSDカード2枚(設定を試行錯誤するときがあるから1枚より複数枚のほうがよい)
 1に234を接続するとラズパイに有線が2つ、無線が3つになる。有線の1つは家庭内用、もう1つは外向き(低速WIFI用)となる。無線の3つは楽天モバイル、mineo、auへの接続のため(OpenMPTCProuterがテザリングクライアントになるため接続先ごとに無線が必要となる)。

センスのない図だがこんな感じになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/0d6ba25d-589e-24d8-b69e-e1a7f8f00d09.png)


実際のOpenMPTCProuter(v5系)インストールは割愛する(特別なことはしていない)。
OpenMPTCProuterを使ううえでの注意点を記載する。


**絶対守ること1 システム>OpenMPTCProuterを選択した後に出るSettings Wizardタブは画面ロードが終わるまでマウスホイールを使わない**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/ac0a0630-5d3f-d474-47f8-98d54e0bde55.png)

これは絶対に気を付けること。画面ロード中にマウスホイールを回すと設定の選択リストの値が変わってしまう。しかもなかなかソレに気が付かず「あれ?接続できなくなった?」と困惑する。

**絶対守ること2 ラズパイの電源をプッチしない**
これはよくやりがちなのだけれど、面倒だから電源プッチ...そうするとファイルシステムエラー(readonly)になってしまう。そうなったらssh接続してファイルシステムチェックする。

**設定変更したらこまめに「保存」ボタンを押す**
あちこち一度に設定しない

**マスターとバックアップのそうだったのか理解**
OpenMPTCProuterの回線を束ねるときにメインとなる(=常に接続されているべき)回線をMultipath TCPマスターと呼ぶ、マスターが切断したときのものをMultipath TCPバックアップと呼ぶ(その他の回線はMultipath TCP有効)。しかしマスターとバックアップはレイテンシーが良い(速い)ほうをマスターとするべき。我が家の場合常に接続しているのは低速WIFIだが、これをマスターにするよりmineoをマスターにして低速WIFIをバックアップにしたほうが切り替えがスムーズになる。マスターはVPSとやりとりして全体コンフィグを常時更新していくからできだけ速い回線がよいらしい。なおバックアップを複数設定することはできず、マスターは必ずどれか1つ指定が必要となる。動的に切り替えたい場合は後述するCUIでやれば可能とは思う。

**IPv6の無効化方法はネットワーク>インターフェースでMACアドレスがあるものの設定から**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/dac27c1f-a979-640c-b86a-cff40a21f7d1.png)
我が家はIPv6不要であるためすべてのインターフェースで無効にしている。無効設定の後再接続ではだめでOSの再起動が必要となる。

**IPv6を無効化してもIPv4が表示されない場合がある**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/5fce9155-faa4-4180-5aa9-5c062cd69b1f.png)
原因がわからないけれどiphoneのテザリングはIPv6を無効化していてもホストのところにアドレスが出てくれない。ssh接続してifconfigするとアドレス取得できていることがわかる。

**再起動後もUSB接続のインターフェイス名を同じにしたい**
システム->OpenMPTCProuterの[Advanced settings]タブで、[Disable interfaces auto rename]がオフになっていることを確認してください。

**よくあるページのガイド通り設定しない**
よくあるページではシステム>OpenMPTCProuterを選択した後に出るSettings Wizardタブでマスターやバックアップ、有効の設定を行っているが、そこからやるとWIFIテザリングの場合には設定不足になる模様。

じゃあどこから設定するのかというとインターフェース>テザリングしたときに作られるインターフェースの詳細設定タブ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/a871bba3-738d-2f95-5a64-a4004f65f8d5.png)
ここで
・ 「デフォルトゲートウェイを使用」のチェックを外す
・ 「ピアから通知されたDNSサーバーを使用」のチェックを外す
・ 「IPv6割り当て長」のチェックを外す
・ 「Multipath setting」はマスター(master)、バックアップ(backup)、有効(enable)を選択
ファイアーウォール設定タブはすべてのインターネット接続口を1つのゾーンとして全部リストアップされるようにする(そうしないとMultipath settingしても接続できないエラーが出る)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/cf7c1472-b582-cc52-00e3-b8797ff02772.png)
もし後からマスター、バックアップ、有効を切り替えたい場合はネットワーク>MPTCPから行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/89d5236a-cd81-86df-501b-79a068b85e3b.png)

**UDPしか使えない機器を使うときは**
システム>OpenMPTCProuterからSettings WizardタブでShow Advanced Settingにチェックを入れDefault ProxyをShadowsocks(TCPしか使えない)からV2Ray VLESS(TCPとUDBが使える)に切り替え、OSを再起動する(VPS側の設定は自動的に切り替わる)。我が家ではtuyaのWIFIスマートリモコンの初期設定時にうまくいかずここを変更したところ登録できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/abea9f7b-4042-1374-af6a-9b828da3e0ca.png)

WIFIテザリング設定の流れは
1. ネットワーク>無線から無線ポートを選びスマホにテザリングする。
このときインターフェース名をわかりやすくしておくとよい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512483/2e6eff17-ab07-c323-bd5a-2da5fa85d87d.png)

2. ネットワーク>インターフェースからデバイスタブを開き、インターフェースでIPv6を無効にする。そしてOS再起動する。
3. ネットワーク>インターフェースから1で作成したインターフェースを編集してIPv6の無効化、「デフォルトゲートウェイを使用」のチェックを外す...などを行う。
3. すべてのテザリング設定を終えたら再起動する。

こんな感じで構成すれば複数回線束ねた使いやすい回線ができあがってくれるはず。
家に帰ってスマホをテザリングONすれば勝手に接続して束ねた回線に加えてくれるはず。

現在の不具合はBingのchat GPTが一切使えないこと(もしかしてVPSからの接続は一般ユーザではないと判断して拒否しているのかもしれない)。

なおAdblock系のソフトをVPSやOpenMPTCProuterにインストールすると不具合が出るので避ける。我が家ではラズパイZEROWにAdGuardHomeをインストールしてDNSキャッシュとして利用している。

----
OpenWRT同様にCUIでも設定できることの例

```bash:masterをコマンドで切り替えたいときの例
--redmeをマスターへ、oneplusを有効へ
--複数マスターに設定するとどちらか一方しか有効にならず、もう片方は無効と同じになる
uci set openmptcprouter.redme.multipath='master' 
uci set network.redme.multipath='master' 
uci set openmptcprouter.oneplus.multipath='on' 
uci set network.oneplus.multipath='on' 
uci commit

--oneplusをマスターへ、redmeを有効に
uci set openmptcprouter.redme.multipath='on' 
uci set network.redme.multipath='on' 
uci set openmptcprouter.oneplus.multipath='master' 
uci set network.oneplus.multipath='master' 
uci commit

--GUIの画面から設定して以下のコマンドでどこの項目が変更されているかチェックできる
uci show

```