🌎

IPアドレスごとに速度制限して、劣悪なインターネット環境を再現したかった

2024/07/28に公開

はじめに

普段、IoTなものづくりをしています。
よく問題発生が発生するのが、IoTのI(インターネット)の部分で、検証環境で問題なかったが実環境では問題が起こることがあります。当然そういった環境の違いを想定して、設計しテストを実施する必要があります。
ただ、出来れば手元の環境でも実環境を再現をしたいです。
そこで、劣悪なインターネット環境を再現できないか、具体的にはインターネット速度を制限して実環境に近づけることができないか試してみました。

過去に電波を遮断する布生地でLTE通信できるマイコンを覆って、インターネット速度を制限して実機テストを行ったことがあります。そこそこ上手く遮断できたと記憶しています。

また、こちらの記事も参考になりました。
実際に、アルミホイルを巻いて物理的に遮断するといったこと試してみましたが、意外と速度制限できませんでした。

https://zenn.dev/headwaters/articles/simulate-a-slow-network-environment

このような経験から物理的な遮断は準備や再現が大変です。

そこで上記の記事のDiscussion欄をみていると

ルーターの話ですが、openwrtなどでカスタマイズルーター使う場合もip単位とかでネットワークスピード制御は可能です。

といったコメントがありました。

「えっ、そんな方法があるの!?」

と思い、実際に試してみました。

本記事では、openwrtがはいっているルーターでIPアドレスごとに速度制限できないか試してみた、という内容になります。結論から述べると、上手くいきませんでした

ルーターを購入

ちょうどAmazon Primeセールで安くなっていたので、GL.iNetのBeryl AX(GL-MT3000)を購入しました。
GL.iNetは香港のメーカーで、購入したモデルはトラベルルーターという持ち運びに便利なサイズになっています。この時、トラベルルーターという括りがあることを初めてしました。

https://www.gl-inet.com/products/gl-mt3000/

そして、OpenWrtが初めからインストールされています。
IPアドレスから管理画面に入ると、このような画面になります。とてもわかりやすいGUIでした。

余談ですが、広告ブロック「AdGuard Home」を簡単に有効することもできます。
そのほかの詳細は省きますが、さまざまな用途で活用できそうです。

IPアドレスごとの速度制限を試してみる

IPアドレスごとに速度制限をかけるため、プラグイン「luci-app-nft-qos」を導入してみました。

さきほどの管理画面から、「プラグイン」 → 「luci-app-nft-qos」 → 「インストール」の手順で簡単に導入できます。

次に、IPアドレスごとに速度制限をかけるための設定を行なっていきます。
管理画面から「詳細設定」にアクセスし、下記画像の赤枠部のURLをクリックします。
そうすると、OpenWrtのデフォルトのユーザーインタフェース「LuCI」にアクセスできます。

そして、LuCIの「Services」 → 「QoS over Nftables」を選択すると、下記の設定画面が現れます。
ここで、「Add」ボタンをクリックし、速度制限を実施したいIPアドレスを入力します。また、「Static QoS-Download Rate」、「Static QoS-Upload Rate」のRate欄に値を入力します。

これで設定はおしまいです。

結果

冒頭にも書いたように、設定したのにも関わらず速度制限ができませんでした。

おわりに

調べてみると、同様に速度制限できなかった、といった報告ありました。

https://github.com/openwrt/packages/pull/21644
https://github.com/openwrt/packages/issues/16289
https://www.reddit.com/r/openwrt/comments/120t9ne/qos_over_nft_issue/

原因はいまのところよくわかりませんが、プラグインとOpenWrt(バージョン:21.02)に何か不整合が起きているのかもしません。途中経過となりますが、今後も調べてみたいと思います。

Discussion