Zopfcode

かつてない好奇心をあなたに。

「ルーターハック」概説

本記事はルーターハックAdvent Calendar 2日目の記事です。

2日目、ここから本番だ。

おことわり

技適 に関する筆者の配慮や考えについてはカレンダー1日目「技適とルーターハック」をご覧ください。本記事で紹介する内容は、法を遵守するための慎重な注意をもって書かれています。

www.zopfco.de

ルーターハックってなんなん

ルーターハック という単語を聞き慣れない方も多いであろう。こういう記事でよく付くコメントは「Ciscoかと思ったら違った」である。そう思い至る流れは想像がつくが、残念ながらそうではない。

f:id:puhitaku:20181130012148j:plain
ダンボーもPlanex社が発売した立派なルーターだ。

ここでいうルーターとは、民生品の有線/無線ルーターである。ごく普通の家庭を支える民生品のルーターは、さほどスピードが必要ではなく、さほど厳密な設定も必要ではない。だから、CiscoやJuniperのようなプロ向けとは似て非なるモノになっている。具体的に言うと、プロ向けはネットワークパケットをさばくのにASIC(専用にデザインされたチップ)のような高コストなパーツを使うのがザラだが、民生品は安い汎用部品を使っている。

f:id:puhitaku:20181202004819j:plain
多摩電子 (Axing) W06 の基板。Mediatek MT7688AN を搭載する近年オーソドックスな構成だ。

汎用部品 は主に組み込み向けCPUなどであり、つまりは汎用なコンピュータと等価だ。ルーターの中にいる彼らはパケットをさばくのが仕事だが、同じシリコンインゴットで生まれた兄弟は全く別の仕事をしていることだろう。そういった兄弟たちのように、ネットワーク以外の仕事をこなすポテンシャルが彼らにはある。ルーターハックは、そんな汎用部品でできたルーターたちで楽しく遊んでしまおうという好奇心の現れなのである。だから、ルーターハックを嗜む人々に「なぜRaspberry Piでやらないのか」と聞いたところで手応えのある回答は得られないだろう。

ここからは、ルーター は断りのない限り民生品の無線/有線ルーターを指すことにする。

ルーターの中身

ルーターには、日頃我々が使っているコンピューターと等価なものがよりシンプルになって詰め込まれている。

ハードウェア

  • CPU
  • DRAM
  • Ethernet PHY (PHYはphysicalの略、物理層のこと)
  • Wi-Fi PHY (WiPHYと略されることも)

受動部品やコネクタを除くと、本当にこれぐらいしか載っていない。ルーターは売価にして1万円を切るものも少なくなく、安くするために部品点数を少なくする必要があるからだ。複数の機能が統合されたチップをSoC (System-on-a-Chip)と呼ぶが、近年のSoCだと、CPUにEthernetやWi-Fiの物理層が全部入りになったものもある。全部入りになったチップは、物理的に小さく、ドライバなどの開発コストが減り、トータルの生産コストも減ることからかなり積極的に採用される傾向にある。コストが上がってもよいハイエンド品やフラッグシップ品は、性能を上げるためにSoCとWi-Fiで別のチップが搭載され、PCIe等で接続されるケースが増えてくる。

ソフトウェア

やはりソフトウェアも一般的なコンピューターとよく共通していて、ほとんどの場合、ファームウェアはLinux KernelとOSSの組み合わせでできている。この Linux + OSS + 組み込みコンピューター という構図はよく総称して Embedded Linux (組み込みLinux) と呼ばれ、起源は1995年の MIPS に対応した Linux 1.2 まで遡る。組み込みLinuxの歴史は、海外の記事を翻訳した明日の記事で紹介したいと思う。

例外としては、Apple AirMac (英名: Airport) や Linksys WRT54G の一部で VxWorks が採用されているほか、出自は不明だが独自のOSを搭載したものもある(具体例は失念)。

Raspberry Pi や PC と主に違うところ

毎回 Raspberry Pi や PC と書くのは面倒なので、以下 普通のコンピューター と書くことにする。

LANのポート(RJ-45)を複数持つ

ルーターであるからにはツイストペアケーブルが挿さるのは当たり前だが、物理的にポートが3つ以上あるのは普通のコンピューターと大きく異なる点だ。しかもスイッチのように使えるだけではなく、VLANを切れば全ポートで異なるセグメント(ネットワークアドレス)とルートを持つことも可能だ。SoC によっては、L2 レベルのパケットをハードウェアでさばけるものもある。

容量が総じて少ない

フレームやパケットの処理に巨大な記憶容量は必要ない。主記憶であるRAMにしろ、補助記憶であるNVRAMにしろ、容量は少なめであることがほとんどだ(SPI Flash、NOR、NANDなど多岐にわたるため総称してNVRAMと表現している)。少なめといっても1GBとかのオーダーではない。Flash 8MB, RAM 16MB なんてのもザラだし、RAMが128MB以上ともなれば「RAMがいっぱいある!」と手を叩いて喜ぶレベルだ。だから、ハックの内容によっては到底本体の記憶媒体に入り切らずUSBメモリやSDカードをマウントしたり、下手をするとUSBコネクタを生やすところから着手することすらある。

フレームバッファを持たない

フレームやパケットの処理に画面は必要ない。どのルーターもHDMIコネクタを持たないどころか、画面に描く絵を保持するフレームバッファを持つ能力すら完全に欠いている。よくある「USBで拡張モニタを増やせるアダプタ」のようなデバイスを使えばフレームバッファを獲得することも可能だが(本ブログでも過去に紹介している)、どうあがいても Linux kernel を一度自分でコンパイルしなければ得ることはできない。モニタがルーターにつながると本当にテンションが上がるので、DisplayLink製チップを搭載した製品を探しにハードオフのジャンクコーナーへ足を運ぶのも悪くないだろう。

www.zopfco.de

小さい

何度も言うようにルーターはネットワークの仕事に先鋭化したハードのため、基板のフットプリントを必要とする拡張コネクタや大掛かりな回路が少なめだ。最小級だと USB-Ethernet 変換アダプタ程度のサイズのものもある。小さいのに相関してハックの幅も限られてくるが、その中でフル仕様の Linux を動かすだけのパワーがあり、しかも完全に制御下に置けるというのだから面白い。

ルーターハックは主に何をするのか

おおまかには以下のような流れとなる。

  1. ルーターを品定めし手に入れる

    • 先人が道を切り開いたルーターのハック情報を得てもいいし、慣れてきたら「これならハック・移植できそう」という勘で買ってしまってもいい
    • 無線が使えなくなるなど普通のルーターとして生きていくことは困難になるので、ハードオフやリサイクルショップ、たんすに眠っているものがちょうどいい
    • 筆者がおすすめなのは メルカリで買う ことだ
  2. バラす

    • バラして中身を見てテンションを上げよう
    • CPU、RAM、その他のICどれでも型番で検索すればスペックやデータシートが出てくるはずだ
  3. ファームを入れる

    • 先人がビルドしたものがあれば、それをインストールしてハックの第一歩に踏み出せる
    • 後ほど紹介する OpenWrt は公式でバイナリを配布しているので例えばそれが使える
    • 念の為、ROMライターで無垢なファームを吸い出しておくとソフト的にぶっ壊しが発生しても直せる
    • 入れ方は千差万別なので時には面倒な手を踏む場合もある
  4. ファームをカスタマイズする

    • 実際のところ、ファームのビルド自体は難しくない
    • 途中つまずくことも多いと思うが、自分でビルドしてみれば得られる知識は段違いだ
  5. 遊ぶ!!!

    • OpenWrt なら opkg という軽量なパッケージマネージャがあり、いろいろインストールすることができる
    • 好きな shell やら tmux やらを入れてリッチなターミナルを得たり
    • samba を入れてNAS化してみたり
    • Linux をコンパイルしなおして機能を追加したり

できることは無限大だ。誇張なく、無限大だ。

よく使われるディストリビューション

普通のパソコンでよく Ubuntu が使われるように、普通のルーターではよく OpenWrt が使われる。組み込み Linux の開発経験のある方なら Yocto のようなディストリを使ったこともあると思われるが、 OpenWrt は源流に Buildroot を持ち、より歴史が長い。

OpenWrt それ自体は完全にカスタマイズ可能であり、ルーターのファームウェアとして最低限の構成からリッチなソフトウェアまで幅広く対応できる。ソフトの量でいうと流石に Debian のような大手ディストリビューションとは対比できないが、ネットワークでサービスを提供する Daemon は実に様々なものがパッケージとして提供されているし、自作パッケージを入れたりしなければ何も考えなくても make 一発でファームウェアの塊を吐いてくれるので楽だ。

当初はルーターのファームウェア向けとして開発が始まった(明日の記事を参照)OpenWrt だが、こういった柔軟さから近年では いわゆる IoT を主眼とするハードウェアでOpenWrtを採用するケースが出ているし、Arduino Yùn で動作する Linux も OpenWrt ベースで開発された Linino が採用されている。

次回

2日目はことはじめとしてルーターハックの全体像について説明した。明日はイギリスの Linux 開発者 Chris Simmonds 氏が組み込み Linux の歴史を綴った記事 Embedded Linux timeline を翻訳した記事を掲載する。