ファームの礎『OpenWrt』 書き込み・カスタマイズ編

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

1日遅れてしまった!なんとかして取り戻さないと…

昨日(というよりおととい)は番外編として PlayStation Classic の eMMC を吸い出したレポートに変更したが、PlayStation Classic の粗熱が取れてきたところで OpenWrt に戻ることにする。

www.zopfco.de

おことわり

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

www.zopfco.de

ビルド完了

前回は make を実行したところで一旦切った。ビルドはうまく行っただろうか?

f:id:puhitaku:20181206193727p:plain
このように、checksumのあと何も言わず終了していればビルドは成功だ。

リポジトリのrootで ./bin/targets/ar71xx/tiny/ls してみよう。

f:id:puhitaku:20181206194206p:plain

このうち、 openwrt-ar71xx-tiny-whr-g301n-squashfs-factory.bin をインストールに使用する。

ブラウザで流し込む

OpenWrt のインストール方法は、電源通電直後のブートローダーの間にTFTPクライアントでファームを送りつけるのが典型だ。だがこの機種 Buffalo WHR-G301N はことさら簡単で、上記の openwrt-ar71xx-tiny-whr-g301n-squashfs-factory.bin をルーターの設定画面から流し込むだけでインストールができる。

PC とルーターを Ethernet で接続し、PC 側 IP アドレスを 192.168.11.0/24 の適当なアドレスに設定する(DHCPでもいい)。次に 192.168.11.1 に接続して

  • ユーザー名: root
  • パスワード: (空白)

で設定画面のBASIC認証を通過。

f:id:puhitaku:20181207045108p:plain
いつもの設定画面。

あとはファーム更新画面でさっきのバイナリ openwrt-ar71xx-tiny-whr-g301n-squashfs-factory.bin を指定し雑にアップデートするだけだ。

f:id:puhitaku:20181207045339p:plain
禁断のバイナリを食してしまう様子。

アップロードが終わると本体は再起動する。完全に起動し切るまで本体のLEDが消えたりついたりするので、この隙に PC 側 IP アドレスを 192.168.1.0/24 なアドレス、例えば 192.168.1.2 にでも変えておこう。

ssh!!

あとは ssh で root@192.168.1.1 に接続すればパスワード無しでログインできるはずだ。ルーターに ssh!!ドキドキの瞬間である。

f:id:puhitaku:20181207095911p:plain
このような motd が見えれば成功。

WARNING とあるように root のパスワードは初期設定で空白になっている。このままでは言わずもがな危険なので passwd でパスワードを設定しておこう。

設定を変えてみる

いわゆる民生品のルーターは、利用者の障壁を下げるためすべてブラウザを通してグラフィカルに設定できる(OpenWrt でもグラフィカルな設定はできるのだが、後述)。一方でこちらは shell 越しが基本となる。

ちなみに、Wi-Fi は初期設定で disable1 になっているため安心だ。

例: IP アドレス

Interface ごとの IP アドレス、スイッチ、VLAN等の設定は /etc/config/network を編集する。初期設定はシンプルであり見た目にわかりやすい。

root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdaf:7e24:c331::/48'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0.1'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth1'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 0t'

設定を変えたら、 reload_config で設定を反映できる。

パッケージを増やしてみる

以前紹介したように、パッケージはかなりいろいろ追加できる。この追加は非常に簡単で、OpenWrt の Git リポジトリの root で make menuconfig を再び起動し、 Base system より下のジャンル別項目から欲しいソフトにチェックを入れることでいい感じにファームに追加される。

枚挙に暇がないので説明は LuCI だけに留めるが、Samba といった鉄板daemonに始まり、 mjpeg-streamer のようなおもしろパッケージまである。眺めてみると面白いだろう。

例: LuCI

初手としてよくインストールされるのは、ブラウザで各種設定ができる LuCI だ。容量も案外食わないため WHR-G301N でも追加することが可能。日本語の翻訳もあるので設定の障壁としては大きく下がるだろう。

f:id:puhitaku:20181207102031p:plain
menuconfig → LuCI → Collections 以下に大元のパッケージがある。

LuCI はネットワークにまつわる設定だけでなく、Module を追加することで他の daemon も設定できるようになるため便利である。

追加してビルドし、後述の sysupgrade でインストールすれば、再起動後に 192.168.1.1 に接続するだけでログイン画面を拝むことができる。ワクワク!

ファームをふたたび書き込むには

最初に OpenWrt をインストールする時は factory イメージを使用したが、以降は sysupgrade イメージを sysupgrade コマンドに渡すことでファームウェアのインストールができる。

$ scp ./bin/targets/ar71xx/tiny/openwrt-ar71xx-tiny-whr-g301n-squashfs-sysupgrade.bin root@192.168.1.1:/tmp
$ ssh root@192.168.1.1 sysupgrade /tmp/openwrt-ar71xx-tiny-whr-g301n-squashfs-sysupgrade.bin

通常であれば、 openwrt-ar71xx-tiny-whr-g301n-squashfs-factory.bin の横に openwrt-ar71xx-tiny-whr-g301n-squashfs-sysupgrade.bin も生成されるのだが、「ビルド完了」の節のスクショを見ると存在しないことがわかる。実は、 WHR-G301N は内蔵フラッシュがとりわけ小さいことが原因で初期 config では sysupgrade イメージが生成できない。 makeV=s という変数を設定して実行すると、データ量が大きすぎてイメージが生成できていない旨が表示される。

$ make V=s
...(中略)...
Warning: /home/takumi/dev/router/openwrt_stable/bin/targets/ar71xx/tiny/openwrt-ar71xx-tiny-whr-g301n-squashfs-sysupgrade.bin is too big (> 3538944 bytes)

生成されたrootfsの中身を見ると、pppd が比較的容量を食っていた。筆者の場合 pppd は必要ではないので、make menuconfig 以下より pppd を選択解除すると sysupgrade イメージが生成されるようになった。ここで LuCI を追加しても生成されたことから、pppd は結構容量を食っていたことがわかる。

無線ももちろん使えないので、wpa-supplicant のような無線関係のソフトウェアやドライバを選択解除するのもアリだろう。

次回

今回は OpenWrt をビルドして実機に流し込むところまで解説した。次回は過去作供養シリーズ第1弾として、以前イベント等では発表したものの記事にしていなかったものを文章にしたためようと思う。