Raspberry Pi 3 や Zero W に OpenWrt/LEDE 18.06 をインストールしてルータにする
LinuxベースのディストリビューションOpenWrtによるRaspberry Pi 3 や Zero W のルータ化の話は過去にも書いていますが、最新の 18.06 がリリースされていたので、環境を作り直すことにします。
(とは言いつつ、最初のバージョンのリリースを見逃していたので、この記事では 18.06.1 を前提に書いています)
※2020年1月時点では 19.07.0 がリリースされていますので、より新しいバージョンをインストールしたほうがよいです。
既存の製品ではなく、あえて自分で作る理由とは?
既製品は機能面が不満です
例えば、DS-Lite (任天堂製品ではありません。フレッツ光のインターネット接続をPPPoEのIPv4ではなくIPoEのIPv6化することで速度改善をはかり、なおかつIPv4への通信も提供される仕組み)に対応したルータは案外少ないのですが、OpenWrtなら DS-Lite が利用できます。手持ちの製品が DS-Lite に対応していない為にルータを買い換えるというのは、とても残念な話ですが、そういうことは起きません。
セキュリティを強化したい
WPA2-EAPのような企業向けのセキュリティを導入するには、既製品はそれなりの価格の製品が必要です。でもOpenWrtならパッケージを追加してカスタマイズするだけで利用できます。作業コストは発生しますが、単にそれだけ。
IoT関連のハブにしたい
Raspberry Pi 3 に OpenWrt を導入したルータなら、Bluetooth 関連のパッケージを追加することで IoT 関連のハブにすることも可能ですね。
要するに、様々な拡張が容易に行えるのが魅力なのです。なお、OpenWrtを日本国内で運用する場合は電波法や技適の問題が付きまといますので、既製品のルータにOpenWrtを導入する話は公式な場所では展開しづらいのですが、Raspberry Pi 3 はデバイス自体が技適を通過していますから、OpenWrtをインストールしても技適の問題は発生しないはずです。(もしこれが問題になるとしたら、既存のノートパソコンにWindows / macOS / Linux の設定超背でWiFi AP化することもアウトになりますし)
そんな訳で、Raspberry Pi 3 は OpenWrt を導入するにはうってつけのデバイスだと考えています。技適の問題に目をつぶったとしても、既製品にOpenWrtを導入する場合は焼き方の失敗による文鎮化が心配です。でもファームウェアをmicroSDに記録しているRaspberry Piは、何か問題があればmicroSDを再フォーマットすれば済むので、この辺りの不安も生じません。だから OpenWrt を試す環境としては Raspberry Pi3 に代表されるシングルボードコンピュータはちょうどよいのです。
ファームウェアイメージを入手する
OpenWrt のファームウェアイメージは、一般的な Raspberry Pi 向けファームウェア同様に dd で書き込みます。イメージは下記のURLから入手できます。
Raspberry Pi Zero W 向け https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/openwrt-18.06.1-brcm2708-bcm2708-rpi-ext4-factory.img.gz
Raspberry Pi 3 向け https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2710/openwrt-18.06.1-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz
macOSな方は、下記記事のスクリプトを使うと、書き込み時の一連の作業(書き込み先デバイス名の確認、ddの実行、eject)が自動化できて便利だと思います。
焼いたファームウェアの microSD に、作業用のディレクトリを作る
適当な名前で作ってください。work とか。 これは OpenWrt 起動後のシェルからは /boot/work としてアクセスできます。
基本設定をバッチで流し込むためのファイルを作る
こんな設定をGUI操作なしに投入しようと思います
- 動作時のタイムゾーンは Asia/Tokyo
- 管理UI (ssh、Web) は LAN 側アクセスのみ許可
- WANはイーサネット、DHCPクライアント
- LANは無線LAN、固定IPアドレス 192.168.4.1
- LAN側ではDHCPサーバも有効化しておく
- 無線設定は日本向け、電波出力は10dBmに制限
- KRACKs対策設定を有効化
管理UIのパスワードはバッチ投入しないほうがよいかなあと思うので、これはインストール完了後にGUIから変更してください。
上記の設定は、次の内容をスクリプトとして保存・実行することで投入できます。 initialconfig.sh のような名前で保存して microSD の作業用ディレクトリに入れておきます。WiFi のSSIDやパスフレーズはご自身が使うものに変えてください。
#!/bin/sh -x uci set system.@system[0].zonename='Asia/Tokyo' uci set dropbear.@dropbear[0].Interface=lan uci set dhcp.lan.ra_management='1' uci set network.lan.ipaddr='192.168.4.1' uci set network.lan.ifname='wlan0' uci set network.wan=interface uci set network.wan.proto='dhcp' uci set network.wan.ifname='eth0' uci set wireless.radio0.disabled='1' uci set wireless.radio0.country='JP' uci set wireless.radio0.txpower='10' uci set wireless.default_radio0.encryption='psk2' uci set wireless.default_radio0.network='lan' uci set wireless.default_radio0.ssid='[設定するSSID名]' uci set wireless.default_radio0.key='[WPA-PSKのパスフレーズ]' uci set wireless.default_radio0.wpa_disable_eapol_key_retries='1' uci delete wireless.radio0.disabled='1'
Pi3 以外の方向け:追加パッケージの下準備
Pi zero W をルータ化する場合は有線LANアダプタが必須です。USB LANアダプタに必要なパッケージやドライバを追加します。
下記のリストは PIMONORIの 3 Port USB Hub + NIC 向けドライバ を想定していますので、それ以外の USB LAN NIC をお使いの場合は必要なドライバを別途追加します。
https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-libphy_4.9.120-1_arm_arm1176jzf-s_vfp.ipk https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-mii_4.9.120-1_arm_arm1176jzf-s_vfp.ipk https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-usb-net_4.9.120-1_arm_arm1176jzf-s_vfp.ipk https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/librt_1.1.19-1_arm_arm1176jzf-s_vfp.ipk https://downloads.lede-project.org/releases/packages-18.06/arm_arm1176jzf-s_vfp/base/libusb-1.0_1.0.22-1_arm_arm1176jzf-s_vfp.ipk https://downloads.lede-project.org/releases/packages-18.06/arm_arm1176jzf-s_vfp/base/usbutils_007-7_arm_arm1176jzf-s_vfp.ipk # PIMONORIの 3 Port USB Hub + NIC 向けドライバ https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-usb-net-rtl8152_4.9.120-1_arm_arm1176jzf-s_vfp.ipk
これらのURLリストをテキストファイルに保存した上でシェルから wget -i packagelist.txt
のようにダウンロードするのがお手軽で良いと思います。
全機種共通:最初から日本語UIで使いたい場合の追加パッケージ
これをインストールすれば、最初から日本語UIで使えます。必要な方はダウンロードして、microSD の作業ディレクトリに入れておきます。
http://downloads.openwrt.org/releases/18.06.1/packages/arm_arm1176jzf-s_vfp/luci/luci-i18n-base-ja_git-18.235.62437-6503756-1_all.ipk
焼いたmicroSDを装着してRaspberry Pi を起動し、パッケージインストールと初期設定の投入を行う
初期段階では NIC には LAN ケーブルを刺さずに作業します。(Pi Zero W は USB NIC だけ装着し、ケーブルは刺しません)。OpenWrt ではデフォルトのIPアドレスが 192.168.1.1 が NIC に設定され、さらにDHCPも有効なので、LAN接続して起動すると接続先ネットワークに影響が出る可能性があるからです。
行う作業はこんな内容です。
- 起動したらシェルから
cd /boot/作業ディレクトリ
を実行 - パッケージをインストールする。
opkg install *
- 初期設定の投入
./initialconfig.sh
- 初期設定をコミット
uci commit
- 再起動
reboot
ここまでくれば、有線LAN側がDHCPクライアントに設定されたWiFiルータになっています。あとは管理UIのパスワード設定を行い、さらに必要なカスタマイズを加えていきます。