Shadowsocks + ChnRoute 实现 OpenWRT / LEDE 路由器自动科学上网

本站发布的三种使用 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下图形化配置,大大简化了配置过程。配置完成后,路由器本身获得自动科学上网能力,所有连入该路由的设备都可无障碍访问被墙的站点。是运行于路由器的透明代理。

方案简介
本文changelog

注:本文不再提供OpenWrt 15.05及以下版本的说明;仅支持LEDE 17.01, OpenWrt 18.06及后续版本

一、安装

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

所需软件列表

方法一: 添加作者的软件源,直接利用opkg命令安装 (此方式快捷方便,推荐!)

软件源位置:http://openwrt-dist.sourceforge.net/packages/

前提是所用网络环境直连sourceforge.net和downloads.openwrt.org没有问题。

接下来可以直接使用作者的一键脚本,执行:

此方法手动的步骤

方法二: 手动下载软件包,上传至路由器后安装

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

详细步骤点击展开
二、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,由于先卸载dnsmasq后很可能会导致后面下载dnsmasq-full包的时候无法域名解析,从而导致下载失败,因此这里使用一个取巧的办法,先尝试安装dnsmasq-full:

然后会收到错误信息(原因是文件冲突),dnsmasq-full也不会成功安装;但是不用管,因为此时dnsmasq-full的依赖包应该已经装好了。接下来到openwrt官网下载dnsmasq-full的包,举例:https://downloads.openwrt.org/releases/packages-18.06/arm_cortex-a9_vfpv3/base/dnsmasq-full_2.80-1_arm_cortex-a9_vfpv3.ipk

然后将ipk包上传到路由器/tmp目录,并执行如下命令:

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

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

需要自己搭建服务器的,可以参考:shadowsocks – libev 服务端的部署

推荐的VPS商家见:https://cokebar.info/about

本博客有关 shadowsocks 文章合集目录

五、写在最后

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

2,082 条评论

  1. 头像zqgoa01 回复

    经过测试不管用方案几,电脑端正常访问外网,移动端不能访问外网,要把 /etc/init.d/chinadns里的 -s ${server:-114.114.114.114,8.8.4.4} \这行删除就可以正常使用了,不清楚是什么原因,网页端用方案二、三都可以正常使用

    1. 头像lantsing 回复

      谢谢,原来手机不能访问是这个原因,另外,我发现opkg update也无法使用了。

    2. cokebarcokebar 文章作者 回复

      我这篇写的时候还不是这个脚本 作者更新了 我还没测试 你确定luci里面填好了?

    3. cokebarcokebar 文章作者 回复

      把这句去掉的话 chinadns会使用默认的DNS 在luci里的更改就没用了 用dig测试一下看看是什么类型的错误。还有 所有终端请清空DNS缓存,手机要开关一次飞行模式,并关闭其他任何代理程序

      1. 头像zqgoa01 回复

        是完全按你教程来的,软件包也是最新的,还按你的另一篇教程安装了pdnsd,还是移动端不能访问,后来想起以前老的教程是删除那行可以移动端访问,新教程测试好久无解,试着删除那行果然可以正常访问,后来用别人的ip账号测试不用删除那行可以正常访问,可见你的教程没问题,问题出在ss账号,我的ss账号是域名自己转为ip地址来用的,可能如果是域名账号按你的教程只能电脑端用,如果想移动端使用必须删除那行

        1. cokebarcokebar 文章作者

          好吧原来又是域名的问题;用域名会带来各种问题,在路由刚启动时候,shadowsocks运行起来时候,WAN口还不一定已经连通了,此时即时ss-rules脚本里已经写了用114DNS做解析的过程依然会解析失败(因为网都不通怎么解析),如此一来shadowsocks就会无法正常连接。

        2. cokebarcokebar 文章作者

          而你的情况稍加分析就明白是为什么了,还不是因为WAN口网络未通。你去掉那一行以后,chinadns就无法读入luci里的配置了,会按照默认的114DNS和Google DNS来解析,此时可以通畅证明chinadns没有问题,shadowsocks也没有问题;但是加上就不行了,可以看出你的参数有问题,导致chinadns失效;你在路由器配置了pdnsd,很有可能是pdnsd没有正常工作所致;PC端能访问往往是因为dns缓存还在。顺道你也看看移动设备是否正常获取了DNS服务器(你的路由IP)

    4. 头像aa65535 回复

      这个是设置默认 server 值来的,你删除后使用的是 chinadns 内置的上游服务器 “114.114.114.114,8.8.8.8,208.67.222.222:443,208.67.222.222″,所以你需要确认自己填写的 chinadns 上游服务器是可用的,如果填写的不对自然不能解析。

    1. cokebarcokebar 文章作者 回复

      下官方版本 正式版是BB12.07

  2. 头像mervynsword 回复

    感谢,另请教下,作为小白,不知道基于OpenWRT的华硕路由器官方固件是否支持?还有就是,虽然我现在是自购VPS搭建的SS代理,但是因为不是很懂技术,所以使用的是clowwindy在Linode上做好的一键搭建,完全不知道是否已经包含了DNS服务器组件,但是访问U2B什么的都是把我认成在日本的,求指点怎么确认啊?

    1. cokebarcokebar 文章作者 回复

      使用浏览器插件(SwitchySharp)做socks5代理的方式的话 是全部UDP、TCP流量都转发 包括DNS请求会全走shadowsocks。手机端的话需要开启UDP转发功能。
      U2B是否把你认成日本的和你是否优化了DNS解析没关系;你源IP在日本所以U2B给你认到日本了,服务器你并不一定连得是离日本近的服务器。典型的你可以试试facebook。
      还有就是即时有些厂商的路由器产品是基于OpenWRT的,你也请刷到OpenWRT原版。厂商不免对其有所定制,往往会替换掉Luci,导致前面提到的两个Luci-app无法显示出来,只能手动用shell配置

      1. 头像mervynsword 回复

        就没有别的办法查看么?比方说服务器端用PS -EF命令是否能查看到对应的进程?

    2. cokebarcokebar 文章作者 回复

      如果是ss提供的一键搭建的话 肯定是没有DNS服务器的。你用客户端的DNS解析都是通过ss转发了而已相当于方案二

    3. 头像aa65535 回复

      python 版默认可以使用UDP转发功能。

  3. 头像TwoBall 回复

    OpenWrt PandoraBox 12.09.1 版本 ShadowSocks 未运行一直不能运行。求解决办法,有没有手动运行的命令

    1. cokebarcokebar 文章作者 回复

      请刷官方原版OpenWRT Barrier Breaker 12.07正式版,不要用unofficial及trunk版

      1. 头像TwoBall 回复

        可是我的小米mini没有对应的固件啊,我怕变砖的说。附上手动/etc/init.d/shadowsocks start 错误代码
        ipset v6.11: Error in line 1: Cannot open session to kernel.
        iptables-restore v1.4.10: unknown option --to-ports'
        Error occurred at line: 4925
        Try
        iptables-restore -h’ or ‘iptables-restore –help’ for more information.
        有没有其他办法大神。

        1. 头像aa65535

          iptables 模块缺失,需要安装 kmod-ipt-nat ,这个有内核依赖。

    1. cokebarcokebar 文章作者 回复

      额 那是aa65535 原作者写的啊喂! 那个相当于我这里的方案二。 不过别改chinadns的启动脚本,会造成luci界面的配置完全失效的,因为那个方式是之前没写出luci界面之前的方式。现在还是老老实实图形界面比较好

      1. 头像lantsing 回复

        这个我明白,图形界面和改脚本不能共存,只能选其一,推荐图形界面。还有,楼主,请问ShadowVPN又怎么用?就是aa65535的方案6,太简单看不明。最后,我找到了无法更新软件包的方法,就是putty下运行rm /etc/resolv.conf和ln -s /tmp/resolv.conf.auto /etc/resolv.conf,重置一下LuCI的OPKG-配置就可以。新手刚玩OpenWRT两三天,就知道这么点。

        1. 头像aa65535

          方案6的话就是那么简单,因为不需要考虑UDP转发之类的,chinadns默认就行了,设置的东西很少。

      2. 头像lantsing 回复

        还有,更新chnroute,可以使用下面的命令而不需要libcurl和curl两个包: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/shadowsocks/ignore.list

  4. 头像disconnect 回复

    我的chinadns工作了1天半之后就起不来了,ssh到路由器去手工启动的话,提示我找不到iplist.txt。。。我只好删掉了chinadns,现在好了原来的dnsmasq的工作也不正常了,如果不填入dns转发ip的话,完全就没法工作,我只好在dns转发地址这里填入114.114.114.114来维持工作

    1. cokebarcokebar 文章作者 回复

      因为前面的步骤忽略解析文件会让dnsmasq忽略dhcp获得来的dns,也就是强制不使用isp的dns
      重装一下chinadns吧

    2. cokebarcokebar 文章作者 回复

      你肯定是按照上面的步骤删除了chinadns_chnroute.txt ,然后去做ignore.list的符号链接 但是没做好

  5. 头像wangsmile 回复

    我重新安装BB了,不过出现问题,无法翻WALL。

    PC机上tracert http://www.youtube.com 出现无法解析目标系统名称,如果tracert http://www.sina.com.cn则成功。

    我进whatismyip.com 看是我VPS的IP。
    chinadns的上游服务器是我VPS上安装的DNS服务器IP。但打开外网站还是不行。

    按你说的一级一级排查:

    先检查dnsmasq这一级:dig @192.168.1.1 http://www.youtube.com 失败。

    再dig @192.168.1.1 -p 5353 http://www.youtube.com 成功。

    怎么是dnsmasq的问题?如何解决?

    1. cokebarcokebar 文章作者 回复

      shadowsocks的udp转发关了么? chinadns端口是5353的话 dnsmasq里面填入127.0.0.1#5353了么 还有检查之前先重启dnsmasq PC机上先ipconfig /flushdns

      1. 头像wangsmile 回复

        SS的UDP转发没勾的。CHINADNS本地端口5353,然后dnsmasq里是输入:127.0.0.1#5353。好奇怪。早上我拿路由器放单位去了,也是这样情况。

        我看dnsmasq 里的高级设置 好多是灰色假值的。

        您判断哪些服务是成功的,哪些是可疑可能失败的呢?

        1. cokebarcokebar 文章作者

          你是不是之前按我那篇pdnsd调了,如果不用pdnsd,dnsmasq端口记得改回53,LAN口配置那条6,192.168.1.1也给去掉。如果用pdnsd 那么dnsmasq下的配置就是无效的 改pdnsd

        2. 头像wangsmile

          您这贴子的域名好像今天抽风,经常打不开。

          我只在VPS上安装了PDNSD,但我没有在OPENWRT上安装pdnsd。

          我发现原因了,原来这个固件的本来已经存在的dnsmasq.conf的这个文件,符号链接到了/etc/dnsmasq.d

          而dnsmasq.d目录下的gfw.conf内容竟然是:

          #Google and Youtube

          server=/.google.com/127.0.0.1#1053

          server=/.google.com.hk/127.0.0.1#1053

          server=/.gstatic.com/127.0.0.1#1053

          server=/.ggpht.com/127.0.0.1#1053
          .
          .
          .

          按说应该是5353吧,但LUCI图形界面好像改不了这个文件的内容。
          我就把dnsmasq.conf里的那条符号链接注释了,就全好了。。。感谢!

          另外上次发现ss如果用域名的话,有时候进程会down…现在都改用IP了。

        3. cokebarcokebar 文章作者

          我这里访问没有问题,应该是你的网络问题,或者是你访问时候我正在改wordpress代码(今天加了分页页码显示) 下次我如果改代码调试时候会先关闭站点的以免蛋疼。
          总之整好了就行

  6. 头像lantsing 回复

    wlan设备无法翻墙怎么处理?莫非真的只能改/etc/init.d/chinadns

    1. cokebarcokebar 文章作者 回复

      不要用域名

  7. 头像nero 回复

    我在ChinaDNS-C里填的
    上游DNS服务器是114.114.114.114,8.8.8.8
    端口是5353

    然后DHCP/DNS那里也改127.0.0.1#5353了

    运行SS以后youtube和facebook上不去。谷歌能开 也能搜索。

    另外我的固件里的SS没有UDP转发这一个选项的。请问是不是这个原因导致的,我的路由器是网件4300,也是ar71xx系列。如果是这个ss缘故,还请博主给个可用的SS版本。
    万分感谢

    1. cokebarcokebar 文章作者 回复

      1. 头像nero 回复

        我在linode上dig出这个IP 74.125.235.100

        然后添加到哪里呢。

        1. cokebarcokebar 文章作者

          在PC机上dig检查,分别
          dig www.youtube.comdig @192.168.1.1 -p 5353 www.youtube.com

    2. cokebarcokebar 文章作者 回复

      粘贴这种文本请用code标签。
      看不到你不加-p 5353的结果。另外,flushdns,重启浏览器也是需要的。也要确保PC机的DNS是路由器

      1. 头像nero 回复

        博主 这个回复框没有html标签可以用啊 我弄到网盘里可以在线预览的麻烦你看下了http://pan.baidu.com/s/1eQJ52L0

        THX

  8. 头像wangsmile 回复

    楼主,另外请教个问题,上次您说ipset的工作效率好,有的固件没有安装ipset,自动就转为iptables工作了。
    那都安装的话,如何判断是ipset在工作而不是iptables呢?

    1. cokebarcokebar 文章作者 回复

      有ipset优先ipset。运行ipset list应该可以看到很长的chnroute的IP列表,而iptables –list的输出则没有这个列表

发表评论

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

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