エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

リモートワークを自作ルーター(OpenWrt)で支える

週末に訪れたゴルフコース

はじめに

M3の岩佐(@bloody_snow)です。 最近は M3 Technologies にてM3グループ各社のエンジニアリング支援をメインで担当しています。エムスリーキャリア株式会社株式会社イーウェルで取締役を勤めていますので、興味のある方はこれらの会社もよろしくお願いいたします。

M3ではリモートワークをメインとしているため、ネットワークの品質が業務効率に直結します。長らく市販のルーターを用いていたのですが、同時接続台数が増えるとパケットロスや通信速度低下が発生するなど、安定性に課題を感じていました。 もちろん最新のハイエンド家庭用ルーターに買い替えれば手っ取り早く解決します。ただ、せっかくなのでこの機会にそこそこの性能を持つシングルボードコンピュータをルーター化し、Wi-Fi は専用の Wi-Fi 7 アクセスポイントに任せる構成にチャレンジしてみました。 当時の光回線は1ギガ契約だったため、LAN 構成も 1GbE 前提で設計しています。現在は光回線の契約を10ギガに切り替え、LAN構成も 10GbE 化へ向けて順次機器を入れ替え中なので、そのあたりのアップグレードについても今後触れていく予定です。

ルーター用ファームウェアの候補

  1. OpenWrt
  2. OPNsense
  3. DD-WRT
  4. tomato

今回は対応ハードと比較的取っ付きやすそうなので、OpenWrtに挑戦しました。 結果として問題なく使えていて非常に満足しています。
他のファームウェア(OPNsenseなど)についても興味があるので、いずれ比較記事を書ければと思っています。

OpenWrt とは

組み込み機器を対象とした Linux オペレーティングシステムです。ルーターとして活用する上で十分な機能を備えています。 ベンダー製ルーターのように固定的な構成ではなく、 パッケージ管理機能を有しているので、用途に応じてパッケージを追加・変更してデバイスを自由にカスタマイズできます。

これにより、用途や環境に応じて必要な機能だけを柔軟に追加していくことができます。例えば以下のような拡張が可能です。

  • 広告・トラッキングをネットワーク全体でブロック(AdGuard Home / adblock)
  • 高品質な QoS (SQM cake)
  • 高速な VPN (WireGuard)
  • VLAN / Firewall の柔軟な構成
  • DDNS、NAS化、Dockerコンテナの実行など

「Linuxベースでカスタマイズ自由」「軽量で安定している」ため、今回のようなシングルボードコンピュータとの相性が抜群に良いです。

ハードウェア選定

  1. 適当なx86自作PC
  2. 適当なx86 mini PC
  3. Raspberry Pi + LANアダプタ
  4. Banana Pi BPI-R4
  5. NanoPi R6S/NanoPC T6
  6. Topton pfSense Mini Router
  7. Gowin R86S

今回は1GbE前提でSFP+が不要かつ常時稼働に耐える安定性と消費電力の低さを重視して NanoPi R6S を選択しました。

  • 3ポートLAN構成(2.5GbE x2, 1GbE x1)
  • RK3588S ベースで必要十分な性能
  • 小型・ファンレス・省電力
  • FriendlyWrtというOpenWrtをカスタマイズしたファームウェアが提供されている

NanoPi R6SはFriendlyElecの公式通販から購入しました。

ちなみに 10GbE 化に向けて Banana Pi BPI-R4 も AliExpress で購入済みです。性能が不足するようなら、Topton か R86S を次の候補にしています。

インストール

NanoPi R6S は公式でカスタマイズされた FriendlyWrt というイメージが用意されているため、インストール手順は比較的シンプルです。

1. イメージの取得

今回はmicroSDからeMMCにFlashします。microSDから直接起動する方法やUSB経由でeMMCにFlashする方法などもあります。 microSDからeMMCにFlashする場合は rk3588-eflasher-friendlywrt-24.10-docker-YYYYMMDD.img.gz のイメージを用いましたが、 方法に応じて適宜変更してください。 FriendlyElec の Wiki からリンクをたどり、ダウンロードします。

2. microSD / eMMC に書き込み

今回はmicroSDからeMMCにFlashしました。 私のメインマシンのOSはWindowsですので、イメージをmicroSDに書き込む際に balenaEtcher を書き込みソフトとして用いました。

その後、EFlasher が書き込まれたmicroSDカードをNanoPi R6Sに挿入して起動すると、 EFlasher が自動で起動し、eMMCに FriendlyWrt が書き込まれます。

3. 初回起動

メインマシンとNanoPi R6Sを有線LANで接続して起動します。 http://friendlywrt/ にアクセスし、Web UIから設定します。

  1. システム => 管理 => ルーターパスワード にてパスワード設定(デフォルトは root / password)
  2. システム => 管理 => SSHアクセス/SSHキー にてSSHの設定(SSHの鍵設定やLAN側からしかSSHできないようにする、など)
  3. ネットワーク => ファイアウォール => ... にてファイアウォールの設定(LAN, WANv4, WANv6の設定をする前なので、してからの方がわかりやすいかも)

4. ネットワーク設定

設定したインタフェースはlan, wan, wan6になります。wanはIPv4 PPPoE接続、wan6はIPv6 IPoE接続で設定しています。

設定したインターフェース一覧

eth0が光回線終端装置とLANケーブルで接続され、eth1が家庭内ネットワーク用のハブと接続されます。 最終的にIPv4とIPv6のアップストリームがリンクされている状態を目指しました。v4のみの方が当然シンプルで簡単ですので、最初はv4のみで設定を完了させ、後ほどv6も使えるように拡張しました。

ポートとネットワークの状態

IPv4のルートとルールは以下の通り

IPv4のルートとルール

具体的にはネットワーク => ルーティング => IPv4ルールに以下を追加

IPv4のルーティングルール一覧

設定したルールの中身

eth1のLANをeth0のWANにブリッジするためにbr-lanのデバイスを追加

eth1のLANをブリッジするbr-lanデバイス

LANの設定はシンプル

LANの設定

WANの設定はPPPoEでプロバイダからもらったユーザ名とパスワードを設定

WANの設定

WAN6の設定はプロバイダにv6設定をしてもらって、DHCPv6クライアントで設定

WAN6の設定

ファイアウォールの設定、WANからのアクセスを拒否

ファイアウォールのゾーン設定

細かい手順を全て再現するのが難しかったため、設定後の画面のスクショで失礼します。

実際に運用してみてですが、捌ききれない負荷がかかることはなく安定動作しています。

ロードアベレージ
温度
CPU負荷(core0-3)
CPU負荷(core4-7)

We are hiring!

エムスリー、エムスリテクノロジーズ、エムスリーキャリアでは、ギークでスマートなエンジニアを中心に、多数のチャレンジに果敢にアタックするプロダクト開発メンバーを絶賛募集中です。

エンジニア、QA、デザイナー、プロダクトマネージャーどの職種でも打席数が多く、プロダクト開発の基礎知識を習得しながら、社会にインパクトのある収益性の高いプロダクトを生み出す経験、ホームランの打ち方を学べる良い環境だと思います。

ご興味のある方は、下記のサイトから是非カジュアル面談等、お申し込みください!

jobs.m3.com

www.m3t.co.jp

career.m3career.com