Lede 17.01 shadowsocks设置

文章写好一年了,随着lede应用库的升级,文中有些地方该改一改了,我是在在原文上直接调整的,懒得单独再开个帖子 (2018-09-20)

目标:

在TP-Link TL-WR841N上,使用lede17.0x版,shadowsocks的透明代理能力,结合chinadns和dns forward,实现:

  • 路由器下的国内请求直接连接,国外请求走内置ss-redir代理到shadowsocks服务端。

背景:

  • 设备: TP-Link TL-WR841N/ND v8
  • rom包:lede-17.01.2-ar71xx-generic-tl-wr841-v8-squashfs-sysupgrade.bin
  • configs:

    • /etc/opkg.conf

      1
      2
      3
      4
      5
      dest root /
      dest ram /tmp
      lists_dir ext /var/opkg-lists
      option overlay_root /overlay
      option check_signature 1
    • /etc/opkg/distfeeds.conf

      1
      2
      3
      4
      5
      6
      src/gz reboot_core http://downloads.lede-project.org/releases/17.01.2/targets/ar71xx/generic/packages
      src/gz reboot_base http://downloads.lede-project.org/releases/17.01.2/packages/mips_24kc/base
      src/gz reboot_luci http://downloads.lede-project.org/releases/17.01.2/packages/mips_24kc/luci
      src/gz reboot_packages http://downloads.lede-project.org/releases/17.01.2/packages/mips_24kc/packages
      src/gz reboot_routing http://downloads.lede-project.org/releases/17.01.2/packages/mips_24kc/routing
      src/gz reboot_telephony http://downloads.lede-project.org/releases/17.01.2/packages/mips_24kc/telephony

基本步骤:

首先你得确保你的路由器能上网,今天遇到一个坑,PPPOE拨号不成功,最后发现是本地路由器时钟因为路由器刚刷好,日期是2017年的日期,所以拨号失败。。。

ssh登录到路由器,或者从web控制台应该也可以,我习惯从ash界面做:

1
2
ssh root@192.168.1.1
输入你设置的root登录密码

然后执行下面的操作

  • opkg update
  • opkg install ip-full ipset iptables-mod-tproxy libev libpthread libpcre libmbedtls libmbedtls我不确认是不是必须。

  • 下载 并 opkg install以下依赖,http://openwrt-dist.sourceforge.net/packages/LEDE/luci/或者[这里](
    http://phyer.bj.bcebos.com/lede/lede-wr841n-nd-resource.tar.gz

    )

  • libudns_x.xx-x_xxxx.ipk
  • libsodium_x.x.xx-x_xxxx.ipk
  • shadowsocks-libev_x.x.x-x_xxxx.ipk
  • dns-forwarder_x.x.x-x_xxxx.ipk
  • ChinaDNS_x.x.x-x_xxxx.ipk
  • luci-app-shadowsocks_x.x.x-x_all.ipk
  • luci-app-chinadns_x.x.x-x_all.ipk
  • luci-app-dns-forwarder_x.x.x-x_all.ipk

  • 上面的这些依赖不用手动安装离线包了,直接在线装就好了现在。顺序是这样的:

    • opkg update
    • opkg list | grep libudns 或者 ChinaDNS 等。 查看一下远程仓库是否包含类似的包名,如果找到了,直接安装此包,比如,输入:opkg list | grep luci-app-chinadns,你会找到这个包: luci-app-chinadns - 1.6.1-1,那么直接从远端在线安装它:opkg install luci-app-chinadns 就可以了。
    • 执行opkg install shadowsocks-libev 之前,一定先安装luci: opkg install luci-app-shadowsocks-libev,因为有可能装完shadowsocks-libev你就上不了网了,除非opkg remove shadowsocks-libev 或者手动改他的配置文件,关掉默认开启的节点,因为shadowsocks-libev安装好后,默认连接的远端服务ip是个不能用的或者127.0.0.1。所以如果有luci-app-shadowsocks-libev 你就可以从容的在web界面关掉或编辑shadowsocks服务器设置。

其他都差不多,和之前设置区别不大,重点是现在的shadowsocks-libev支持udp转发了

全部装好之后,执行了 opkg list 之后,大致会看到插件列表如附录1

典型设置:

请使用luci进行设置:

影梭:

  • 透明代理 保持运行,其他可以不用管
  • 被忽略IP列表: 选chinaDNS

ChinaDNS:

  • 端口:35353
  • 上游服务器:${某个没被污染的国内dns的ip},127.0.0.1#5300
    某个没被污染的国内dns的ip,比如你可以写:123.206.21.48

    如图:
    chinadns

DNS转发

  • 监听端口:5300
  • 监听地址:127.0.0.1
  • 上游dns:8.8.8.8

    如图:
    dns-forward

DHCP and DNS

  • DNS forwardings:第一项写 127.0.0.1#35353, 再新建一个项目写:${某个没被污染的国内dns的ip} (这个设置现在不是必须的了(2018-09-20)

    如图:
    dns-forward

PPPOE设置

为防止第一时间的dns污染,有必要把pppoe拨号连接的默认dns也改掉:

步骤: interfaces->PPPOE->edit->Advanceds settings->Use custom DNS servers->改成国内没被污染的dns地址,然后save and Apply

这样就中国美国各走各的流量了, 上淘宝不再显示国际版的了
具体的请求流程大致是这样的:

    客户端发起dns请求
         |
    lede内置的dnsmasq受理
         |
      是国内请求吗?
     /     \
    是      不知道
    |          |
  走国内dns   内置ChinaDNS进程受理
    |               |
结果返回客户端     是国内请求吗?
                 /        \
                是         否
                |          |
              走国内dns    转到内置DNS-Forward
                |            |    
            结果返回客户端   走TCP从5300端口转发给ss-server
                             |
                           结果返回客户端

后续提高可用性

自动更新chinadnsignore的脚本:

可以放在/etc/init.d/updateignore

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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/chinadns_chnroute.txt

mv /tmp/chinadns_chnroute.txt /etc/

if pidof ss-redir>/dev/null; then
/etc/init.d/shadowsocks restart
fi

然后
chmod +x /etc/init.d/updateignore

自动检测是否翻墙成功否则自动重启shadowsocks的脚本

将下面的脚本保存在:/etc/init.d/ss-watchdog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
wget --spider --quiet --timeout=10 https://www.google.com.sg/
if [ "$?" == "0" ]; then
echo '['$LOGTIME'] No Problem.'
exit 0
else
wget --spider --quiet --tries=1 --timeout=10 https://www.baidu.com/
if [ "$?" == "0" ]; then
echo '['$LOGTIME'] Problem decteted, restarting shadowsocks.'
/etc/init.d/shadowsocks restart >/dev/null
else
echo '['$LOGTIME'] Network Problem. Do nothing.'
fi
fi

把执行权限加上:

1
chmod +x /etc/init.d/ss-watchdog

最后把上述两个都写进定时任务:

1
crontab -e

然后写进去:

1
2
3
*/10 * * * * /etc/init.d/ss-watchdog >> /var/log/ss_watchdog.log 2>&1
0 1 * * 7 echo "" > /var/log/ss_watchdog.log
30 4 * * * /etc/init.d/updateignore > /dev/null 2>&1

每隔10分钟检查一下shadowsocks服务状态,并每天4点30分检查dns忽略列表

参考了以下教程:

附录1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
ChinaDNS - 1.3.2-4
base-files - 173-r3435-65eec8bd5f
busybox - 1.25.1-4
dns-forwarder - 1.2.0-1
dnsmasq - 2.77-1
dropbear - 2017.75-1
firewall - 2017-05-27-a4d98aea-1
fstools - 2016-12-04-84b530a7-2
fwtool - 1
hostapd-common - 2016-12-19-ad02e79d-3
ip-full - 4.4.0-9
ip6tables - 1.4.21-2
ipset - 6.30-1
iptables - 1.4.21-2
iptables-mod-tproxy - 1.4.21-2
iw - 4.9-1
iwinfo - 2016-09-21-fd9e17be-1
jshn - 2017-02-24-96305a3c-1
jsonfilter - 2016-07-02-dea067ad-1
kernel - 4.4.71-1-840c23c3f9dc6160d8c7bd302c6f494d
kmod-ath - 4.4.71+2017-01-31-2
kmod-ath9k - 4.4.71+2017-01-31-2
kmod-ath9k-common - 4.4.71+2017-01-31-2
kmod-cfg80211 - 4.4.71+2017-01-31-2
kmod-gpio-button-hotplug - 4.4.71-2
kmod-ip6tables - 4.4.71-1
kmod-ipt-conntrack - 4.4.71-1
kmod-ipt-core - 4.4.71-1
kmod-ipt-ipset - 4.4.71-1
kmod-ipt-nat - 4.4.71-1
kmod-ipt-tproxy - 4.4.71-1
kmod-lib-crc-ccitt - 4.4.71-1
kmod-mac80211 - 4.4.71+2017-01-31-2
kmod-nf-conntrack - 4.4.71-1
kmod-nf-conntrack6 - 4.4.71-1
kmod-nf-ipt - 4.4.71-1
kmod-nf-ipt6 - 4.4.71-1
kmod-nf-nat - 4.4.71-1
kmod-nfnetlink - 4.4.71-1
kmod-ppp - 4.4.71-1
kmod-pppoe - 4.4.71-1
kmod-pppox - 4.4.71-1
kmod-slhc - 4.4.71-1
lede-keyring - 2017-01-20-a50b7529-1
libblobmsg-json - 2017-02-24-96305a3c-1
libc - 1.1.16-1
libev - 4.22-1
libgcc - 5.4.0-1
libip4tc - 1.4.21-2
libip6tc - 1.4.21-2
libiwinfo - 2016-09-21-fd9e17be-1
libiwinfo-lua - 2016-09-21-fd9e17be-1
libjson-c - 0.12.1-1
libjson-script - 2017-02-24-96305a3c-1
liblua - 5.1.5-1
libmbedtls - 2.4.2-1
libmnl - 1.0.4-1
libnl-tiny - 0.1-5
libpcre - 8.40-2
libpthread - 1.1.16-1
libsodium - 1.0.12-1
libubox - 2017-02-24-96305a3c-1
libubus - 2017-02-18-34c6e818-1
libubus-lua - 2017-02-18-34c6e818-1
libuci - 2016-07-04-e1bf4356-1
libuci-lua - 2016-07-04-e1bf4356-1
libuclient - 2016-12-09-52d955fd-1
libudns - 0.4-1
libxtables - 1.4.21-2
logd - 2017-03-10-16f7e161-1
lua - 5.1.5-1
luci - git-17.152.82987-7f6fc16-1
luci-app-chinadns - 1.6.1-1
luci-app-dns-forwarder - 1.6.1-1
luci-app-firewall - git-17.152.82987-7f6fc16-1
luci-app-shadowsocks - 1.6.3-1
luci-base - git-17.152.82987-7f6fc16-1
luci-lib-ip - git-17.152.82987-7f6fc16-1
luci-lib-jsonc - git-17.152.82987-7f6fc16-1
luci-lib-nixio - git-17.152.82987-7f6fc16-1
luci-mod-admin-full - git-17.152.82987-7f6fc16-1
luci-proto-ipv6 - git-17.152.82987-7f6fc16-1
luci-proto-ppp - git-17.152.82987-7f6fc16-1
luci-theme-bootstrap - git-17.152.82987-7f6fc16-1
mtd - 21
netifd - 2017-01-25-650758b1-1
odhcp6c - 2017-01-30-c13b6a05-1
odhcpd - 2017-04-28-9268ca65-1
opkg - 2017-03-23-1d0263bb-1
ppp - 2.4.7-11
ppp-mod-pppoe - 2.4.7-11
procd - 2017-02-15-5f912410-1
rpcd - 2016-12-03-0577cfc1-1
shadowsocks-libev - 3.0.6-1
swconfig - 11
uboot-envtools - 2015.10-1
ubox - 2017-03-10-16f7e161-1
ubus - 2017-02-18-34c6e818-1
ubusd - 2017-02-18-34c6e818-1
uci - 2016-07-04-e1bf4356-1
uclient-fetch - 2016-12-09-52d955fd-1
uhttpd - 2016-10-25-1628fa4b-1
uhttpd-mod-ubus - 2016-10-25-1628fa4b-1
usign - 2015-07-04-ef641914-1
wpad-mini - 2016-12-19-ad02e79d-3

推荐文章