Shadowsocks Openwrt Setup
正常来讲我本来不想写一篇 "Yet another Shadowsocks installation guide",不过前几天升级路由发现又得编译一次然后之前的工具又不见了的时候,又得到 Google "翻箱倒柜"找编译步骤,不如记下来顺便发一下吧。
编译环境
到 Openwrt 找到路由器对应的 SDK 下载条目,我路由器是 WNDR4300,版本是 lede
17.01.4,SDK 名字是
lede-sdk-17.01.4-ar71xx-nand_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz
之所以先看名字是想确定 gcc 的版本,据经验来看,使用其他版本的 gcc 编译会很惨(此处省略 200 字抱怨)。
由于这时候还没有翻墙,所以编译最好在一个墙外的 VPS 上搞定。(安装 docker 这种步骤就先跳过了)。
#+NAME prepare gcc
docker run -it --name lede gcc:5.4 bash
cd /usr/src
curl $SDK_URL -O
tar xvf $SDK_FILENAME
mv $SDK_DIR lede-sdk
cd lede-sdk
编译
这两位 openwrt-shadowsocks & luci-app-shadowsocks
git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds
git clone https://github.com/shadowsocks/openwrt-shadowsocks.git package/shadowsocks-libev
git clone https://github.com/shadowsocks/luci-app-shadowsocks.git package/luci-app-shadowsocks
pushd package/luci-app-shadowsocks/tools/po2lmo
make && make install
popd
make menuconfig
make package/shadowsocks-libev/compile V=99
make package/luci-app-shadowsocks/compile V=99
打包
mkdir ipks
# 有些是不需要的,不过懒得花时间去排除了
cp bin/packages/mips_24kc/base/*.ipk ipks/
cp bin/packages/mips_24kc/packages/*.ipk ipks/
cp bin/targets/ar71xx/nand/pacakges/*.ipk ipks/
tar cvf notimportant.tar ipks
exit
docker cp lede:/usr/src/lede-sdk/notimportant.tar ./
安装
scp notimportant.tar root@lede:/tmp/
ssh root@lede
cd /tmp
tar xvf notimportant.tar
cd ipks
opkg install *.ipk
opkg update
opkg install iptables-mod-tproxy
DNS 和 chnroutes
这里用的是 dnsmasq-china-list
git clone https://github.com/felixonmars/dnsmasq-china-list.git
cd dnsmasq-china-list
scp *.conf root@lede:~/
ssh root@lede
mkdir /etc/dnsmasq.conf.d
mv *.conf /etc/dnsmasq.conf.d/
# opkg install vim
vim /etc/dnsmasq.conf
# insert conf-dir=/etc/dnsmasq.conf.d/
opkg remove dnsmasq && opkg install dnsmasq-full
/etc/init.d/dnsmasq restart
然后再配置一个没有污染的 DNS,最好在 luci 里面,方便修改。
最后是 chnroutes
vim /usr/bin/update-ignore-list
# insert
#!/bin/sh
set -e -o pipefail
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | \
awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > \
/tmp/ignore.list
mv /tmp/ignore.list /etc/
if pidof ss-redir>/dev/null; then
/etc/init.d/shadowsocks rules
fi
# end
chmod +x /usr/bin/update-ignore-list
update-ignore-list
crontab -e
30 4 * * 0 /usr/bin/update-ignore-list >> /var/log/update_ignore_list.log
Note to self: 下次最好升级之前先弄好。