Dropbox
xiaomiyouthmini

小米ルーター青春版とmini

またまた小米ルーターで遊んでいます。小米ルーター青春版はモバイルバッテリーでも稼働できる手軽さはあるが性能的に限界があるし小米ルーター3にはOpenWrtが出ていないので今度は小米ルーターminiで再度Raspberry Pi3の置き換えに挑戦します。

まずはOpenWrtの導入編です。

ただし、小米ルーターmini+OpenWrtは普通には使えていますが、電波の飛びが弱いようです。これについては、改めて検証します。

[ 開発版ファームウェアの導入とSSHの有効化 ]
OpenWrtのガイドにはURLを使ったtelnetの有効化が書かれていますが最新の開発版ファームウェアでは使えませんでした。おそらく、OpenWrtのページにある古い開発版ファームウェア入れれば大丈夫でしょう。わたしは素直に小米の公式に従ってSSHを使用できるようにしました。

– AndroidもしくはiOSの小米アプリから小米ルーターminiに一度アクセスして小米アカウントとルーターを関連付けます。
公式ページから開発版ファームウェアをダウンロードします。わたしの場合はバージョン2.11.25でした。
– ガイドに従いUSBメモリーにmiwifi.binというファイルネームでコピーし、ルーターに挿入しリセットボタンを押したまま電源オンで書き込みます。
– 開発版ファームウェアで立ち上がったら、次はSSHモジュールの導入です。
https://d.miwifi.com/rom/ssh からSSHモジュールをダウンロードする。
– これもUSBメモリーにmiwifi_ssh.binというファイルネームでコピーして、ルーターに挿入しリセットボタンを押したまま電源オンで書き込みます。
リブートするとsshでrootログイン出来るようになります。パスワードはファイルをダウンロードしたページに書かれています。

[ OpenWrtの導入 ]
特別なことはなく公式ページに従えば導入出来ます。
ssh root@192.168.31.1のようにしてルーターにログインします。
# cd /tmp
# wget <公式ページにリンクがあるバイナリーファイルのURL>
# cat /proc/mtd でOS1バティションがあることを確認する
# mtd -r write <バイナリーファイル名> OS1

以上でOpenWrtが起動します。例によってパスワードは無しWifiはオフで立ち上がります。青春版の時とは違いGUIインターフェースであるLuCIは最初から入っています。

以前、小米ルーター青春版をリピーターとして簡単に構成した時はかなり遅くて使う気になりませんでした(数値は取っていませんが)。

もうちょっと改善しないものかとrelaydを使用した構成を試してみました。速度もだいぶマシになりましたので、構成方法についてメモを残しておきます。

公式ガイドに従いますがOpenWrtのレベルの差によるものか、多少アレンジが必要でしたので全ての投入コマンドを書いておきます。

前提としてファームウェアの初期設定状態から構成を開始するものとします。

操作はPCからEthernetケーブルを白いEthernetコネクターに接続し”ssh root@192.168.1.1″でログインして行います。

[ wifiの活性化 ]
# uci set wireless.@wifi-device[0].disabled=0
# uci commit wireless
# wifi

[ 接続先のWifiネットワークの確認 ]
公式ガイドにあるiwlist scanの方は動かなかったです。
# iw dev wlan0 scan

[ wwanインターフェースの構成 ]
# uci set network.wwan=interface
# uci set network.wwan.proto=dhcp
# uci commit network

/etc/config/networkに該当のセクションが作成されます。

[ Wirelessネットワークを既存のWifiルーターに接続する ]
# uci set wireless.radio0.channel=11
# uci set wireless.@wifi-iface[0].network=wwan
# uci set wireless.@wifi-iface[0].mode=sta
# uci set wireless.@wifi-iface[0].ssid=xmff-relay
# uci set wireless.@wifi-iface[0].encryption=psk2
# uci set wireless.@wifi-iface[0].key=secret-key
# uci commit wireless

– “ssid=”には自分のWifiアクセスポイントのSSIDを記入します。
– “encryption=”はサンプルではpskになっていましたが、わたしの場合はpsk2にしないとダメでした。
– “key=”には自分のWifiアクセスポイントのパスワードを記入します。

構成は/etc/config/wirelessに反映されます。

# wifi down; wifi
で構成を有効にします。しばらくしてifconfigを投入するとwlan0に既存のwifiルーターから割り当てられたIP addressが確認できます。

[ relaydの導入 ]

小米ルーターが既存のwifiルーターを経由してインターネットに接続されたのでrelydモジュールを導入します。
# opkg update
# opkg install relayd

ルーターのブート時にrelaydが起動するようにします。
# /etc/init.d/relayd enable

[ relay用のインターフェースを作成 ]
# uci set network.stabridge=interface
# uci set network.stabridge.proto=relay
# uci set network.stabridge.network="lan wwan"
# uci commit network

/etc/config/networkに変更が反映されます。

[ インターフェースLANにgatewayと dnsを設定 ]
# route -n | grep UG
これは既存のルーターのgatewayアドレスの確認ためです。分かっている場合は必要なし。

# uci set network.lan.gateway=192.168.1.1
# uci set network.lan.dns=192.168.1.1
# uci commit network

192.168.1.1の部分は自分のWifiルーターのIP addressに変更します。

[ DHCPを無効にする ]

既存のWifiルーターのDHCPを使用しますので小米ルーターのDHCPは無効にします。

# uci set dhcp.lan.ignore=1
# uci commit dhcp

[ firewallを調整 ]
# uci set firewall.@zone[0].forward=ACCEPT
# uci set firewall.@zone[0].network="lan wwan"
# uci commit firewall

ここまでの設定で白いEthernetコネクターに接続したPCから既存のWifiルーターを通してインターネットに接続可能です。引き続きWifiアクセスポイントを設定し、WifiからWifiへのリピーターとして機能するようにします。

[ Wifiアクセスポイントの設定 ]
# uci set wireless.@wifi-iface[1].device=radio0
公式ガイドでは上のようなコマンドで設定するようにガイドされていますが、”uci: Invalid argument”と言われてしまいます。正しいコマンドが分からなかったので構成ファイルを直接編集しました。
# vim /etc/config/wireless
以下の設定を追加しました。
config wifi-iface
option device 'radio0'
option mode 'ap'
option ssid 'RepeaterWirelessNetwork'
option encryption 'psk2'
option key 'RepeaterWirelessPassword'
option network 'lan'

‘RepeaterWirelessNetwork’と’RepeaterWirelessPassword’は、適当に変更します。

[ 設定の有効化 ]
/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart
wifi down; wifi

[ 小米ルーターのIP address変更 ]
わたしの場合は必要ありませんでしたが、もし既存のWifiと小米ルーターのIP addressサブネットが同じ場合は以下のコマンドで違うサブネットに変更します。
# uci set network.lan.ipaddr=192.168.2.1
# uci commit network
# reboot

[ 小米ルーターへのログイン ]
Wifi、Ethernet接続ともにDHCPで既存のWifiアクセスポイントからIP Addressが割り当てられます。このため、そのままでは元々小米ルーターが持っているIP Addressにはアクセス出来ません。わたしの場合は2つの方法でアクセスしています。
– PCのIP Addressを手動で小米ルーターのサブネットに合わせて設定する。わたしの場合は192.168.1.10に設定してssh root@192.168.1.1を実行しています。
– 小米ルーター自身もwlan0が既存のWifiルーターからDHCPでIP Addressを取得しています。ここに対して別のPCからsshでアクセスすることも出来ます。Wifiルーターなどで静的にIP Addressを設定できれば、この方法が簡単で良いです。

[ パフォーマンス ]
決して速いとは言えませんが、それを承知の上で使用すれば実用的に使うことは出来ます。iPod touchのSpeedtestで試したところ、直接既存のWifiアクセスポイントに接続して30Mbpsくらい出ている状態で小米ルーター青春版のリピーターから接続すると10Mbpsくらいが限界のようでした。

小米ルーター青春版+OpenWrtを設定中に外部からのアクセスを不能にしてしまいました。OpenWrtを入れた状態ではリセットボタンの長押しでの回復は不可能ですので、シリアルポートを使用してコンソールにアクセスしてリカバリーしました。

I lost the access into the Xiaomi Wifi router + OpenWrt. Hardware reset button does not work to reset configuration under OpenWrt. Then I hooked up serial port to use console for recovery action.

xmyouth_opener

PDAオープナー(死語?)でカバーを開けます。Ethernetコネクター側をこじると簡単に開きます。

Opened router cover by using plastic tool. The cover can be opened from Ethernet connector side easily.

xmyouthserialport

基板上のシリアルポートはスルーホールが開いているだけです。ピンアサインは以下のようにOpenWrt Wikiに書かれている。

Serial port pins assignment on the mother board is as follows.

UART console
From the J1:
1 —— VCC
2 —— RX
3 —— GND
4 —— TX

xmyouth_pins

ボードにピンをたてました。

Soldered pins on the board.

xmyouth_serialcable

シリアルポートUSB変換コネクターを接続(VCCは接続しない方が良い気がします)してMac OS Xのコンソール・コマンドを起動し、ルーターの電源を入れるとブート・メッセージが表示されます。ブートが終了したころを見計らってreturnキーを押すとプロンプトが表示されます。シリアルポートUSB変換ケーブルについてはRaspberry Pi関連の情報を探すと沢山見つかります。

Hooked up serial to USB cable to the router board and started console command on the Mac OS X. Boot messages appeared when powered up the router. Press return key to show command prompt. Serial to USB cable is same to Raspberry Pi. You can find the cable information on the internet.

OpenWrtを導入時の状態に戻すのは以下のコマンドを投入するだけです。

To reset OpenWrt configuration, just need to enter following commands.

# fastboot
# reboot -f

追記)
ピンが邪魔で蓋が完全に閉まらない。ピンの台座のプラスチックを壊して根本からピンを曲げないと行けない感じ。

小米ルーター青春版にOpenWrtを入れて、そこにsoftetherとstoneを入れて、Raspberry Pi3で稼働しているルーターの置き換えをねらってみました。結果的には置き換えるには今ひとつな結果でした。

xiaomi_youth

目的の環境を構築することは出来ました。接続もスムーズでYoutubeをHD画像で再生も出来ますが、どうもファイルのダウンロードなどでRaspberry Pi3より速度が劣ることが感覚的にも分かります。色々とテストしてみましたが、数字的にも今ひとつな事が確認できました。

以下のテストは何度か試してみたうちの最大値です。

[ 実環境 – softether、接続先のsoftetherが稼働しているサーバーからのscpによるファイル転送 ]

Raspberry Pi3 1.1MB/s
小米ルーター青春版 560KB/s

[ 実環境 – stoneによるproxy接続で接続先サーバーからのwebによるファイルダウンロード ]

Raspberry Pi3 3.1MB/s
小米ルーター青春版 890KB/s

テスト回数も少ないので数字の信頼度は低いですが、ネットワークの速度より低い所で小米ルーター青春版がボトルネックになっていることは間違いありません。

次にローカル環境で単純なNAT機能付きのルーターとして稼働させ小米ルーター青春版と小米ルーター3でscpによる比較を行いました。前のテスト同様に最大値です。

[ ローカルテスト - scp ]

小米ルーター3 - 5GHz 1.4MB/s
小米ルーター3 – 2.4GHz 1.1MB/s
小米ルーター青春版 640KB/s

テスト方法はかなり適当ではありますが、小米ルーター青春版に能力の限界があることは確かです。

小米ルーター青春版は手のひらサイズでモバイルバッテリーでも稼働できる事がメリットです。その方向での活用方法を考えるとドローンを飛ばすときのWiFiエクステンダーくらいしか無いかも知れません。

小米ルーター3は青春版より性能的に優秀そうなので、これにOpenWrtが入れられるようになるれば、またRaspberry Pi3への置き換えに挑戦したい。もしくは小米ルーター3と同じチップセットを使用している小米ルーターminiを入手して試してみたい。

小米WiFiルーター青春版は小型ながらsoftetherまで動かすことが出来ました。ただ動いただけではなく、メモリーの使用状況やCPUの稼働率を見ると何とか実用的に稼働できそうです。そこで欲張ってパケットリピーターstoneも動かしてみることにしました。

参考webサイト:
stone version 2.3e stoneの公式ページです。
La Fonera 上で stone を走らせてみる 開発者の方の記事です。
OpenWrt – Cross Compile OpenWrt公式WiKiのCross Compileのための設定です。

[ Cross Compileのための設定 ]

SDKの導入が終わっていることを前提とします。詳しくは「小米ルーター青春版 + OpenWrtにSoftether VPNを導入する」をご覧ください。

OpenWrtの公式ガイドにあるようにstaging dirのtoolchainにパスを通し、環境変数STAGING_DIRを設定します。わたしの場合は以下のような設定を ./.bash_profile に入れました。
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15/bin

export PATH

STAGING_DIR=$HOME/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15

export STAGING_DIR
openwrt以下の部分はTarget Systemによって変わります。

[ stoneのビルド ]
stoneの公式ページよりソースコード一式をダウンロードし展開します。

$ wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
$ tar xvf stone-2.3e.tar.gz
$ cd stone-2.3d-2.3.2.7/

Makefileを少々変更しなければなりません。以下、変更部分のみです。

fon:
$(MAKE) CC="mipsel-openwrt-linux-gcc" FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL -D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
mipsel-openwrt-linux-strip stone

fon-pop:
$(MAKE) CC="mipsel-openwrt-linux-gcc" TARGET=fon pop_stone

fon-ssl:
$(MAKE) CC="mipsel-openwrt-linux-gcc" SSL_LIBS="-lssl -lcrypto" TARGET=fon ssl_stone

fon用の設定を流用しました。
– “-D_GNU_SOURCE”を追加。これは通常のLinux用にmakeするときも必要かもです。
– CC=の部分を”mips-linux-uclibc-gcc”から”mipsel-openwrt-linux-gcc”に書き換える。
– mips-linux-uclibc-stripをmipsel-openwrt-linux-stripに書き換える。

以上でmake fonは通るようになりました。ところがmake fon-sslを実行するとopenssl/crypto.hが無いと言って怒られます。

確かにSTAGING_DIR以下を探しても見つかりません。というか$STAGING_DIR/usr/以下にはinludeとlibがありますが空っぽです。探してみると~/openwrt/staging_dir/target-mipsel_24kec+dsp_musl-1.1.15/usrには全てのファイルが揃っているようです。正しい解決方法は分かりませんが、とりあえずスタティック・リンクを貼ってみました。

$ cd ~/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-5.3.0_musl-1.1.15
$ mv usr usr.xx
$ ln -s ~/openwrt/staging_dir/target-mipsel_24kec+dsp_musl-1.1.15/usr ./usr

再びstoneに戻ってmake fon-sslでstoneが出来上がりです。

$ cd ~/stone-2.3d-2.3.2.7/
$ make fon-ssl

[ 導入 ]
単純に/usr/bin/にstoneをおきました。使い方については、ここでは詳しくは書きません。
/etc/init.d/にスクリプトを置けばLuCIからコントロール可能と思います。わたしの場合は常に起動しますので単純に/etc/rc.localから起動することにしました。

GitHubにOpenWrt用のSoftetherバッケージがありますので、やり方が分かってしまえば難しくはありません。実際の手順を記述したサイトも沢山見つかります。それでも最初は色々と分からないこともあり時間がかかります。何かの参考のために現時点での有効な手順を記述しておきます。

参考webサイト:
Techie blog – Setting up Softether VPN on OpenWRT : 使われているSDKが古いことを除けば完璧な手順書です。
OpenWrt build system – Installation : OpenWrtの公式ガイド、ここの手順に従って最新のSDKを導入しました。
el1n/OpenWRT-package-softether : GitHubのOpenWrt Softetherパッケージです。

最初、Techi blog – Setting ip Software VPN on OpenWRTの手順に忠実に従ってSoftetherのコンパイルまで完了しましたが、残念ながらこのページで使用しているSDKバージョン”barrier_breaker”には小米ルーターで使用するtargetが入っていませんでした。同じmipsのCPUは含まれているので実際のバイナリーは使用できるかも知れませんが作成したパッケージの導入が出来ませんでした。ここは最新のSDKを使うべきでしょう。またGitHubのOpenWRT-softetherのページやその他の手順書にはsvnでSDKを構築するようになっていますが、現在OpenWrtのサイトのsvnサービスは停止しています。公式手順にあるようにgitコマンドを使用します。

[ SDKの導入 ]
テストではubuntuも使用していましたが、以下の手順はParallels下のCnetOS 7を使用しています。公式ガイドOpenWrt build systemに書かれていることをそのまま実行するだけです。一応、投入したコマンドを書いておきます。

$ sudo yum update
$ sudo yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-libs sed sdcc intltool sharutils bison wget git-core openssl-devel xz
$ git clone https://github.com/openwrt/openwrt.git
$ cd openwrt

これで最新のstbaleバージョン(わたしの場合は’多分’Chaos Calmer 15.05.1)が導入されました。

[ softetherパッケージの作成 ]
PC上でクロスコンパイルを行いルーター上で動かすためのパッケージを作成します。そのための仕組みは全てSDKに含まれていますし、softetherのコードを完璧にSDKに一体化するための手順が出来上がっていますので、これも手順通りにコマンドを打ち込むだけで大丈夫です。

$ sudo yum install readline-devel
手順書には出てきませんがsoftetherのビルド中にreadlineが無くてエラーしましたので、予め入れておくと良いです。

$ echo "src-git softethervpn https://github.com/el1n/OpenWRT-package-softether.git" >> feeds.conf.default
$ ./scripts/feeds update
$ ./scripts/feeds install softethervpn

以上で準備完了。構成に入ります。

$ make defconfig
$ make menuconfig

まずはTarget Systemを選択しなければなりません。これがなかなか難しいのですが、小米ルーター青春版での答えを書いておきます。
menuconfig
Target Systemで”Ralink RT288x/RT3xxx”を選択、Subtargetで”MT7628 based boards”を選択します。上のキャプチャのようになります。

次にNetwork/VPN/softethervpnを選択すれば構成は完了です。

$ make prepare V=s

ネットワーク環境など不安があるので詳しい経過メッセージを表示するためにV=sを指定しました。このステップは私の環境で2時間弱の時間を要しました。

$ make package/softethervpn/compile V=s

これでパッケージの作成が完了です。わたしの場合”./bin/ramips/packages/softethervpn/softethervpn_4.19-9605_ramips.ipk”が出来上がったパッケージです。これをscp等でルーターの/tmp/にコピーします。

$ scp ./bin/ramips/packages/softethervpn/softethervpn_4.19-9605_ramips.ipk root@192.168.1.1:/tmp/

[ ルーターでの導入作業 ]
ルーターにrootログインします。

# opkg update
# opkg install zlib libpthread librt libreadline libncurses libiconv-full kmod-tun libopenssl
# opkg install /tmp/softethervpn_4.19-9605_ramips.ipk

これでvpnserver, vpnbridge, vpnclientが走り出しました。わたしはvpnbridgeだけを使用するのでLuCIのSystem/Startupからvpnserverとvpnclientを停止し、また自動起動をDisableにしました。

面白いのはバイナリーは一つだけでvpncmdまで共用されています。どうやって実現しているのか時間があれば調べてみたいです。また通常ですと日々沢山のログを吐き出すので容量の小さなサーバーではログ管理をどうしようかと思っていましたが、まったくログを吐かないようになっていました。

[ softetherの設定 ]
細かいことは書きませんが、とりあえずsoftetherの設定にて仮想ハブをすでに存在するブリッジbr-lanに接続し、LuCIからルーターのLANに設定されているIP Addressを調整することによりパケットが流れるようになりました。

小米ルーター青春版+OpenWrtをリピーターにしても速度的に今ひとつだし、まだまだOpenWrtの実験に使うのでどうしようかと思っていたところ、OpenWrt待ちで使いみちの無かった小米WiFiルーター3 (Xiaomi WiFi router 3)+Asuswrtをリピーターにしてみました。GUIメニューから設定出来るので難しくはありませんが見つけにくい設定でしたので紹介しておきます。

設定画面の大分類にはリピーターなどはありませんが”Advanced Settings/Wireless 2.4GHz”にBridgeタブがあります。

asuswrtg_bridge

ここでWireless Operation Modeに”AP-Client+AP”を設定して目的のWiFiアクセスポイントに接続するだけでOKです。ここで”AP-Client (AP is disabled)”にして5GHzをAPとして使用するともしかするとパフォーマンスが良いのかも知れません。環境があればWDSも使用できます。

速度的にも満足がいくものになりましたので、少々大きいのですが小米ルーター3はしばらくリピーターとして活用することになりました。

もともと小米WiFiルーター青春版(Xiaomi WiFi Router Youth)はリピーターとして使用していましたのでOpenWrtでもリピーターとしての構成を試してみました。ネットワークで沢山見つかる設定例とほぼおなじです。

前回の設定で普通にWiFiルーターとして使用できている状態から始めます。目標とする構成はEthernetのWAN接続の部分をWiFiで置き換えるもので、一般的に言うところのWiFi拡張とは違うものです。

またLuCIのは白コネクターのEthernetに接続してPCから行います。

1) Network/WirelessでScanボタンを押し、親となる目的のWiFiアクセスポイントのJoinボタンを押します。下の画面でWiFiパスワードを入力しSubmitボタンを押します。
openwrt-repeater1

2) 次の画面NetworkがWWANになっていることを確認してSave&Applyボタンを押します。
openwrt-repeater2

3) Network/Wireless/Overviewは以下のように親のWiFiネットワークに接続されているのが分かります。この状態で白コネクターEthernetに接続されたPCからWiFi経由でネットワーク接続出来るようになります。
openwrt-repeater3

4) クライアントモードで接続するためのWiFiアクセスポイントを作成します。Network/WirelessでAddボタンを押します。下の画面で任意のSSID, ModeはAcess Point, NetworkはLanにします。またWireless SecurityタブにてWPA2などのパスワードも設定します。
openwrt-repeater4

5) Network/Wireless/Overviewは以下のようになります。これでWiFiからWiFiへのリピーターとして機能しました。
openwrt-repeater5

接続は出来ますが、速度的には今ひとつです。想像の半分くらいしか速度が出ません。WiFiアダプターが一つで二役なので仕方ないのかも知れません。ただオリジナルのファームウェアのリピーターモードは速度テストはしていませんが、遅いとは感じていませんでしたし小米の格安小型リピーターでは問題なく速度が出るので、チューニングの余地はありそうです。

workingonxiaomiyouth

本当は小米WiFiルーター3にOpenWrtを入れたかったのですが、今現在OpenWrtに対応していません。こちらは気長に待つとしてリピーターとして活用中の小米WiFiルーター青春版にOpenWRTを入れてしまいました。

導入方法は公式Wikiページに書かれている通りで大丈夫です。ただしUSBが無いので、リセットボタンと電源ボタン併用によるリストア方法がありません。失敗した場合のリカバリーは出来ないと思いますのでご注意ください。またOpenWrt導入後の設定にはPCとルーターをEthernetによる有線接続が必要になりますので、それなりの準備をしてから導入を開始してください。

導入手順は“OpenWrt – Xiaomi Mi Wi-Fi Nano/Youth”にあります。手順に従えば導入出来ますが、それぞれのステップにコメントを加えて解説したいと思います。

[ 開発版ファームの導入 ]
Wikiページには開発版 2.1.26のリンクが付いています。私は公式ページから2.5.69を導入しましたが、問題なく以下の手順を実行できました。

[ SSHパスワードの設定 ]
sshデーモンは最初から動いています。パスワードの設定だけ行えばsshでログイン出来るようになります。手順書では何故かcurlを使用した方法が書かれています。私はMac OS Xを使用していますので、手順通りcurlを使用しましたが、おそらく以下のurlをブラウザーで実行しても同じ結果が得られと思います。
http://192.168.31.1/cgi-bin/luci/;stok=your_stok/api/xqsystem/set_name_password?oldPwd=old_password&newPwd=new_password

your_stokは小米ルーターの設定画面にログインした後のURL中にあるものと置き換えます。old_passwordは現在のルーター設定用のパスワードで、new_passwordは新しいパスワードです。新しいパスワードはルーター設定とsshでのrootログインの両方に使用します。

[ OpenWrtの取得と書き込み ]
小米ルーターにssh root@192.168.31.1でログインしwgetでOpenWrtのバイナリーを取得しmtdコマンドで書き込むだけですので、公式手順通りで、何の補足も必要ありません。もちろん小米ルーターはインターネットに接続されていることが前提です。わたしの場合は既存のブロードバンドルーターにEthernetで接続しました。

[ OpenWrtの基本設定 ] – PCからEthernet接続が必要
OpenWrtの書き込みが終わると自動的にリブートが行われOpenWrtが立ち上がりますがWiFi電波は出ないし、フロントLEDは赤のままだしと、ちょっと勝手が違います。OpenWrtはデフォルトでは全くWiFiルーターとしての動作をしない状態で立ち上がります。

ルーターの白いEthernetコネクターにPCを有線接続しssh root@192.168.1.1でパスワード無しでログイン出来ます。webによるGUI設定画面を提供するLuCIはまだ入っていません。このままコマンドラインでuciコマンドを使用して設定も出来ますが、いずれGUI設定環境が必要になるのでLuCIの導入を行いました。小米ルーターのWAN側はブロードバンドルーターを接続している状態で以下のコマンドを入力します。

opkg update
opkg install luci
reboot

わたしの場合はopkg updateを複数回実行する必要がありました。再起動後、ブラウザーから192.168.1.1に接続するとLuCIが稼働しているはずです。rootログインとパスワードは共通ですので、最初はパスワード無しで設定画面に入れます。

単純にWiFiを有効にするにはメニューNetwork/WirelessでインターフェースをEnableにします。わたしの場合は、その後、Scanボタンを押したら実際にSSIDが見えるようになりました。これでWiFiからインターネットにアクセス出来るようになります。ただしWiFiパスワードなどはまだ設定されていません。少なくとも設定用(root)パスワードとWiFiのWPA2設定だけは素早く済ませておくべきでしょう。

asuswrt

小米WiFiルーター3に、本当はOpenWRTを入れたいのですが、まだパッケージのサポートがありません。唯一見つかったオープン・ソースなWiFiルーターはAsusWRTでしたので入れてみました。

[機能は豊富] 流石に機能は豊富です。全てのメニューを把握しきれないくらいですが、小米ルーターも相当充実したものでしたので、外国人にとってAsusWRTを導入する一番のメリットはメニューが英語になることでしょう。

[ AsusWRTのVPN ] わたしはVPNに期待していたのですが、残念ながら期待はずれでした。PPTPは問題なく使えます。ただし構成はひとつしか持てません。L2TPはIPSec無し、OpenVPNもありますが、一般的な構成ファイルを読み込んではくれません。

[ SSHは標準装備 ] SSHはメニューから起動できます。ログインしてみると普通にLinuxです。opensslなども入っているので、他のVPNなどを組み込む事が出来るかもしれません。

[ 導入 ]

ロシア語サイトながら神スクリプトがあります。対話式にパッケージのビルドからルーターへのフラッシュまで行える凄いスクリプトです。スクリプトの実行開始直後はロシア語メッセージが出てビビりますが英語のメッセージに変わりますので安心して実行出来ます。

http://prometheus.freize.net/index.html

このサイトはロシア語ですので大まかな流れだけ書いておきます。

スクリプトはLinux上で動きます。Linux上でソースコードを取得しするためインターネット接続が必要です(中国の場合VPNなどの壁超え手段も必要です)。またルーターにフラッシュする時には小米ルーターに接続する必要もあります。わたしは仮想環境で動くUbuntuがあったので、それを使いました。VMWare Workstation PlayerとOracle VM VirtualBoxで動くLinuxイメージがこのページに用意されているので、それを使うことも出来ます。

Ubuntuのターミナルを開いたらスクリプトを取得して実行するだけです。
wget -O start.sh http://prometheus.freize.net/script/start-99.sh
chmod +x start.sh
./start.sh

何かしら足りないパッケージがあると取得が始まるのでしばし時間がかかります。私の場合、しばらくして”slow_connection”というエラーで止まっていました。原因はgoogle.comへの接続テストでエラーしているからでした。google.comは単にテストのためにアクセスしているだけで、本当に必要では無い気もしますが、壁超え接続を行い再度 ./start.sh を実行しました。

configはmi-3を選択します。

トップメニューに “SSH-hack of stock firmware (0)”というのがあります。これでSSHを有効化出来るようです。わたしの場合はすでにSSHを有効にしていたので実行していません。

トップメニューの”Firmware (4)”を選択、次に”Build a firmware (3)を実行します。ビルドには長い時間が必要です。夜ならば寝てしまう、用事があるならさっさと出かけてしまうべきです・

次にトップメニューの”Firmware (4)”を選択、次に”Flash a firmware (4)を実行しするとルーターにAsusWRTが書き込まれます。

最後に下のメッセージが出ます。

The router will be accessible (after reboot) at 192.168.1.1 address ,
Login is ‘admin’; Password is ‘admin’; WiFi network SSID is ‘ASUS’;
WiFi default password is ‘1234567890’.
Please, do not forget to enable SSH access for the further firmware upgrades.
Note, previous router settings are not changed…

この後、AsusWRTでルーターが再起動されました。