OpenWrtで802.11sベースのWifiメッシュネットワークを組む

OpenWrtでメッシュを組もうとすると、かつてはチップセットとドライバの組み合わせを選ぶとか、WPA3を手動導入が必要だとかで若干クセがあったのだけど、近頃はすごく簡単になっていたので手順をメモ。端的にはwpadを入れ替えてメッシュアクセスポイント作るだけ。要点しか書いてないので、細かい点は公式を参照していただきたい

最初に:メッシュWifiについて勘違いしやすいこと

  • メッシュWifiの実装は色々ある。市販のルーターでメッシュ対応云々と謳われているのは、多くの場合はベンダー各社の独自実装である。ここでは802.11sという規格でのメッシュの話をする
  • メッシュネットワークは、複数のWifiアクセスポイントを(網の目状に)相互接続するもの。メッシュ専用のメッシュアクセスポイントを各Wifiバイス(ルータ)上に作成して利用する
  • メッシュアクセスポイントはルータ間の接続専用。なので、ここにはWifiクライアント(PCとかスマホ)は直接接続できない。メッシュとは別に、従来通りにクライアント用のWifiアクセスポイントを用意し、それらをメッシュアクセスポイントにブリッジ接続する形で運用する。OpenWrtでは単一Wifiアダプタ上にメッシュアクセスポイントとクライアント用アクセスポイントが同居可能なので、そうしてもいい。が、その場合は同一周波数帯を共用することになるので通信速度は落ちる点に注意する
  • クライアントがアクセスポイントをまたいで移動する際のユーザビリティ向上(例えば高速ローミングなど)は、802.11k/v/rなどの別の規格/機能により提供されるものであり、802.11sでメッシュを組むこととは別の話である。利用するには追加で実装せねばならない

構築リファレンス

OpenWrt公式の構築手順はこちら

openwrt.org

用意するもの

  • 2台以上のOpenWrtを導入したWifiルーター
    • OpenWrtは19.07以降であること。経験上古いバージョンほどマイナーな制限があるので(ドライバ入れ替えないと動かないとか)、素直に最新版でいいと思われる
    • 個人の経験上では、異なるチップセットファミリー間で接続しても普通に動く。Qualcomm系とMediatek系とかで。

設定方法

  1. 初期設定で入っているmesh非対応のwpadを削除する。opkg list-installed | grep wpadとかで探す。以下のどれかが入っているはずなのでremoveする
  2. メッシュに対応したwpadを選んでインストールする。wpad-mesh-xxxxは802.11r/wと802.11sをサポートしており若干サイズが小さい。wpad-xxxxはフル機能サポートで具体的には802.11s/k/v/r/wが利用可能になるがフットプリントが大きくなる。あとopensslは比較的互換性が高く利用実績もあるがサイズが大きめ。wolfssl/mbedtlsは据え置きデバイス用に軽量化されているが、まあ個人の宅内利用的にはどれでもよろしいかと思う。自分が使うデバイスのストレージ空き容量と相談して適当に決める
  3. wpadの入れ替えが済んだら一旦リブート
  4. luciのwirelessメニューからメッシュアクセスポイントを作る。Modeに802.11sを選択し、Mesh IDには任意の文字列を指定する


    Wireless SecurityはWPA3-SAEを指定する。というかWPA3-SAEとNo Encryption以外は非対応で選択できない

  5.  こんな感じで動き始めればOK。立ち上がらない場合はログを見てトラシュー

  6. 同様に2台目以降のOpenWrtデバイスにもメッシュの設定を行う

  7. Associated Stationsにメッシュ内のデバイスが相互に表示されれば設定成功

  8. ちゃんと通信ができるかチェックする
    • 接続先のルータにPingを打つなどして疎通を確認する
    • iperf3とかを使ってスループットやエラーレートも見ておく

使い方

  • 基本的にはこれで終わり。普通に作ればメッシュアクセスポイントはLANのブリッジ(br-lan)に含まれるはずなので、メッシュをまたいで各アクセスポイントに接続したWifiクライアントや有線デバイスが相互に通信可能になる
  • 前述のとおり、メッシュアクセスポイントだけではWifiクライアントは接続できないので、通常のアクセスポイントも別途立ち上げる。ただし同一アダプタ上で同居させた場合は同一チャネルしか使えず、ルータ間の通信とルータ⇔クライアント間の通信が同一周波数帯でカブるので転送速度は落ちる

  • 速度を最大限に出したい場合はメッシュ用に専用の別チャネルを割り当てる必要がある。以下のような選択肢がある
    • トライバンドルータで別のWifiアダプタを使う
    • 有線で別のWifiルータを増設してクライアント向けアクセスポイントをそちらに任せる
    • 2.4GHz帯と併用する(逆に遅くなりそうな気もするが)

うまくいかない時に試すこと

  • System logを読んで原因のあたりをつける。wpad-supplicantみたいな名前のついてるところを探す
  • 各メッシュアクセスポイントのチャネルは合わせておく
  • wpadを別系統のものに入れ替えて試す。openssl/wolfssl/mbedtls
  • ath10k系では標準でCandela Technologies版ファームウェアと、それらに最適化された?というドライバが使われているが、メッシュとの相性があるので、これを無印に入れ替えて試してみる。CT版は末尾に"-ct"が付いているので、これをlist opkg-installedで探して、見つかったらまずremoveして、無印のものをinstallして、ルータを再起動して様子を見る

余談

  • ステーション数が少なくて、単純に無線アクセスポイントを設けたいだけなら、WDS(無線ブリッジ)のほうがシンプルで組むのも速いので、そっちでいいんじゃないかと思う。一方メッシュはデバイス間に一対一の親子関係がなく、配置換えや入れ替えが楽なので、ある程度頻繁にアクセスポイントの置き場所を変えたいとか、デバイスを入れ替えて使いたい、みたいな用途ならメッシュが向いている。そのようなニーズを持つ人はかなり少ないと思われるけども。
  • 中継器的に使って電波の到達範囲を拡張したい場合にはメッシュは有効だが、普通に組むと同一周波数帯で中継することになるので、通信速度は落ちる。いわゆるリピーター型の中継器よりは大分マシではあるけど。
  • 速度をできるだけ落とさずメッシュを拡張したいなら、中間点にはトライバンドないしはメッシュを有効にしたルータ2台を有線接続で組ませて、5GHz内でチャネルを分けて運用するのがいい。トライバンドでOpenWrtでメッシュが動くデバイスは選択肢が少ないので、コストや手軽さを考えると安物2台を組ませて疑似トライバンド(5GHzデュアルバンド)アクセスポイント化するのが有効な気がする。まあOpenWrtでメッシュ組んでる時点で手軽も何もないと思うが。
  • 個人的な経験上ではあるが、23.05でのメッシュは極めて安定している。Meraki MR52とMR42の2台をメッシュで常時接続させ、たまにオンデマンドでAsrock G10(QCA9980)が出入りする形で運用しているが、一年間ノートラブル。メッシュが不安定な場合は、メッシュ自体を疑うよりも、まず先に無線ハードウェア自体の安定性や電波状況からトラシューをかけるのが良さそう。例えばWDSなら安定するのか?とか。

では皆さん良きメッシュライフを。