OpenWRTで追加パッケージのインストールと設定作業を自動化してRaspberry Piでトラベルルータを作る
OpenWRTでRaspberry Piをルータ化する場合、Raspberry Pi2だとUSB WiFiドングルのドライバが標準イメージに含まれていないため、個別にインストールする必要があります。 しかしRaspberry PiのNICポートはデフォルトでは192.168.1.1の固定アドレスがふられていて、DHCPサーバも動作していますので、以下のように設定変更する必要があります。
- NICポートのIPアドレスを変更し、DHCPアドレスを無効化する
- USB WiFiドングルを装着してドライバをインストールし、利用できる状態にする
- USB WiFiドングルをWiFi APに設定し、LAN側に設定する
- NICポートをWAN側に変更し、DHCPクライアントやPPPoEなどの設定に変更する
この作業自体は大した手間はかかりませんが、それでも意外にめんどくさいものです。そこで、この作業を自動化するスクリプトを書いてみました。以前の記事で作成していた手順では、追加パッケージは予めサイトからダウンロードする方法を紹介していましたが、この方法の場合は事前にダウンロードしておく必要はなく、指定したパッケージをスクリプトで自動的にインストールでき、手間なく環境構築できます。
スクリプトによって行われる操作
このスクリプトは以下の操作を自動的に実施します。
- 追加パッケージを動的に行うためにLAN(NICポート)をDHCPクライアントに設定する。
- NICポートがインターネットと疎通可能な状況になり次第、パッケージの追加インストールを行う。
- WAN側はDHCPクライアントに設定し、NICの接続先をWANに変更する
- WiFi APの設定を行い、LAN側のDHCP設定を固定IPアドレス割り当て+DHCPサーバにする
このため、OpenWRTのRaspberry Pi向けイメージをmicroSDHCに焼いて起動したのち、このスクリプトを実行すればすべての設定調整が完了します。 WiFi USBドングルのドライバは BUFFALO WLI-UC-GNM2 向けのドライバを opkg install でインストールしていますが、他のドングルを使っている場合はドライバを適切なものに変更してください。 Raspberry Pi3 以降の機種ではドライバのインストールは不要ですが、luci-i18n-base-ja を入れておくとUIが日本語になるので、これだけは入れておいて良いでしょう。
作成したスクリプト
設定調整が必要な箇所はスクリプト前半にまとめてあるので、ここを適切に書き換えるだけです。これを initconfig.sh などの名前で microSDHCに焼いておけば、OpenWRT起動後に /boot/initconifig.sh を実行してNICをLANに接続するだけで、すべての設定が完了します。
#!/bin/sh -x # 設定内容 LAN_ADDR=192.168.4.1 LAN_MASK=255.255.255.0 WIFI_SSID=[設定するSSID名] WIFI_PASS=[WPA-PSKのパスフレーズ] # Rapsberry PiのLANポートをDHCPクライアントにするための設定を書き込む uci set dhcp.lan.ra_management='1' uci del network.lan.ipaddr uci del network.lan.netmask uci del network.lan.ip6assign uci set network.lan.proto='dhcp' uci commit /etc/init.d/network restart # 外部向けの疎通が確保できたらパッケージのインストールを行う while : do ping -c 1 www.google.com > /dev/null 2>&1 if [ $? == 0 ]; then opkg update opkg install \ kmod-mac80211 \ kmod-rt2800-lib \ kmod-rt2800-usb \ kmod-rt2x00-lib \ kmod-rt2x00-usb \ rt2800-usb-firmware \ libusb \ usbutils \ luci-i18n-base-ja break fi done # WiFiルータにするための設定を書き込む 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.proto='static' uci set network.lan.ipaddr=$LAN_ADDR uci set network.lan.netmask=$LAN_MASK 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=$WIFI_SSID uci set wireless.default_radio0.key=$WIFI_PASS uci set wireless.default_radio0.wpa_disable_eapol_key_retries='1' uci delete wireless.radio0.disabled='1' uci commit /etc/init.d/network restart reboot