最近新入了一个小米路由器2,本着折腾一下更健康的原则,就想弄一个shadowsocks自动X墙。本来小米路由器号称基于openwrt,应该是很容易自己装插件上去的,结果弄了以后才知道。。。太幼稚!

小米路由器2目前的固件内核居然还是2.6,openwrt的版本:12.09,几年前的版本,也就是从一代开始就没有更新过,所以目前还没有2代上能用的openwrt固件。

不能自己刷新版的固件,小米本身这个固件又是深度定制过的,显然不支持标准的openwrt插件。。。顿时感觉当下很忧郁啊。。。

结果就只剩一条路,自己编译!好在小米号称是支持开放的,发布了工具链,不用拿第三方的折腾了。关于小米路由器相关的工具链,这里有一个列表:小米路由器相关工具链

一不小心写了这么多,闲话少说,开始很忧郁的折腾之路,中间过程就不细说了,说起来都是泪。。。既然是给有同样目的的人参考,我就只列一下那条通往成功的路吧。(说起来也是参考了不少网文,不过由于年代久远,已经不怎么适用了)

编译步骤

准备工作:

  1. 小米路由器工具链,目前有32,和64两个版本,我只说64位的版本,可以从这里下载SDK: http://bigota.miwifi.com/xiaoqiang/sdk/tools/package/sdk_package.zip 这个是sdk的包,解压以后sdk_package/toolchain目录就是我们要的工具链。如果不清楚下载到的工具链是什么版本的,可以file 一下bin目录中的这个文件: arm-xiaomi-linux-uclibcgnueabi-gcc:
1
file arm-xiaomi-linux-uclibcgnueabi-gcc
  1. linux系统,小米路由器官方只发布了linux的工具链,一般是ubuntu 64位,版本不限,我在16.04上编译成功了。
  2. 一些常用的工具这里就不一一列举了,比如git等,如果系统里没有,请自行安装。

环境变量

接下来是相关配置,我的整个过程在/home/nana/miwifi这个目录中执行,

  1. 在PATH中导入工具链目录,本例中工具链的目录: /home/nana/miwifi/sdk_package/toolchain,在shell中执行以下命令
1
2
3
4
export PATH=$PATH:/home/nana/miwifi/sdk_package/toolchain/bin
export CC=arm-xiaomi-linux-uclibcgnueabi-gcc
export CXX=arm-xiaomi-linux-uclibcgnueabi-g++
mkdir repo  #用来保存git clone的源码

安装必须的package

1
 sudo apt-get install build-essential autoconf libtool libssl-dev

编译依赖包

目前最新版的shadowsocks-libev需要openssl,zlib,pcre库,所以要先编译这几个库

4.1 编译zlib

1
2
3
4
5
6
7
wget http://downloads.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
mkdir zlib
cd zlib-1.2.8
./configure --prefix=/home/nana/miwifi/zlib
make
make install

4.2 编译openssl 目前高于1.0.1t的版本编译有问题,所以只用1.0.1t版的就行了。

1
2
3
4
5
6
7
8
9
cd /home/nana/miwifi
mkdir openssl
cd repo
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_1t.zip
unzip OpenSSL_1_0_1t.zip 
mv openssl-OpenSSL_1_0_1t openssl
cd openssl
./config --prefix=/home/nana/miwifi/openssl no-asm no-shared  os/compiler:arm-xiaomi-linux-uclibcgnueabi-gcc
make && make install

4.3 编译pcre

1
2
3
4
5
6
7
8
cd /home/nana/miwifi
mkdir pcre
cd repo
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.zip
unzip pcre-8.39.zip 
cd pcre-8.39
./configure --prefix=/home/nana/miwifi/pcre  --enable-shared=no  --host=arm-xiaomi-linux-uclibcgnueabi
make && make install

编译shadowsock-libev

shadowsocks的项目地址:https://github.com/shadowsocks/shadowsocks-libev.git。 这里的编译配置里,需要特别说明一下最后一个–disable-ssp,首先啥是ssp呢,英文是stack smash protector,中文直译是堆栈溢出保护,是gcc编译器针对堆栈溢出攻击的一种保护技术,在4.1版就已经实现了。小米工具链这个gcc是4.8,按理说应该是支持的,可是并没有,-v查看时,可以看到构建时被禁用了,对就是–disable-ssp这个标志。而shadowsocks最近的版本中加入了ssp的支持,SO老子就被这玩意坑了好久。。。好在,shadowsocks的ssp支持是可选的,可以通过–disable-ssp禁用,哎呀妈呀,这下可以编译了,舒坦!!!

1
2
3
4
5
6
7
cd /home/nana/miwifi
mkdir ss
cd repo
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
./configure --prefix=/home/nana/miwifi/ss --with-openssl=/home/nana/miwifi/openssl --with-zlib=/home/nana/miwifi/zlib --with-pcre=/home/nana/miwifi/pcre --host=arm-xiaomi-linux-uclibcgnueabi --disable-ssp
make && make install

然后,就可以愉快的等待编译结束,编译成功以后,就可以在之前指定的miwifi/ss/bin目录里找到我们要的ss-local,ss-redir,ss-tunnel等程序了。

同样的方法可以编译小米路由器2用的chinadns,redsock2等程序,这里不一一列举了。

至于这些东东怎么用,就是另外一个故事了,下次再说。