Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙

shadowsocks 服务器合租招募

本站发布的三种使用 shadowsocks 在 OpenWrt / LEDE 上的自动翻墙方案:

1、Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动翻墙
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙 (停止更新)
3、Shadowsocks + GfwList 实现 OpenWRT / LEDE 路由器自动翻墙

这篇文章介绍的方法基于aa65535的luci-app-shadowsocks/openwrt-shadowsocks,介绍了如何在OpenWRT / LEDE下配置自动翻墙,新版本支持在Luci下图形化配置,大大简化了配置过程。配置完成后,路由器本身获得自动翻墙能力,所有连入该路由的设备都可无障碍访问被墙的站点。是运行于路由器的透明代理。

本人作为一名普通使用者,水平有限,且文章也缺乏校审,肯定有错误存在,也有很多能改进的地方,如有意见或建议,请留言指出,万分感谢! 如果使用时遇到问题也欢迎留言,本人如果有空都会回复。

顺便吐槽一下OP/LEDE的包名,这也是各种Linux Distribution的通病了吧,OpenWrt里的ip,到了LEDE里弄成俩:ip-tiny和ip-full,ca-certificates也变成俩,多出来一个ca-bundle,真是日了狗了,搞这篇文章时候被这俩不同系统的不同之处弄得抓狂。

方案简介
一、安装

适用于 openwrt-shadowsocks 3.0.1及以上版本,搭配 luci-app-shadowsocks 1.6.0及后续版本。

所需软件列表
如果所用网络环境直连sourceforge.net和downloads.openwrt.org/downloads.lede-project.org没有问题的话,可以直接使用作者提供的软件源安装及更新SHADOWSOCKS

如果直连遇到困难(无法连接或者过程中下载总是中断),请继续下面的步骤来安装。实测国内许多ISP,执行 opkg update 和 opkg install 下载安装的时候都可能会遇到卡住、中断的情况,请多试几次。如果尝试多次仍然失败,请参考下面的依赖列表,手动至官方下载站点手工下载。

依赖包要装全!依赖包要装全!依赖包要装全!重要的事情说三遍!遇到安装问题请参考下列以来列表,看自己装全了没有!

依赖列表
安装过程中如果出现错误提示无法解决,可以留言。LEDE已发布正式版,建议从OpenWrt更新至LEDE。本篇文章将逐步放弃更新OpenWrt的步骤,最终将只描述LEDE上的步骤。

OpenWRT CC 15.05.1 及更早版本安装步骤
LEDE 安装步骤
二、shadowsocks 配置

登录Luci,指向“服务”,此时应该能够看到shadowsocks(中文界面下显示“影梭”)了。接下来进行shadowsocks的配置。

I. 添加服务器
II. 设置代理方案
III. 开启代理服务
IV. 额外的优化
二、DNS配置

到此虽然shadowsocks配置完成,不过还没有进行DNS部分的配置,只有完成了DNS的配置才能解决DNS污染并优化DNS解析,接下来的部分来对DNS的配置进行说明。

PS:DNS的调试可以使用dig

I. DNS转发链图示
II. DNS转发链的基本配置
III. DNS转发链的优化配置
三、按域名指定是否走代理(可选)

这一部分的配置用于替代 “二.III.2. 添加gfwlist和China-List配置文件”中的步骤。请在完成“二.III.2. 添加gfwlist和China-List配置文件”前面的配置后进行这一部分的配置。

下面的步骤会使用我编写的脚本来自动生成配置文件,脚本放在github维护,可能随时更新,可到gfwlist2dnsmasq, openwrt-scripts查看最近更新的动态。

先使用dnsmasq-full替换掉原有的dnsmasq:

I. China-List强制直连 自定义域名强制直连
II. GFWList强制走代理 自定义域名强制走代理
四、其他

一些强烈推荐的额外设置项(涉及到更新、维护)可以参考:《Shadowsocks for OpenWRT / LEDE 拾遗》

1,578 条评论

  1. Fred 回复

    大神你好,

    我用了Shadowsocks + ChnRoute 实现 OpenWRT 路由器自动翻墙在国内已经差不多1年半,(linksys 1200AC + chaos calm 15.05 + 上海电信国际精品网+ramnode VPS (或者 bandwagonhost)) 非常稳定。几乎很少断线重启。

    最近我在美国要进修1年,想同样的方式通过shadowsocks对中国IP进行proxy处理。目的就是CHNROUTE中的iplist全部走proxy。我在米国也买了一个1200AC,可能通过haproxy到ramnode走CN2路线到我上海家里可以快一点。

    我尝试了用ip列表中走代理,但是这样不完整。如果能够反向设置,让chnroute中的ip统统走代理。有没有可能这样设置?如果可以请指点!:)

    谢谢!

    Fred
    纽约

    1. cokebar 文章作者 回复

      可以考虑shell脚本将chnroute中的iplist添加到名字为ss_spec_dst_fw的ipset中

    2. cokebar 文章作者 回复

      可以尝试最新的1.5.0版本,增加了走代理列表文件,将chnroute改填到那里就行

      1. Fred 回复

        你好 cokebar,

        谢谢你的回复。
        我按照你的instruction,安装了1.5.0(luci),然后碰到一个问题,就是在bypass list里面填写什么?因为我需要bypass 所有IP,然后遇到forwarded ip list 再走proxy 通道(所以我用了CIDR 0.0.0.0/0) 但是好像用了这个,后面的forwarded IPlist 就被ignore了,但是如果用NULL as global proxy,那么后面的forwarded iplist也是同样不起作用。

        thanks for your help.

        Fred

        1. Fred

          hi cokebar,

          现在设置可以了!很酷!

          环境:
          目的:中国以外的IP忽略(直连),中国的IP全部走SS
          运营商:美国Comcast
          路由器:Linksys WRT1200AC
          openwrt:CC15.05.01
          shadowsocks-libev: 1.4.8
          SS-luci: 1.5.0
          SS 服务器:上海电信,Linksys WRT 1200AC
          还没用ChinaDNS(仅用了DNS 全局fowarding)

          我现在的设置是全局DNS tunnel到国内,晚点我要试试chinadns分开dns解析。不知道行不行。

          再次感谢!

          Fred

    3. cokebar 文章作者 回复

      推荐《鸟哥的linux私房菜》

  2. Geric 回复

    你好! 之前也是用的你的教程,可能有点小bug,开机自启动会偶尔出现Connection reset by peer,然后ss-dir显示未运行。
    现在更新了新版SS,一直reset by peer,再也没有成功自启成功过。。。这就尴尬了.jpg
    还有就是没做任何防污染,nslookup 油土鳖 返回是假的ip 8.7.198.45 但是却上的去。更新了新的SS才这样,以前老版本污染就没法上了。

  3. cokebar fans 回复

    shadowsocks的luci怎么没有了……

  4. Frankie Leung 回复

    cokebar,你好,首先很感谢你,给我的帮助,以及一直用你教程过来,享受PS4玩游戏的乐趣,最近遇到这样一个问题,最近没有用SS服务器,因为那个游戏的关系,挂不挂SS都一样的速度,因为游戏需要UDP支持,现在我把SS关闭了,只用chinadns解决dns的污染问题,电脑要填写DNS才可以解析,PS4也一样,之前开SS的时候不需要,所以想请教,关闭ss的时候如何用chinadns和dns forwarding来解析。谢谢你,新年快乐万事如意!

  5. Fred 回复

    hi cokebar,

    你好!用了几天1.5.0luci SS,比较稳定,就是有一次进程突然没了,要restart一下。

    是否可以有个功能,就是能够在输入SS服务器的时候可以用域名(instead of IP),我这个比较特殊,因为电信运营商给的是动态IP地址。

    另外有没有任何scripts能够monitor 域名,如果ip地址和域名不符合,可以自动重启一下SS-server.

    感谢!
    Fred @ NY

    1. cokebar 文章作者 回复

      关于为什么不支持域名:
      https://github.com/shadowsocks/luci-app-shadowsocks/pull/30
      你估计是路由跑服务端+DDNS吧,上面那个讨论并没有考虑使用DDNS并且IP频繁变动的情况;不过通过编写一个shell script病添加到cron中实现定时检测。
      然而这毕竟是被动式的还是会有延时。

      1. Fred 回复

        是的,路由器跑SS server+DDNS, 我发现电信经常切换IP,有什么好办法么?我对shell scripting 不熟,如果要写,可能要学习一下。有什么捷径么?

        thanks, Fred

      2. Fred 回复

        你好大神,

        上海电信的IP经常换,短的几小时,长点几天。我是openwrt + DDNS做的ss-server

        关于自动检测IP情况写到Shell script加到cron,我自己可能需要花时间去研究。

        有没有现成的script 那个server list的路径在哪儿?您有时间把这个功能加到luci-shadowsocks里面去么?

        谢谢!
        Fred

  6. cokebar fans 回复

    新版luci 在博主提供的地址上找不到呀!以前好像可以找到。

    1. cokebar 文章作者 回复

      已更新地址

  7. howard lee 回复

    谢谢博主的详细教程,可以翻墙了。

    不过到“三、按域名指定是否走代理”的部分,我的路由器错误蛮多的.

    1.SH文件被屏蔽,所以需要自己下载。我放到CD /TMP文件夹。
    2.在添加权限后,执行命令”./generate_dnsmasq_chinalist.sh -d 114.114.114.114 -s ss_spec_dst_bp -f /etc/dnsmasq.d/accelerated-domains.china.conf”时,提示“Please enter a valid DNS server IP address.”。
    尤其是该命令我完全搞不懂的情况下。

    最后感谢博主的细致教程,顺祝新年快乐。

    1. cokebar 文章作者 回复

      已修复 请更新最新脚本

  8. zeroxia 回复

    uci add_list, uci commit 那个设置没用啊。 dhcp.@dnsmasq[0].confdir 这个设置是不是没用的?
    我设置了,并确认了 uci get 返回了 /etc/dnsmasq.d 的。实际重启路由器后,/var/etc/dnsmasq.conf, /etc/dnsmasq.conf 里都没有添加一行包含 /etc/dnsmasq.d 的配置。还不如直接修改 /etc/dnsmasq.conf ,在里面添加 /etc/dnsmasq.d 配置文件夹了。

    从我测试的经验来看,ChinaDNS 根本没用,总是会误判的,直接用 dnsmasq 的 server= 配置来的直接。具体的列表,有一个 gfwlist2dnsmasq 的 python 程序可以得到最新的。只要在这个列表里的,就设法丢给国外DNS解析,以前我是在路由器上跑一个 pdnsd 的,监听在 5353 端口。现在 pdnsd 在最新的 OpenWRT 15.05 里已经没有了,只好用个 ChinaDNS 了,反正只会把国外域名的解析转发给 ChinaDNS 服务,所以 ChinaDNS 服务器的配置全是国外的域名服务器,而不是一个国内,一个国外的组合。。。。。。

    1. zeroxia 回复

      原来 gfwlist2dnsmasq 就是楼主写的……

    2. cokebar 文章作者 回复

      我在LEDE测试,通过uci添加是可以的,回头看一下CC15.05是什么情况。
      至于gfwlist2dnsmasq,回头搞个shell脚本实用性好一些。
      已经更新DNS转发链的图,可以整理以下思路

  9. Onions Wang 回复

    感谢博主…………感觉这次应该是正式彻底完全弄好了…………今天发现我的SS一个月20G的流量居然用完了……才知道之前我的设置都是错的…………心累到不行…………

    求问一下应该如何检测到底有没有做到国内走国内,国外走国外?我在百度上查我的IP依然显示我在美国……但是Youku的广告好像是正常了……

  10. Nidongde 回复

    2月2日发现chinadns_chnroute.txt无法更新! Putty执行结果如下:
    root@ilikebike:/etc# 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)) }’ > /etc/chinadns_chnroute.txt
    –2017-01-31 15:04:59– http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest
    Resolving http://ftp.apnic.net... 2001:dc0:2001:11::205, 202.12.29.205
    Connecting to http://ftp.apnic.net|2001:dc0:2001:11::205|:80… failed: Permission denied.
    Connecting to http://ftp.apnic.net|202.12.29.205|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 2442949 (2.3M) [text/plain]
    Saving to: ‘STDOUT’

    请求解疑,谢谢。

    1. cokebar 文章作者 回复

      看起来并无异常

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请输入验证码 * 请输入正确的验证码