OpenWrtをELECOM WRC-2533GST2に導入する

# OpenWrtとは

- 無線LANにおけるアクセスポイント(以下AP)を中心とした機能に特化したファームウェア
- Linuxベースのディストリビューションで、OSSとして公開されている
    - GitHub: https://github.com/openwrt
    - 現在もアクティブにメンテされていることが分かる
- 初期の頃はCUIのみの提供だったが、現在はLuCIというLuaベースのWeb UIが整備されている
- パッケージマネージャとしてDebianのdpkgライクで軽量なipkgが提供されている
- VMware等の仮想環境でも動作させることも可能

# OpenWrt誕生までの歴史

- 話の本筋とは無関係だが、面白い話なので記載しておく
- 元々、Linksys社のAPではLinuxベースのファームウェアが採用されていた
- 当時、Linksys社のAPで使われているチップの開発はBroadcom社に委託されており、Broadcom社はファームウェアの開発をさらに別の企業に委託していたことから、実際にファームウェアを開発していたのはLinksys社ではない
- このことから、Linksys社もBroadcom社も社としてLinuxベースのファームウェアが使用されているということは認識していなかった模様
- そのような中、Linuxカーネルの開発者であるアンドリュー・ミクラス氏がLinksys社のAPのファームウェアにLinuxが採用されているということ聞きつける
- 何が問題だったかというと、LinuxカーネルはGPL-2.0で配布されており、このライセンスのもとで配布されたソースコードを改変した場合、リリースすること自体は要求されないが、リリースする場合には改変したソースコードもGPL-2.0に従う形でリリースしないといけない(つまりざっくりというとOSSとして公開しないといけない)という取り決めになっている
    - Linux kernel licensing rules: https://www.kernel.org/doc/html/v6.1/process/license-rules.html
    - GNU GPL v2.0に関してよく聞かれる質問: https://www.gnu.org/licenses/old-licenses/gpl-2.0-faq.ja.html#GPLRequireSourcePostedPublic
- そのため、アンドリュー・ミクラス氏はLinksys社にソースコードの公開を求めるが返答はなく、結局は自らでファームウェアの解析を行い、それをLinuxカーネルメーリングリスト上で公開した
- そうこうしているうちに、Linksys社はCisco社に買収され、事態を把握したCisco社が正式にソースコードを公開した
- ソースコードが公開されたことにより、ここから派生したディストリビューションが数多く生まれることとなり、まずAlchemyが生まれ、そこからOpenWrtが生まれ、そこからさらにDD-WRTやX-Wrtが誕生した
- ちなみに「WRT」という名称はLinksys社がLinuxベースのファームウェアを採用していたWRT54GというAPから由来するものだと思われる
- 騒動の後、WRT54Gではプロプライエタリのファームウェアに置き換えられたが反発があったため、WRT54GLというLinuxベースのファームウェアを搭載したモデルも発売している
- ちなみにLinksys社は2013年からはBelkin社の傘下になっている

# OpenWrtの注意点

- 国内で利用する場合、電波法に抵触する恐れがある
- 電波法は2010年に改正され、出力の上限は10mWから1000mWに引き上げられたものの、無線LANに関してはこれが適用されていない
- OpenWrtの設定によっては電波法に抵触する恐れがあるため注意(10mW以上の出力を行った場合等)
- また、ファームウェアを書き換えるような改造を行った場合、技適も無効になる(つまり、電波法に準拠しているという証明が無くなる)ため注意
- 詳しくは総務省が公開している「技適マークのＱ＆Ａ」を一読すると良い: https://www.tele.soumu.go.jp/j/adm/monitoring/summary/qa/giteki_mark/

# OpenWrtの構築

- 前置きが長くなってしまったが、ここから実際にOpenWrtの構築を行う
- 構築するにあたって、APを用意することが必須となる

### APの選定

- 個人的な選定基準
    - TP-LINK / BUFFALO / ELECOMあたりのメーカー製
    - 価格帯は〜7,000円弱
    - 黒い(黒が好きなので)
    - 省スペース性を求めていたため、サイズが大きいものや外部アンテナがあるものは対象外
    - IEEE 802.11acに対応している(市場に出回っているほとんどの製品が対応している)
    - OpenWrtが導入できる
        - 導入できるかどうかはOpenWrtが公開している「Table of Hardware」から確認できる: https://openwrt.org/toh/start
    - そこそこちゃんと速度が出る
    - LANポートが4発程度ある
- 妥協した点
    - USBポート
        - USBポートが搭載されていればNASとしての使い道もできていたかもしれない
    - IEEE 802.11ax(Wi-Fi 6)対応
        - そもそも手元に対応している端末がなかったことと、今後メインのAPとして使う予定もなかったため妥協
- 最終的にELECOM WRC-2533GST2に決定
    - 公式サイト: https://www.elecom.co.jp/products/WRC-2533GST2.html
    - Amazon: https://amazon.co.jp/dp/B07J3G43L1
    - Table of Hardware: https://openwrt.org/toh/start?dataflt%5BModel*%7E%5D=WRC-2533GST2
    - 導入手順を解説しているブログもある: https://eco.senritu.net/openwrt-21-02%e3%82%92-elecom-wrc-2533gst2%e3%81%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab/
    
### OpenWrtのインストール

- ここから先の手順はELECOM WRC-2533GST2向けに書いているが、他のAPであっても大方同様の手順で進めることができると思われる
- https://firmware-selector.openwrt.org/
    - ここからモデルを検索し、Factoryイメージをダウンロードする

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/d335bd14-678e-b480-d0a6-32d3505e4d4f.png)

- PCとAPをLANケーブルで接続
- ELECOM WRC-2533GST2の設定画面(`http://192.168.2.1`)をWebブラウザから開き、その後「その他設定」を開く

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/d4d48d43-d4ac-fc9d-758b-0404bdb9b378.png)

- 「ファームウェア更新」を開く

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/a09758df-1814-26b4-b716-cebc3ecb011a.png)

- 「更新方法」を「ローカルファイル指定」に変更し、「ファイルを選択」から先程ダウンロードしたFactoryイメージを指定し、「適用」を押す

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/c47cbfda-4826-83cf-e461-3d899f2d77ad.png)

- 「設定を反映しています。」と出るのでそのまま待機する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/f07b9cca-43bf-dfdc-9860-ea925d58f57b.png)

- 設定の反映が完了するとエレコムの管理画面は見れなくなる
- 代わりに`http://192.168.1.1`でOpenWrtのLuCIが見えるようになっている
- 初めはパスワードが設定されていないので、「Username」は`root`、「Password」は空のままログインする

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/dfa13bba-66e7-fba2-50e0-ca179f7121a5.png)

- ログイン後の画面

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/e769813d-59a3-ee02-ac7a-67017f0f8c6f.png)

### OpenWrtの初期設定

- パスワードが設定されていない状態ではセキュリティ的に良くない他、使用できる機能にも制限がかかってしまうため、パスワードを設定する
    - ドキュメント: https://openwrt.org/jp/doc/howto/firstlogin
- 「System」から「Administration」を選択する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/b9f83cf3-aa39-aa89-8df3-c7ee33003e7c.png)

- 「Router Password」タブから「Password」と「Confirmation」に設定したいパスワードを入力し、「Save」を押す

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/777f6e74-7ac4-cd57-f990-e300d0f5b424.png)

- 次に、タイムゾーンを日本に変更する
- 「System」から「System」を選択する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/fdf0b364-aef7-40f3-f48d-00ed50f3b8c8.png)

- 「Timezone」を「Asia/Tokyo」に変更して「Save & Apply」を押す

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/fa8a8838-384c-163e-a31d-e859ea1cca08.png)

- せっかくなのでCUI(SSH)からも接続してみる

```bash
$ ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ED25519 key fingerprint is SHA256:AzMhemZgIllTFRcPp7GQQ2po0L1Hv6llwidV0ALV+as.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.1' (ED25519) to the list of known hosts.
root@192.168.1.1's password:
ash: od: not found


BusyBox v1.35.0 (2023-01-03 00:24:21 UTC) built-in shell (ash)

~ #
```

- OpenWrtにはBusyBoxが採用されている模様
    - BusyBoxはUNIXツール群をまとめて１つの実行ファイルにしたもの
    - ファイルサイズが小さいため、ルーターやAP等の組み込む向けの用途で使用されることが多い
    - GitHub(Mirror): https://github.com/mirror/busybox
    - BusyBoxのデフォルトのシェルはash(Almquist Shell)という軽量で高速なシェル
- ここから先は各々の環境や用途によって設定項目が変わってくると思われる

### OpenWrtの初期化

- 途中で設定を誤って(例えばパスワードが分からなくなった等)、LuCI自体に入れなくなることがある
- ELECOM WRC-2533GST2の場合はRESETボタンを長押しすることで初期状態に戻すことが可能だが、他のAPであっても大抵、同様の機能が実装されている