BHR-4GRVにLEDEをインストールしたメモ

家庭用の有線LANルータのファームウェアを入れ替えてLinuxディストリビューションをインストールしたときのメモです。

# LEDEとは

* [LEDE - Linux Embedded Development Environment](https://www.lede-project.org/index.html)

LEDEは組み込み用途のLinuxディストリビューションで、家庭用の有線LANルータ・Wi-Fiルータのファームウェアを置き換えることで機能追加をしたりカスタマイズ性を高めたりしようというプロジェクトです。具体的には、DDNS・VPN・VLAN・QoSなどの設定ができるようになったりします。また、古いルータがDS-Lite（RFC6333）対応になるので、一部の人は嬉しいかもしれません。ルータにsshでログインできるようになるので、トラブルの切り分けが若干やりやすくなるメリットもあります。

LEDEは2016年5月に母体であるOpenWrtからforkしたプロジェクトです。どうもプロジェクト運営上のゴタゴタがあって分裂したような雰囲気ですかね…。

いまのところOpenWrtを使っても大差ないと思いますが、好奇心でLEDEを触ってみたよ、というメモになります。

# BHR-4GRVとは

BHR-4GRVは2011年発売のバッファロー製GbE対応有線LANルータです。既に販売終了になっているため、必要であれば中古品を探すのが良いと思います。

- 製品ページ：[リモートアクセス＆Giga対応 有線ブロードバンドルーター : BHR-4GRV | BUFFALO バッファロー](http://buffalo.jp/product/wired-lan/router/bhr-4grv/)

OpenWrt・LEDEで利用できる[対応機器のリスト](https://wiki.openwrt.org/toh/start)は膨大ですが、日本で入手しやすいものはバッファロー製の2010年頃発売の機種くらいしか無いという印象です。中でも有線LANルータとなるとこの機種くらいしか無いんじゃないでしょうか。

ちなみにこのルータのCPU（SoC）はAR7242で、32bit MIPS系アーキテクチャです。

# 技適の問題

本稿では有線LANルータを選んで使っているので問題とはなりませんが、Wi-FiルータでOpenWrt・LEDEを使おうという場合は電波法違反にならないよう注意が必要です。

というのも、ご存じの通り技適マークが付いていない無線機器を日本国内で使うのは違法ですが、技適を通っている無線機器のソフトウェア部分を改造した場合も電波法違反になる可能性があると考えられるためです。

これは面倒すぎる話題なので、本稿では有線LANルータを選ぶのが無難だよということでお茶を濁しておきます。興味を持った方はネット上で調べてみてください。

# LEDEインストール手順

## ファームウェアの準備

OpenWrt・LEDEのファームウェアイメージはルータの機種ごとに異なるため、あらかじめどのイメージが使えるのか調べておく必要があります。BHR-4GRVの場合、ほぼ同型のルータである「WZR-HP-G450H」のイメージが使えるとのことで、そのイメージを利用します。

- https://downloads.lede-project.org/snapshots/targets/ar71xx/generic/lede-ar71xx-generic-wzr-hp-g450h-squashfs-tftp.bin

似た名前のイメージが複数あるので注意してください。今回はTFTP経由でインストールするので、`-tftp`という名前のイメージをダウンロードしておきます。

## ルータのubootの設定変更

OpenWrt・LEDEをバッファロー製ルータにインストールする場合、Web管理画面の隠しページからtelnetdを起動してubootの設定を変えるというのが定番になっています（ルータによってはIPアドレスが変わります）。具体的な手順は次のようになります。

1. MacBookとBHR-4GRVをUSB-LANアダプタ経由で接続
2. DHCPで192.168.12.*のIPアドレスをもらえる
3. http://192.168.12.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.html にアクセス
4. Basic認証を求められるので、ID「bufpy」およびパスワード「otdpopy」を入力（管理画面パスワードを変更していない場合）
5. 管理画面から「telnetd」「start」でルータ再起動＆telnetdが起動
6. `telnet 192.168.12.1`でログイン
7. `ubootenv set accept_open_rt_fmt 1`でTFTP経由でイメージを送り込めるようにする
8. `ubootenv list`で「ethaddr」「ipaddr」「serverip」の3つの値を確認しておく（後で使う）

隠しページのパスワードは管理画面パスワードを変更すればそれに応じて変わるので、即座にセキュリティリスクとはならないはずです。とはいえあまり大っぴらに書くものでもないとは思いますが、既にインターネット上に拡散してしまっているので隠しても仕方ない気がしています（本件、最新ファームでは塞がれているとかいないとか…）。

## TFTP経由でファームウェアインストール

Macbookの「システム環境設定」「ネットワーク」でUSB-LANアダプタの設定をします。

- IPv4の設定：「手入力」
- IPアドレス：「192.168.11.2」（先ほど`ubootenv list`で調べた「serverip」の値）

Macbook側でファームウェアイメージが存在するディレクトリ上に移動して以下のコマンドを実行します。

```
$ sudo arp -s 192.168.11.1 02:AA:BB:CC:DD:22 # 先ほど`ubootenv list`で調べた「ipaddr」「ethaddr」の値
$ tftp 192.168.11.1 # 先ほど`ubootenv list`で調べた「ipaddr」の値
tftp> trace
tftp> binary
tftp> rexmt 1
tftp> timeout 600
（ここでルータの電源オンオフ）
tftp> put lede-ar71xx-generic-wzr-hp-g450h-squashfs-tftp.bin
（略）
sent DATA <block=6272, 512 bytes>
received ACK <block=6272>
sent DATA <block=6273, 36 bytes>
received ACK <block=6273>
Sent 3211300 bytes in 6.4 seconds
tftp>
```

putでイメージを送り込めるのは起動後しばらくしてから4秒間程度なので、早すぎても遅すぎても失敗したりします。起動直前からコマンドを入力しておいて、うまくいくまで「C-p Enter」で同じコマンドを繰り返し試し続けるのが良いでしょう。うまくいけば5秒くらいで全データが転送できます。

その後、数秒から5分くらいDIAGランプが点滅しているので、落ち着くまで放置してください。落ち着くと電源ランプのみ点灯状態になり、無事ファームウェアインストール完了ということになります。

## ルータのパスワード設定

Macbookの「システム環境設定」「ネットワーク」でUSB-LANアダプタの設定をDHCPに戻します。

するとDHCPでIPアドレス192.168.1.*がもらえるので、sshでログインしてrootパスワードを設定します。

```
$ ssh -o 'StrictHostKeyChecking no' root@192.168.1.1


BusyBox v1.24.2 () built-in shell (ash)

     _________
    /        /\      _    ___ ___  ___
   /  LE    /  \    | |  | __|   \| __|
  /    DE  /    \   | |__| _|| |) | _|
 /________/  LE  \  |____|___|___/|___|                      lede-project.org
 \        \   DE /
  \    LE  \    /  -----------------------------------------------------------
   \  DE    \  /    Reboot (HEAD, r1296)
    \________\/    -----------------------------------------------------------

root@lede:~# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root
```

ちなみに、このパスワードはWeb管理画面のパスワードを兼ねます。それなりにマジメなパスワードを設定しましょう。

## Web管理画面のセットアップ

LEDEはインストール直後の状態ではWeb管理画面が提供されていませんので、これをネットワーク経由でインストールします。

まずルータのWAN側の口を家庭内の有線LANの口に接続します。WAN側のデフォルト設定はDHCPなので、これでインターネットに繋がるはずです。

```
root@lede:~# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=58 time=7.825 ms
64 bytes from 8.8.8.8: seq=1 ttl=58 time=7.408 ms
64 bytes from 8.8.8.8: seq=2 ttl=58 time=7.394 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 7.394/7.542/7.825 ms
Wroot@lede:~# opkg update
（略）
root@lede:~# opkg install luci-ssl
（略）
root@lede:~#
```

luci-sslパッケージでhttpsの管理画面がインストールされますので、 https://192.168.1.1/ にアクセスするとOpenWrtと大差ない管理画面が現れます。オレオレ証明書なので接続時に怒られますが、そこは仕方無いですね。

![lede.png](https://qiita-image-store.s3.amazonaws.com/0/46856/449f1656-ee08-ee57-85ab-ff81eaddbebf.png)

## SSH設定の変更

多少セキュアにしたいなーという意図の変更なので必須ではありません。

- 「System」「Administration」
    - 「SSH Access」のPort を 10022 に変更
    - 「Allow SSH password authentication」「Allow the root user to login with password」のチェックを外す
    - 必要な「SSH-Keys」を追加

## ファイアウォール設定の変更

管理画面にWAN側からアクセスしたい場合は次のようにファイアウォール設定を変更します。

- 「Network」「Firewall」「Traffic Rules」「Open ports on router」
 - Name: Allow-HTTPS
 - Protocol: TCP
 - External Port: 443

また、WAN側からSSHアクセスを許可したい場合は次のようにします。

- 「Network」「Firewall」「Traffic Rules」「Open ports on router」
 - Name: Allow-SSH
 - Protocol: TCP
 - External Port: 10022

## ホスト名・タイムゾーンの設定変更

LEDE管理のルータが複数ある場合、Hostnameを変更しておくと混乱が避けられるのでオススメです。

- 「System Properties」「General Settings」
    - Hostname: 自分がわかりやすい名前に変更
    - Timezone: Asia/Tokyo

## 追加パッケージのインストール

トラブル時のために調査用のコマンドをインストールすることもできます。試しにtcpdumpをインストールしてみましょう。

```
root@lede:~# opkg update
（略）
root@lede:~# opkg install tcpdump
Installing tcpdump (4.5.1-4) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/mips_34kc/base/tcpdump_4.5.1-4_mips_34kc.ipk.
Installing libpcap (1.7.4-1) to root...
Downloading http://downloads.lede-project.org/snapshots/packages/mips_34kc/base/libpcap_1.7.4-1_mips_34kc.ipk.
Configuring libpcap.
Configuring tcpdump.
root@lede:~#
```

いやー楽チンですね。多くのルータはストレージ容量がカツカツなのであまり多くのツールを入れることはできませんが、定番ツールくらいなら一通りインストールできるはずです。（Python製のものはPython入れただけで容量厳しいかも…）

個人的に入れたいパッケージは tcpdump 以外だと diffutils と curl です。

## 固定IPアドレスの設定

WAN側を固定IPアドレスの設定にしたい場合[^1]は「Network」「Interfaces」で変更できます。

- 「WAN」「Edit」「General Setup」
 - Protocol: Static address（「Switch protocol」を押す）
 - IPv4 address: 192.0.2.7 [^2]
 - IPv4 netmask: 255.255.255.0 [^2]
 - IPv4 gateway: 192.0.2.1 [^2]
 - IPv4 broadcast: 192.0.2.255 [^2]

[^1]: 常時起動のLinuxマシンとして設置する使う場合など。家庭用ブロードバンドルータを置き換える場合はここでPPPoEの設定をします。
[^2]: 例示用IPアドレスなので、適切なIPアドレスを割り振ってください

## その他設定

家庭のインターネット接続用ルータを置き換える場合は、Web管理画面から色々設定していけば良いでしょう。PPPoE設定など、家庭用ルータでできることは管理画面から一通りできるはずです。


# 参考URL

- [LEDE - Linux Embedded Development Environment](https://www.lede-project.org/)
- [OpenWrtについて [OpenWrt Wiki]](https://wiki.openwrt.org/jp/about/start)
- [DD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキ](https://www57.atwiki.jp/ddwrt_openwrt/pages/30.html)