「ルーターハック」概説

本記事はルーターハック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 を翻訳した記事を掲載する。

Wikipediaで推せ!お前のここすきを!!

本記事は kosen10s Advent Calendar 1日目の記事です。

お詫び

この文章はこの一杯のハイボールのブチ上げていきエネルギーによって書かれました。ちなみにグラスは赤ワイン用です。

足元で津山高専の同級生が寝ているさなか…12月1日が終わる30分前に書き出された滑稽な文章をお楽しみください。

f:id:puhitaku:20181201232841j:plain
濃すぎてキツい。

f:id:puhitaku:20181201233730p:plain
様子です。

※1: ショットといいつつハイボールなのは仕様です。

※2: unasuke の画像がおかしいのはSlackの仕様です。ぼくはわるくありません。

2017年

筆者ことpuhitakuは2017年からWikipediaを編集するようになった。初めての編集は、「四葉」の曖昧さ回避ページに君の名は。のやばい妹*1こと 宮水四葉 を追記したものである。

f:id:puhitaku:20181201234019p:plain
四葉。
f:id:puhitaku:20181201235232p:plain
四葉。

それからというもの、アットマーク(正確には単価記号)のページにPythonでの使用例を追記したり…

f:id:puhitaku:20181201235012p:plain
Pythonでは… のところ。

puhitakuが人生で最高に推しているマンガ家 tugeneko 先生の作品である 上野さんは不器用 のページに最新刊のヤングアニマルで登場したキャラクターを秒速で追記したりしていた。

f:id:puhitaku:20181201235540p:plain
最新号で判明した新事実や新キャラを秒で書き足していく。

2018年

そしてついに、さる2018年5月26日についに新規記事を作成するに至った。

tugeneko 先生の作品中で唯一Wikipediaに記事がなかった作品、 すくみズ! である。

f:id:puhitaku:20181201235753p:plain
記念すべき最初の新規記事。

さらに、つい先日これまた推し作家である 水あさと 先生の激カワ青春コメディ 阿波連さんははかれない の新規記事も作成した。

f:id:puhitaku:20181202002941p:plain
阿波連さんでみんなもあ^〜しよう。

Wikipediaで推す利点

  • 最強
  • 誰でも知ってる
  • 秒で検索順位が上がる
  • 秒で作品について知れる
  • 絵すら描けないマイナー漫画限界オタクの唯一の推していき発散方法
  • 最強

Wikipediaで推す方法

  1. 目星をつける
    • 君の心の中でふつふつと沸き立つ推していきはないかい?
  2. 記事が既にあったなら、追記する
    • まだ文章化されていない事実がないか思い当たる節はないか?
    • ただし出典は重要、ちゃんとした公式情報があって初めて追記できるので適当なことを書かないように。
    • 新キャラを最新刊で観測して秒で追記するのは気持ちが良いぞ。
  3. 記事がまだ無かったなら、先人の記事をパクる
    • いや、パクるという書き方はよくない。しかし、先人が整えた記事の体裁を真似ることで高品質な記事へとつながるのは事実。先輩の記事を真似するところから記事を書き始めよう。
    • Wikipediaにはテンプレートと呼ばれる各種情報を載せるやつ*2があるが、Wikipedia初心者にはどんなテンプレがあるかさっぱりわからないので他の記事からもらったほうが早い。
  4. 記事の体裁として成り立つよう内容を書きまくる
    • その作品の あらすじ登場人物書誌情報 *3程度が最低限必要、とpuhitakuは勝手に思っている。
    • あらすじを書こうものなら、結果的にそのマンガを全部読み直すことになるはずだ。でもそんな苦労などたやすいものだ。
  5. Sandboxに上げてまた追記、をしばらく繰り返す
    • 一発で記事になるような文章にするのは無理だ。各アカウントに用意されている利用者ページ以下に下書きページを作り、推敲していこう。
  6. 公開する!!!!!!!!!!!!!!!
    • 最高の記事になったと言えるようになったら、投稿しよう!!!
    • 既存の作家の作品なら、その作家のページにある該当作品の記述をリンク化し、そのリンク先に飛ぶと「存在しないページ」として編集画面が出るのでそこに下書きをコピペする。
    • まだ作家自体のページがないなら、まずその作家のページを作るところから始めよう(やっていき!!!!!!!)
  7. 公開後も推敲・メンテする
    • 現在も連載中のマンガなら、常日頃から新キャラや新事実が出てくることだろう。そいつらは自分の手でガンガン追記していこう。
    • 公開直後のページなら、Wikipediaのプロが颯爽と記事を修正していくことだろう。そうやって修正された内容がどんなものか観察し、次回以降よりよい記事がかけるようにインプットしていこう。Wikipedia的流儀に沿った美しい記事を追い求めるのと、コード規約に沿った美しいコードを書くのは同じことだ。

puhitakuの例

恥ずかしいけど編集記録を晒していくぜ!!!!

f:id:puhitaku:20181202002041p:plain
「阿波連さん」の遍歴。時間の流れは下から上へ。

  • まず、2018年10月23日に利用者:Puhitakuのsandboxページ(下書きページのroot)を作成した。
  • 続いて 利用者:Puhitaku/sandbox/阿波連さんははかれない のように、スラッシュで階層化する形で「阿波連さん」の下書きページ本体を作成した。
  • 10月24日〜10月25日、利用者:Puhitaku/sandbox/阿波連さんははかれない をガンガン追記していく。
  • 10月25日、「阿波連さん」のページが完成したので、水あさと先生のページの「阿波連さんははかれない」のテキストをリンク化した。
  • 同日、「阿波連さんははかれない」のリンク先に下書きを貼り付けて公開。
  • 直後、Wikipediaのプロにより「あらすじが十分でない」との指摘を受け11月6日に追記、「あらすじが十分でない」の記述を削除。
  • その後新キャラが登場したりいろいろあったので続々と追記。

推していけ!!!!

みんなのガチ推しが記事になるのを待ってるぜ!!!!!

*1:このキャッチフレーズは2秒で考えた

*2:マンガのページで右上にある出版社とかの情報がそれ

*3:すでに出版されている単行本の情報・情報源・ISBNなど

技適とルーターハック

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

さて、「ルーターハック」の楽しい世界に足を踏み入れる前に、避けて通れない「技適」への筆者としての立場をハッキリと書いておこう。よし…(深呼吸)…。

法律を守って楽しくルーターハック!!!

免責

本記事およびこれ以降公開される記事は、技適に関する議論や、批評や、解釈において何らかの影響を与えたり、他人の行為を擁護することはない。

筆者が「する」こと

  • 筆者は、ルーターを分解します
  • 筆者は、ルーターを改造します
  • 筆者は、ルーターの動作を司るソフトウェアを書き換えます

筆者が「しない」こと

  • 筆者は、分解・改造・ソフトウェアの書き換えがなされたルーター(以下、改造状態のルーター)において、そのルーターが元来持つ物理層のうち電波を発することを主目的とした部分(以下、無線PHY)を使って電波を発しません
  • 筆者は、改造状態のルーターが持つ無線PHYで電波を発さなくては達成できない改造について紹介しません(ただし、 改造前の状態で 無線を利用することはあります)

筆者が問題ないと判断し紹介すること

  • 改造状態のルーターに、単体で技適認証を受けたUSB Wi-Fiドングルなどの無線PHYを接続して電波を発すること

これは、技適認証のない自作PCにUSBドングルを挿したり、PCIe Wi-Fiモジュールを接続しても問題がないのと等価。

  • 改造状態のルーターが元来持つ無線PHYに電源が通電しているが、ソフトウェア的に無効状態にされ能動的に電波を発しない状態を保つこと

表面実装部品を剥がしてまで…というのは無理があるし、SoCによっては無線の物理層が内蔵されていてそもそも除去できない。「ダミーロードを使ってはどうか」という勧めも以前頂いたが、ダミーロードは出力が有効な物理層のエネルギーを熱に変換するものであり、少し意図が変わってくる。そのため必要ないと判断している。

つまり

私は技適をうやむやにしてルーターハックをするつもりはありません。どうかよろしくお願いします。