在千兆級別的無(wú)線(xiàn)路由器里,小米路由器3G的硬件配置是強于小米路由器4的。路由3G的RAM是256MB(而路由4是128MB),而且多一個(gè)USB3.0。 也許是因為不支持USB,路由4根本就不提供開(kāi)發(fā)版了。所以路由3G是性?xún)r(jià)比和可玩性最高的。
為什么使用開(kāi)發(fā)版ROM
小米路由器的Web管理界面很簡(jiǎn)潔,基本只有核心功能(但對絕大多數用戶(hù)都是夠用的)。對于愛(ài)折騰的用戶(hù),則略顯不足。比如我要加一個(gè)開(kāi)機腳本,或者想在路由器上用tcpdump抓包,默認的ROM是不能實(shí)現的。
而開(kāi)發(fā)版ROM可以ssh登錄路由器,就像進(jìn)入一個(gè)小的Linux系統,可控程度不可同日而語(yǔ)。
當然,OpenWRT也是靈活強大的,在3G上也可以刷。不選擇它的原因一方面是官方的開(kāi)發(fā)版已經(jīng)足夠強大了,兩者是類(lèi)似的(官方ROM本身也是改自OpenWRT);另一方面是官方ROM支持手機管理,多了一個(gè)選擇。比如有一次我的動(dòng)態(tài)域名更新失敗,通過(guò)手機界面,遠程找到了路由器的IP。
下載開(kāi)發(fā)版ROM
從小米官網(wǎng)(http://www1.miwifi.com/miwifi_download.html)下載開(kāi)發(fā)版ROM。
開(kāi)發(fā)版的版本似乎比穩定版要低,最后更新于2018年10月。
刷機
很多人都是通過(guò)U盤(pán)刷機,其實(shí)這并不是必須的。網(wǎng)頁(yè)的管理界面上就可以刷機。點(diǎn)右上角的系統升級,選擇下載的ROM,然后點(diǎn)手動(dòng)升級即可。
獲取初始root密碼
下載開(kāi)啟ssh的工具(https://d.miwifi.com/rom/ssh)。這個(gè)頁(yè)面同時(shí)也是獲取root密碼的界面。但前提條件是登錄小米賬號,并(通過(guò)手機客戶(hù)端小米WiFi)綁定/管理對應的路由器。
開(kāi)啟ssh則需要USB的支持了。根據官方的說(shuō)明,主要流程是:將miwifi_ssh.bin拷到U盤(pán)根目錄,關(guān)路由器插U盤(pán),按reset鍵上電,黃燈閃爍后松reset。
開(kāi)啟ssh完成,路由器重啟后,就可以用這個(gè)密碼登錄路由器了。
登錄后可以用passwd命令修改root的密碼。
用密鑰登錄
用ssh-copy-id建立密鑰的信任關(guān)系會(huì )失敗,可能是因為dropbear和openssh密鑰存儲的位置不同。所以需要手動(dòng)加一下。
PC端運行
scp ~/.ssh/id_rsa.pub root@10.7.3.1:/etc/dropbear/authorized_keys
路由器上運行下面的命令重啟ssh服務(wù)。
/etc/init.d/dropbear restart
再重新登錄就可以了。
文件系統
登錄路由器后,先看看文件系統,以便合理使用。
可以看到:
/extdisks/sda1 對應于USB存儲。因為我有NAS,再加上使用USB有可能影響2.4G WiFi,所以我并不打算使用路由器上的USB存儲。/tmp是內存虛擬的文件系統,所以里面的內容關(guān)機/重啟后會(huì )丟失;另外,/var是/tmp的符號鏈接,所以也不會(huì )永久保存。/etc, /data, /userdisk 是同一塊Flash,里面的內容會(huì )永久保存。結合目錄內容來(lái)看,/etc, /userdisk其實(shí)是/data的子目錄。
如保我們想保存永久性的log,就不能像普通Linux系統保存在/var/log里了,而/userdisk看起來(lái)是小米路由器App在用,我也不想動(dòng)它,那么,保存在/data/usr/log可能是一個(gè)合理的選擇。
啟動(dòng)腳本
/etc/rc.local是可以用的,所以可以在這里作為啟動(dòng)腳本的入口。腳本本身可以保存在/etc目錄或/data/usr/bin目錄。
下面是我的/etc/rc.local。調用/data/usr/bin里的腳本是我加的。
restore phy config
speed=$(uci -q get xiaoqiang.common.WAN_SPEED)
[ -n "$speed" ] && /usr/sbin/phyhelper swan "$speed"
/data/usr/bin/log-ip.sh
/data/usr/bin/ddns.sh
exit 0
log-ip.sh 用于記錄每次啟動(dòng)拔號得到的IP地址,內容如下:
!/bin/sh
logdir=/data/usr/log
test -d $logdir || mkdir -p $logdir || exit 1
addr=$(ip addr show pppoe-wan | grep -w inet | awk {print $2;})
echo "$(date +%Y/%m/%d %a %H:%M:%S) - $addr" | tee -a $logdir/wanip.log
dnsmasq及本地名稱(chēng)解析
dnsmasq是小型網(wǎng)絡(luò )的全家桶。它既是路由器的DHCP服務(wù)器,也可以用于本地域名解析,甚至還支持tftp。通過(guò)版本信息可以看到它具體支持/不支持哪些特性。
它不支持DNS安全擴展,暗示了它支持普通的DNS解析。我想用名稱(chēng)來(lái)訪(fǎng)問(wèn)局域網(wǎng)內的主機時(shí),就需要用到本地域名服務(wù)器。
在有的路由器上,DHCP設定的名稱(chēng)會(huì )自動(dòng)用于DNS解析。比如,
把pc1的IP設定為10.9.8.11pc2的IP自動(dòng)分配為10.9.8.102
在同一個(gè)網(wǎng)絡(luò )內,通過(guò)名字pc1即可以訪(fǎng)問(wèn)10.9.8.11這臺主機,通名字pc2即可以訪(fǎng)問(wèn)10.9.8.102這臺主機。
這個(gè)過(guò)程是可以(部分)自動(dòng)化的。但小米路由器里沒(méi)有這么做。所以要找一個(gè)解決辦法。
dnsmasq的配置文件是/tmp/etc/dnsmasq.conf,位于/tmp目錄說(shuō)明它是一個(gè)動(dòng)態(tài)生成的文件,而配置文件內部也說(shuō)明了這一點(diǎn)。
auto-generated config file from /etc/config/dhcp
conf-dir=/tmp/etc/dnsmasq.d/
dhcp-authoritative
addn-hosts=/tmp/hosts
...
所以,源頭的配置文件是/etc/config/dhcp。我們可以通過(guò)修改這個(gè)文件,加入靜態(tài)地址配置(網(wǎng)頁(yè)配置界面上也會(huì )同步更新)。因為我需要把幾十條華碩路由器里的DHCP靜態(tài)配置重新設定到小米路由器中,于是用腳本做格式轉換,然后寫(xiě)入這個(gè)文件。
從這個(gè)配置文件里還可以看到,/tmp/hosts內的主機名會(huì )用于域名解析。所以,解決辦法就是把需要解析的主機名及其IP地址加入這個(gè)目錄。類(lèi)似于下面:
10.7.3.1 router
10.7.3.2 nas
10.7.3.3 nuc
10.7.3.4 kodi
10.7.3.6 3dprint
10.7.3.7 printer
10.7.3.8 radio
由于/tmp目錄下的內容不是永久保存的,所以需要將這個(gè)主機列表放在/data/usr/etc目錄,在啟動(dòng)腳本里將其拷貝到/tmp/hosts目錄。
經(jīng)過(guò)這翻折騰后,小米路由器3G就比較完美了?;旧铣^(guò)我以前使用的千元級別的華碩路由器了。