小米路由器3安装SS记录

更新:小米路由器3网络太不稳定,现已压箱底...


入手了小米路由器3,本以为足够强大,却发现坑处满满,性能和稳定性堪忧。

以下是在其中的openwrt安装SS(Shadowsocks)的记录:

此处的Shadowsocks是指客户端,服务端的配置可见博文:DIY科学上网

一、安装官方开发版ROM

ROM下载地址:http://www1.miwifi.com/miwifi_download.html

打开miwifi.com管理后台,将ROM以手动升级的方式安装至路由器

二、开启SSH

打开:https://d.miwifi.com/rom/ssh

下载SSH工具包,按照网页上的指引安装并开启SSH。并在页面中获取root密码

三、简单配置路由器环境

尝试输入ssh命令,

$ ssh root@miwifi.com

输入此前获取到的root密码,进入路由器。

小米路由器3对openwrt进行了大量阉割,现在需要对部分进行一些简单安装和配置:

① 安装opkg

参考:http://www.ywlib.com/archives/102.html

1、从任意mt7620芯片的openwrt固件包中提取opkg(复制出来),复制到小米路由的/data路径下。
如果嫌麻烦,可以直接下载已提取出来的文件:http://pan.baidu.com/s/1slyNMbz (密码:hfxs)。

利用scp命令可实现拷贝至openwrt中,在本机(电脑)上运行:

$ scp [opkg本地路径] root@miwifi.com:/data/opkg

2、修改/etc/opkg.conf文件,替换为以下内容:
作用是添加mt7620芯片在openwrt的opkg源及国内镜像。

src/gz attitude_adjustment_base http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/base
src/gz attitude_adjustment_packages http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/packages/
src/gz attitude_adjustment_luci http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/luci/
src/gz attitude_adjustment_management http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/management/
src/gz attitude_adjustment_oldpackages http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages/
src/gz attitude_adjustment_routing http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/routing/
src/gz openwrt_dist http://openwrt-dist.sourceforge.net/releases/ramips/packages
src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/releases/luci/packages
dest root /data
dest ram /tmp
lists_dir ext /data/var/opkg-lists
option overlay_root /data
arch all 100
arch ramips 200
arch ramips_24kec 300

3、永久添加环境变量。修改/etc/profile文件,找到export PATH=一行修改为:

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/data:/data/usr/sbin:/data/usr/bin

再这一行下面新添加一行:

export LD_LIBRARY_PATH=/data/usr/lib

4、使环境变量临时生效(不做这一步也可以,重启机器即可):

# export PATH=$PATH:/data:/data/usr/bin:/data/usr/sbin
# export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/data/usr/lib

or

# reboot

5、更新opkg,执行如下命令:

# opkg update

6、到这里,opkg基本可以使用了,但是安装其他库的时候,经常会提示错误,缺少libc*。这里需进行安装,注意保持libc为最新版本。

# cd /data
# wget http://openwrt.mirrors.ustc.edu.cn/barrier_breaker/14.07/ramips/mt7620a/packages/base/libc_0.9.33.2-1_ramips_24kec.ipk 
# opkg install libc_*.ipk
# rm -rf libc_0.9.33.2-1_ramips_24kec.ipk
② 创建用户

参考:http://blog.csdn.net/xingyuzhe/article/details/47299825

为了root账户的安全,这里创建一个常用的个人用户:

1、安装依赖的软件包

# opkg install shadow-common shadow-useradd

2、创建新用户
例如:用户名congmin

# useradd congmin

设置密码:

# passwd congmin

创建用户目录:

# mkdir /data/home
# mkdir /data/home/congmin
# chown congmin /data/home/congmin

编辑/etc/passwd,修改新用户参数,将

congmin:x:1000:1000::/home/congmin:

修改为:

congmin:x:1000:1000:congmin:/data/home/congmin:/bin/ash

3、安装sudo及su命令
安装:

# opkg install sudo shadow-su

配置sudo:

# visudo

找到root ALL=(ALL) ALL,并在下面添加一句:

congmin ALL=(ALL) NOPASSWD: ALL

然后,先退出root用户的登录,再用新用户的身份登录,检查到这一步为止,是否一切正常。

# exit
$ ssh congmin@miwifi.com
③ 配置ssh免密登录

在本机(电脑)上操作:

$ cat ~/.ssh/id_rsa.pub | ssh congmin@miwifi.com 'mkdir -p .ssh && cat - >> ~/.ssh/authorized_keys'

并在本机(电脑)上进行配置:
编辑~/.ssh/config文件,内容如下:

Host wifi
HostName miwifi.com
Port 22
User congmin

测试ssh能否成功免密登录:

$ ssh wifi

四、安装Shadowsocks客户端

参考:https://github.com/blademainer/miwifi-ss

切换到root用户:

$ sudo su

执行一键安装脚本:

# cd /tmp && rm -rf *.sh && curl https://raw.githubusercontent.com/blademainer/miwifi-ss/master/miwifi.sh -o miwifi.sh && chmod +x miwifi.sh && sh ./miwifi.sh && rm -rf *.sh

根据提示镜像操作安装

  • 请输入服务器IP:(服务端SS配置的IP地址)
  • 请输入服务器端口:(服务端SS配置的端口,如25)
  • 请输入密码:(服务端SS配置的密码)
  • 请输入加密方式:(服务端SS配置的加密方式,如aes-256-cfb)

安装成功后即可享用。

每次系统固件升级后:

固件升级会导致以下文件丢失:

  • /etc/opkg.conf文件将会重置
  • /etc/profile文件将会重置
  • /etc/init.d/shadowsocks文件丢失

故建议关闭固件自动升级,改为手动升级。

并且对上述文件进行备份

# mkdir -p /data/backup
# cp /etc/opkg.conf /data/backup/opkg.conf
# cp /etc/profile /data/backup/profile
# cp /etc/init.d/shadowsocks /data/backup/shadowsocks

在每次固件升级后进行如下恢复操作:

  • 恢复/etc/opkg.conf
# cp /data/backup/opkg.conf /etc/opkg.conf
  • 恢复/etc/profile
# cp /data/backup/profile /etc/profile
  • 恢复/etc/init.d/shadowsocks
# cp /data/backup/shadowsocks /etc/init.d/shadowsocks
  • 启动/etc/init.d/shadowsocks
# /etc/init.d/shadowsocks start
# /etc/init.d/shadowsocks enable
# reboot

更多:从gfwlist更新dnsmasq列表

① 自建DNS服务器

在VPS服务器上进行如下操作:

查看resolv.conf

# cat /etc/resolv.conf

将内容复制到:

# vim /etc/resolvconf/resolv.conf.d/tail

保存生效:

# resolvconf -u

安装dnsmasq:

# apt install dnsmasq

配置dnsmasq,在/etc/dnsmasq.conf后加入

port=5333     # 选一个非53端口
no-resolv
interface=eth0     # 选择外网接口,可通过cat /etc/network/interfaces查询
listen-address=127.0.0.1
listen-address=[服务器外网IP]
server=8.8.8.8
server=8.8.4.4

重启dnsmasq

# /etc/init.d/dnsmasq restart
② 在路由器中运行更新脚本

参考:https://github.com/cokebar/gfwlist2dnsmasq

由于上述一键安装脚本会将自带预设的dnsmasq列表复制至/tmp/etc/dnsmasq.d/dnsmasq_list.conf,但其并不是最新的列表数据,故需要手动更新。

进入路由器的dnsmasq路径:

# cd /tmp/etc

暂停服务:

# /etc/init.d/dnsmasq stop
# /etc/init.d/firewall stop
# /etc/init.d/shadowsocks stop

下载gfwlist2dnsmasq脚本

# curl https://raw.githubusercontent.com/cokebar/gfwlist2dnsmasq/master/gfwlist2dnsmasq.sh -o gfwlist2dnsmasq.sh

运行脚本:

# sh gfwlist2dnsmasq.sh -d [服务器外网IP] -p 5333 -s gfwlist -o /etc/dnsmasq.d/dnsmasq_list.conf

其中:

  • -d,表示dns-ip,DNS的IP地址
  • -p,表示dns_port,DNS的端口
  • -s,表示ipset_name,指定ipset表的名称,预设为gfwlist
  • 其中[服务器外网IP:5333]为上述VPS上搭建的DNS服务的地址和端口

拷贝配置列表:

# cp /etc/dnsmasq.d/dnsmasq_list.conf /tmp/etc/dnsmasq.d/dnsmasq_list.conf

重启服务:

# /etc/init.d/dnsmasq start
# /etc/init.d/firewall start
# /etc/init.d/shadowsocks start
# /etc/init.d/shadowsocks enable

生效后,即表示更新列表成功。