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

方案简介
方案根据IP判断是否代理,国内IP不代理,国外IP走代理。代理通过shadowsocks所带ss-redir做TCP转发实现,分国内外IP通过国内IP段列表文件chnroute来区别,并通过iptables规则分别处理。

由于是基于IP的判定,故需要解决DNS污染的问题,本方案使用优化的DNS解析方案,除过防DNS污染,同时具有良好的CDN兼容性,大部分情况下是最优的解析结果(缺点是配置过程稍繁琐)。

本方案进一步优化,增加GFWList和Dnsmasq-China-List,使得GFWList中域名强制走代理,而Dnsmasq-China-List中的域名则强制直连,并且可以自行定义强制走代理或者不走代理的域名

本文changelog
[2020.04.01] 优化了端口附加参数部分;优化了custom bypass;添加了OpenWrt19.07可能需要额外安装luci-compat的描述文字。

[2019.05.09] 修订一些错误。

[2018.04.16] 修正部分下载链接。

[2018.04.16] 删除OpenWrt CC版本的安装说明;针对aa65535最新的静态链接编译的版本,修改安装步骤。

[2018.02.23] 部分小错误修订,细节完善(如:增加WAN口DNS设置)。

[2017.10.07] libcares代替libudns,更新安装说明。

[2017.07.22] 跟进luci-app-shadowsocks 1.7.0版本,增加负载均衡说明,修订多进程和TFO的说明。

[2017.06.05] 新增开启TCP Fast Open步骤;新增开启多进程、设置MTU的描述。新增changelog。

[2017.04.09] “附加参数”设置修订。

[2017.03.19] 修订安装步骤。

[2017.02.22] 新增gfwlist配置自动生成脚本;修订chinalist配置自动生成脚本。

[2017.02.09] 支持最新3.x版本shadowsocks-libev;新增LEDE安装说明。

[2017.01.27] 变更DNS方案,DNS部分修订完成;DNS引入dns-forwarder,引入chinalist和gfwlist,新增chinalist配置自动生成脚本。

[2016.12.9] aa65535变更包结构,包名改变;新增访问控制等大量新功能;文章根据新版本重写。

[2014.12 – 2016.11] 各种修订。

[2014-11-18] 首版发布,基于aa65535的shadowsocks-libev-spec。

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

一、安装

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

使用OpenWrt 19.07及后续版本的用户可能要安装 luci-compat 才可以正常使用 luci-app-shadowsocks 

所需软件列表

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

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

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

参照 http://openwrt-dist.sourceforge.net/ 里的说明:

首先添加 a65535 的 gpg key,只有这样,第三方的包才能通过签名验证。执行:

打开Luci,定位到“系统”-“软件包”-“配置”选项卡,在“自定义feeds”末尾加入两行并点击“提交”:

请根据自己的CPU架构(可以执行 opkg print-architecture 查看,或者参考“发行版软件源”里的URL里的文本),将mipsel_24kc替换成相应的文本,最后点击提交。

然后执行命令 opkg update 更新软件列表,然后执行下列命令安装依赖包以及shadowsocks相关的软件:


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

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

详细步骤点击展开

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

依赖列表

右边注释为该包在官方软件源目录下划分到了哪一类 方便查找

安装过程中如果出现错误提示无法解决,可以留言。

首次安装的话,先确保路由器联网,并更新软件包列表:

注:部分ISP访问OpenWrt官方站点可能会非常缓慢甚至下载失败,此时需要自行在PC上下载上面的依赖包以后自行上传至路由器目录手动安装。

首先,需要手动安装部分依赖包(并不是所有的依赖包,部分依赖包会自动从软件仓库安装)

接下来下载软件,注意需要根据自己的CPU内核架构来进行选择。可使用如下命令查看架构类型:

下载地址: http://openwrt-dist.sourceforge.net/packages/

需要下载的文件:

将下载的包通过WinSCP之类的工具上传至路由器的/tmp目录。

安装shadowsocks, ChinaDNS以及dns-forwarder:

二、shadowsocks 配置

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

I. 添加服务器

第一步先禁用LAN、WAN的ipv6,因为目前此方案的透明代理模式不支持ipv6,如果存在ipv6网络可能会有各种尴尬的问题:

LAN口设置里,将这三个改成已禁用即可:

至于禁用WAN口ipv6,如果你不需要路由器自身翻墙,则可以忽略这一步,否则:

①看看WAN6口有没有获取到IPv6地址,如果均没有跳到③,如果有跳到②;

②删掉WAN6口,保存,重连WAN口,稍等一会儿再看WAN口有没有ipv6,如果没有就完成设置了,如果有,跳到③

③修改WAN口设置,在高级设置里把获取ipv6地址改成禁用

PS:如果你想搞得彻底点,可以不管上面的步骤,直接在/etc/sysctl.conf里面添加两行:

然后执行 sysctl -p  生效,这样会在路由器上整体禁用ipv6。

 

切换到“服务器管理”选项卡,点击“添加”来增加一个服务器配置信息。你也可以同时添加多个服务器配置信息,如下图:

%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ae%a1%e7%90%861

添加一个服务器配置后,就要填写服务器配置(如下图),服务器地址、服务器端口、密码、加密方式是必须的。建议在别名中为当前配置文件起一个名字;填入信息后保存&应用。插件名称和插件参数留空,因为插件的使用不是本文的讨论范围。服务器地址需要填入IP地址。


II. 设置代理方案

接着切换到“访问控制”页面,一种配置举例如下图(不要抄图中的设置,每个人的情况不同,请参考下文的说明,根据自己情况设置!):

简单的说明一下图中配置的应用场景:

路由器多人共用,只有我使用shadowsocks,因此设置“代理类型”为“直接连接”,此时连入路由的设备访问网络时候默认直连,不走shadowsocks;而我有一台PC、一部手机、一台平板需要走代理,在“内网主机”中配置这三台设备的IP的代理类型为“正常代理”,还有一台PS4,联网游戏需要全局代理,设置他的IP(图中192.168.X.102)的代理类型为“全局代理”;还有一台下载机和一个物联网监控设备,不能让它们走代理,设置他们的IP(192.168.X.103/105)为“直接连接”。

具体使用时,需要根据自己的情况设置。多数情况设置代理类型为“正常代理”即可。具体每个选项的解释如下:

外网区域:控制访问哪些外网地址时走代理/不走代理

忽略列表文件:访问在这个列表中的IP时,不经过shadowsocks代理。这个方案使用chnroute文件作为忽略文件,只有配置了这个文件,shadowsocks才可以自动区分国内和国外IP。由于安装ChinaDNS的带有这个路由表文件,就选择“ChinaDNS路由表”。

不过这个列表需要定期更新,ChinaDNS安装时候附带的那个比较老旧了,需要更新,执行以下命令手动更新(建议ss开启时候更新,更新完后记得重启ss),请确保看到进度条走满,并检查最终的 /etc/chinadns_chnroute.txt 文件,文件中应该是每行一个CIDR。更新过程如果中断,请重试,更新前请备份之前的文件以免出问题。更新完成后,需要重启shadowsocks。

额外被忽略IP:这个列表中的IP强制绕过shadowsocks代理,如果有多shadowsocks服务器的可以将所有服务器的IP填进去,如果是单服务器不用填;其他按需添加。

强制走代理IP:这个列表中的IP强制走shadowsocks代理,填入8.8.8.8和8.8.4.4,其他按需添加。

 

内网区域:控制连入路由的设备访问网络时候的代理方式

共三种代理方式可选:

1.正常代理:使用外网区域设置的方式。

2.直接连接:忽略外网区域的设置,不走代理。

3.全局代理:忽略外网区域的设置,强制走代理。

具体到每个选项:

网络接口:shadowsocks只作用于勾选了的网络接口。默认OpenWRT/LEDE只有一个LAN区域,此处也只会显示一个接口,也就是:“桥接:br-lan”;一般情况勾选它就行。当路由配置了多个LAN区域时候,则会显示多个,比如配置了访客网络,勾选访客网络的接口就可以让shadowsocks的配置在访客网络中生效;如果你不想让访客访问网络时走代理,那么这里不勾选即可。

代理类型:连入路由的设备访问网络时,默认的代理方式。

代理自身:路由设备自身访问网络时的代理方式。使用本文方案时请选择“正常代理”或者“全局”,否则会导致DNS解析出问题,稍后我会修改方案,避免出现这种尴尬状况。

内网主机:单独配置内网特定IP的代理方式,优先级更高。需要为设备划分固定IP地址已达到最佳效果。

全部完成后,点击保存&应用。


III. 开启代理服务

最后切换到常规设置,来完成最终的配置:

运行状态:

透明代理: ss-redir的运行状态,shadowosocks代理的基础服务,提供TCP/UDP透明代理。

socks5代理:ss-local的运行状态,shadowsocks的socks5代理功能,路由器作为socks5代理服务器。

端口转发:ss-tunnel的运行状态,通常用作转发DNS。

透明代理:

主服务器:透明代理使用的默认服务器(TCP透明代理、端口转发两个功能会使用这里选择的服务器),此处从列表中选择你需要使用的服务器。

UDP服务器:UDP透明代理使用的服务器,可以和主服务器一致,也可以不同(也就是可以使用不同的服务器分别代理TCP和UDP连接)。在代理一些外服网络游戏的时候可能比较有用,其他多数情况下可以关闭。开启此项需要服务器支持,服务器端需要开启UDP功能。

本地端口:shadowsocks服务需要占用一个路由器端口,推荐保留默认,但不能和其他运行的程序有冲突,也不能和下面”socks5代理”和“端口转发”中的本地端口冲突。

更新MTU:手工指定MTU值传递给shadowsocks。通常PPPoE宽带连接为1492(也是此处默认值),网线直连以太网为1500。通过执行 ifconfig 可查看MTU值(找到wan口对应网卡设备即可)。也可以通过ping命令测试,具体步骤请超出本文讨论范围,不再叙述。

socks5代理:

有需要就开吧,不知道有用没的话就停用。

端口转发:

通常用于转发DNS请求,本文的方法未用到此功能,不用开启。如需要UDP方式的国外DNS解析,可用这个功能替换掉dns-forwarder.

最后再次保存&应用,并刷新页面,看到“运行状态”中对应的项目显示运行中即表示成功。


IV. 额外的优化

1. 避免高端口走代理

在访问控制→附加参数中选择自定义,填入 -m multiport --dports 22:1023,5228 ,这样可以避免高端口走代理(22:1023是指的代理22~1023所有的端口,后面跟的5228是google play store下载时用到的端口)。P2P类下载软件,多使用高端口,这样的设置可以避免此类软件走代理从而产生高额流量。也可以选择只代理53/80/443(至代理DNS、HTTP、HTTPS流量),或者选择无(不按端口区分走不走代理),请根据情况酌情选择。

如需代理FTP,请选择无,或者确保服务端是主动模式时代理对应的端口(通常是20和21)

你也可以自定义,其实就是iptables的额外参数,举例:

2. 开启 TCP Fast Open (TCP快速打开,缩略为TFO)

需求: 系统内核版本≥3.7,shadowsocks-libev≥3.0.4,luci-app-shadowsocks≥1.6.3;shadowsocks服务端开启tcp fast open。

修改 /etc/sysctl.conf ,加入如下一行:

执行如下命令使之生效:

然后在luci-app-shadowsocks的服务器设置中勾选TCP快速打开即可:

保存并应用即可。

2. 多服务器负载均衡

负载均衡可以使用多个服务器同时代理,使用时不同的TCP连接会分别分配到不同的服务器上,因此在多线程下载/上传时候可以做到带宽叠加提升速度。1.7.0版本加入此特性,使用方法也很简单,点击主服务器右边的加号再添加一个服务器即可,使用前请确保CPU不成为性能瓶颈,否则也只是徒增负载而已。注意使用多服务器负载均衡时, 可能会导致某些网站登录异常。

下面的描述针对使用多核心CPU的用户:

上面的配置其实是对HK2和HK1两个服务器分别开了一个进程,如果使用的是多核心CPU的路由器,建议使用多服务负载均衡,将进程数开到和CPU核心数(有超线程技术的则是和线程数)保持一致。如果不想使用多服务器负载均衡,只是想使用单一服务器,或者只有一个服务器可用,那么可以添加相同的主服务器,这样虽然对于网速没有改善,不过可以充分利用多核心的性能。

 

三、DNS配置

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

PS:DNS的调试可以使用dig

I. DNS转发链图示

完整的DNS转发链如下图所示,先在dnsmasq这一层利用China-List和GFWList进行国内和国外域名区分,不在这两个列表中的域名交给ChinaDNS来区分;区分完毕后,国内的直接通过UDP协议交给国内DNS处理,国外的则会先利用dns-forwarder转成TCP协议后,走shadowsocks代理后交给国外DNS处理。

之所以交给国外DNS查询之前要转成TCP协议,是因为实际使用时候发现,UDP方式的查询在很多ISP的网络中不稳定,会造成各种异常,甚至使得ChinaDNS卡死,而且UDP方式对于部分特殊ISP甚至完全不可用;而TCP方式较为稳定,不过会相对慢一些,但绝大数情况下不会有明显差异。因此本文默认使用TCP方式。如果你需要使用UDP方式(比如说对DNS查询延迟要求很高),那么请使用shadowsocks的端口转发(ss-tunnel)替换此处的dns-forwarder。

其他转TCP查询的方式可以参考:《TCP 方式查询解决 DNS 污染问题》

II. DNS转发链的基本配置

luci界面,“服务”→”DNS 转发”(英文界面是DNS Forwarder),如图配置:

dns-forwarder

“服务”→”ChinaDNS”,如图配置,建议修改114.114.114.114为你ISP的DNS地址(此处5311为DNS Forwarder的监听端口,需要和上面dns-forwarder设置保持一致):

chinadns

在Luci中切换至“网络”-“DHCP/DNS”设置,如下图,在”DNS转发”中填入:127.0.0.1#5353

dns

其中,5353是ChinaDNS的本地端口,需要和上面ChinaDNS设置保持一致。

然后切到HOSTS和解析文件选项卡,勾中“忽略解析文件”,否则,dnsmasq会引入WAN口自动获取的DNS,造成DNS污染。

4

另外,请记住原来的设置(如下图),免得哪天想要撤掉科学上网的时候改不回去了,注意取消勾选后下面的“解析文件”里的值需要重新填写。

problem1

 

如果你需要路由器自身也能翻,那么到这里还没结束,因为目前的DNS设置不会对路由器自身访问WAN时候的DNS请求生效,还要下面的的额外步骤:

切换到WAN口设置→高级设置,取消“

同时也请记住你修改过这里的配置,那天你想撤掉科学上网的时候记得把这个改回去。

 

至此,DNS的基本功能的配置结束,应该可以正常科学上网了,此时可以尝试一下是否成功。然而此时区分国内国外域名全靠ChinaDNS,但是ChinaDNS的判断并不一定是准确的,需要优化。“DNS转发链的优化配置”部分会加入GFWList和China-List,来优化国内国外域名的解析。

III. DNS转发链的优化配置

1. 修改dnsmasq配置:

新建目录  /etc/dnsmasq.d ,然后执行:

如果返回值为 uci: Entry not found 或者其他非  /etc/dnsmasq.d 的值,则执行:

如果需要增加缓存条数,对应需要执行:

如果返回值为 uci: Entry not found ,则执行(缓存条数酌情设置):

如果返回值是一个数字,说明设置过该选项,但如果感觉小了,运行如下命令修改该值:

然后为了正常使用下面用到的脚本,需要安装可信根证书以及curl:

2. 添加gfwlist和China-List配置文件(此部分配置和“四、按域名指定是否走代理”部分的配置二选一):

(感觉下面的步骤有难度的,或者单纯不想用自动脚本生成的,可以使用现成的配置文件来代替下面的操作,但需要进行批量替换,将China-List中的DNS改成你ISP的DNS,将GfwList中的DNS改成127.0.0.1#5311。下载地址:dnsmasq_gfwlist.confaccelerated-domains.china.conf

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

下载自动生成规则文件的脚本:

逐条执行,并重启dnsmasq(记得下面命令中114DNS换成ISP的DNS):

完成后可自行查看 /etc/dnsmasq.d/accelerated-domains.china.conf 和文件,如有不需要的域名,注释掉或者删除即可(eg: 我这里港服PS Store直连很慢,于是在列表中搜索playstation关键字,将对应行用#注释掉。如果直连不慢建议不要更改)

PS:路由性能不好的,慎用China-List。

四、按域名指定是否走代理(可选)

这一部分的配置用于替代 “三.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强制直连 自定义域名强制直连

下载并执行自动生成规则文件的脚本,并重启dnsmasq(记得命令中114DNS换成ISP的DNS):

完成后可自行查看 /etc/dnsmasq.d/accelerated-domains.china.conf 和文件,如有不需要的域名,注释掉或者删除即可(eg: 我这里港服PS Store直连很慢,于是在列表中搜索playstation关键字,将对应行用#注释掉。如果直连不慢建议不要更改)

接着可以继续添加自己的需要强制不走代理的域名,在 /etc/dnsmasq.d 目录下新建 custom_bypass.conf ,按照下列格式添加(把114替换成ISP的DNS):

建议把所有.CN域名强制不走代理,玩steam、ps等的玩家也酌情将对应的域名添加进来,相关的域名列表可以在网络上搜索获取。

一个站点很可能存在CDN,此时也要将对应CDN域名加进来,并且站点页面也可能加载了多个域名的资源,这些域名也要酌情加入进来,可以使用浏览器的开发者工具查看这些域名。

最后不要忘记重启dnsmasq:

PS:路由性能不好的,慎用这一部分的配置。

II. GFWList强制走代理 自定义域名强制走代理

下载自动生成规则文件的脚本并执行:

接着可以增加自己的强制走代理的域名,在 /etc/dnsmasq.d 目录下新建 custom_forward.conf ,按照下列格式添加(5311对应dns-forwarder端口):

一个站点很可能存在CDN,此时也要将对应CDN域名加进来,并且站点页面也可能加载了多个域名的资源,这些域名也要酌情加入进来,可以使用浏览器的开发者工具查看这些域名。

最后不要忘记重启dnsmasq:

四、其他

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

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

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

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

五、写在最后

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

2,167 条评论

  1. lantsing 回复

    aa65535
    2014-12-03 于 下午4:59
    方案6的话就是那么简单,因为不需要考虑UDP转发之类的,chinadns默认就行了,设置的东西很少。

    那么shadowVPN怎么设置?如何翻墙?

    1. cokebar 文章作者 回复

      按照GitHub上搭建好服务端,启动。openwrt上装好luci-app和shadowvpn,填上服务器IP和密码,启动就行了。ChinaDNS可以使用本篇方案一和方案三,效果基本一样

    2. cokebar 文章作者 回复

      配置方法Github里面写的很全面了

      1. lantsing 回复

        那么问题来了,哪里可以找到shadowVPN服务端的配置方法?

      1. lantsing 回复

        才疏学浅,看不懂,shadowVPN服务器是在Openwrt上搭建还是在什么机房设备上搭建?

        1. aa65535

          Openwrt 上的是客户端,如果服务端是 debian 的话有现成的 apt 源可以用,安装后修改一下 /etc/shadowvpn/server.conf 里的配置就行了。具体查看项目的 README ,很清楚。
          shadowvpn 支持 UDP 的,所以 chinadns 默认就可以了,查询 8.8.8.8 会自动经过 shadowvpn。

  2. seesaw 回复

    你好,谢谢你的文章,按照你的方法+方案一我已经可以通过路由器翻出墙外。但现在有个问题,反而是国内的网站无法打开了,不知道是哪个环节出了问题?

    1. cokebar 文章作者 回复

      是不是ISP封杀了公共DNS,用nslookup或者dig试试114DNS能用不能,如果不能,把114换成ISP的DNS

      1. seesaw 回复

        是不是这么做:“命令行输入 nslookup whether.114dns.com 114.114.114.114”?
        在哪输入命令?我是小白…

        1. seesaw

          用putty连上openwrt路由器操作吗?

        2. cokebar 文章作者

          随意啦 PC测试也行 随便输入个网址 nslookup http://www.google.com 114.114.114.114
          像我们学校就给公共DNS封了 出口网关把53端口UDP给封了

      2. seesaw 回复

        不知道这样对不对,别喷我阿:

        C:\Windows\system32>nslookup http://www.google.com
        Server: FJ-DNS.xm.fj.cn
        Address: 218.85.152.99

        Non-authoritative answer:
        Name: http://www.google.com
        Addresses: 173.194.127.145
        173.194.127.144
        173.194.127.147
        173.194.127.146
        173.194.127.148

        C:\Windows\system32>nslookup 114.114.114.114
        Server: FJ-DNS.xm.fj.cn
        Address: 218.85.152.99

        Name: public1.114dns.com
        Address: 114.114.114.114

        1. cokebar 文章作者

          额 是nslookup www.google.com 114.114.114.114 你咋给分开了
          话说这评论区蛋疼的自动加链接的功能给自动加上了http:// 真是略蛋疼
          为了防止这种情况你可以用<code> </code>标签 或者加个引号貌似也有用
          你之前发的“nslookup whether.114dns.com 114.114.114.114” 也行啊

        2. 海涛

          方案1服务器端如何操作?

      3. seesaw 回复

        这次对吗?是不是ISP封杀了公共DNS?

        C:\Windows\system32>nslookup whether.114dns.com 114.114.114.114
        Server: public1.114dns.com
        Address: 114.114.114.114

        Non-authoritative answer:
        Name: whether.114dns.com
        Address: 58.217.249.129

        1. cokebar 文章作者

          没有封杀 检查一下到底是chinadns的问题还是shadowsocks的 分别停用这两个看看国内能上不。PS:每次最好重启路由器 ,清PC的DNS缓存(ipconfig /flushdns)

  3. Grayyip 回复

    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 913/uhttpd
    tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1155/dnsmasq
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1271/dropbear
    tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN 1227/ss-redir
    tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 913/uhttpd
    tcp 0 0 :::80 :::* LISTEN 913/uhttpd
    tcp 0 0 :::53 :::* LISTEN 1155/dnsmasq
    tcp 0 0 :::22 :::* LISTEN 1271/dropbear
    tcp 0 0 :::23 :::* LISTEN 895/telnetd
    tcp 0 0 :::443 :::* LISTEN 913/uhttpd
    udp 0 0 0.0.0.0:53 0.0.0.0:* 1155/dnsmasq
    udp 0 0 0.0.0.0:67 0.0.0.0:* 1155/dnsmasq
    udp 0 0 0.0.0.0:5353 0.0.0.0:* 919/chinadns
    udp 0 0 0.0.0.0:50424 0.0.0.0:* 919/chinadns
    udp 0 0 :::546 :::* 1084/odhcp6c
    udp 0 0 :::547 :::* 854/odhcpd
    udp 0 0 :::53 :::* 1155/dnsmasq
    raw 0 0 :::58 ::%4434572:* 58 1084/odhcp6c
    raw 0 0 :::58 ::%4434572:* 58 854/odhcpd
    raw 0 0 :::58 ::%4434572:* 58 854/odhcpd

    路由这边的chinadns 貌似没有tcp 监听??

    1. cokebar 文章作者 回复

      ChinaDNS本来就是这样,只有UDP的,路由器上的转发器,UDP就足够了,TCP没啥用,还慢

      1. GrayYip 回复

        C:\Users\GrayYip>C:\Users\GrayYip\Desktop\dig\dig.exe @192.168.1.1 http://www.facebook.
        com

        ; <> DiG 9.5.1 <> @192.168.1.1 http://www.facebook.com
        ; (1 server found)
        ;; global options: printcmd
        ;; Got answer:
        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2026
        ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

        ;; QUESTION SECTION:
        ;www.facebook.com. IN A

        ;; ANSWER SECTION:
        http://www.facebook.com. 9287 IN CNAME star.c10r.facebook.com.
        star.c10r.facebook.com. 9287 IN A 31.13.70.1

        ;; Query time: 4 msec
        ;; SERVER: 192.168.1.1#53(192.168.1.1)
        ;; WHEN: Thu Dec 04 03:10:03 2014
        ;; MSG SIZE rcvd: 86

        这样DNS算是成功了吧??但还是无法连上FB。好像是解析出来,但无法连接上。

        1. cokebar 文章作者

          明显解析结果不对啊 这时污染了的IP IP跑爱尔兰了都

  4. Alex 回复

    作者你好,我看了几遍你的文章,包括之前的版本,我觉得都是描述DNS转发的设置,没有看到流量转发方面的描述,能指点一下吗?

    1. cokebar 文章作者 回复

      都说了 流量转发已经集成到shadowsocks-spec软件包里了 所以没再说明; 这里的教程主要说的是如何将shadowsocks和ChinaDNS结合起来达到更好的效果,shadowsocks-spec如何流量转发,ChinaDNS如何反DNS污染我都没有做介绍。如果有疑问请去Github上面参考ss-rules的脚本

    2. cokebar 文章作者 回复

      我这篇是说怎么去配置,怎么去用,已经集成的功能,以及原理都不会做说明,如果都说了,这文要长好几倍而且很多人看不懂(好多人并不懂TCP/IP的知识);现在这个正好,依葫芦画瓢也能搞定,说多了反而不好。

    3. cokebar 文章作者 回复

      开篇已经说明了 这个版本是通过ss-redir配合ipset/iptables规则做的转发,并且是chnroute做国内国外的区分,已经指出了,只是并没有进一步介绍,因为已经不需要额外配置了。

      1. Alex 回复

        抱歉,我没注意这个是基于shadowsocks-spec的

        1. Alex

          我以为这个还是普通的shadowsocks-libev

  5. 海涛 回复

    楼主我又来讨饶
    上一台路由器按照你方案三的设置已经可以正常上网,后来又弄了一台路由器,配置和上一台完全相同,在家中可以正常访问youtube.com,这台路由配置好后带到单位后,无法访问youtube.com,twitter.com,dropbox.com等,但是访问whatisip.me可以显示ss代理的网址,反复重启电脑和第二台路由器都无解。

    1. cokebar 文章作者 回复

      公司的网络往往会比较复杂,有些公司比较松,直接DHCP获取IP不加限制,而有些会封杀一些端口、流量;有些甚至直接代理方式上网。你要根据自己的情况排查。先排查shadowsocks能否正常使用,关闭ChinaDNS,直接使用114DNS或者从ISP获取的DNS,访问一些未被DNS污染的国外站点看是否正常;然后排查DNS问题,公司网络可能会封杀外部DNS;此时可以通过dig来排查,查看国内DNS和国外DNS的解析情况。
      PS:ChinaDNS通过chnroute来判定是国内还是国外IP,填入的DNS至少包含一个国内一个国外,10.0.0.0/8、172.16.0.0/12、192.168.0.0/16这三类私有地址,以及127.0.0.1这类保留地址也会被当成国外IP。如果你使用公司内部私有地址的DNS服务器做国内解析,请在chinadns_chnroute.txt末尾把你那DNS加进去

      1. 海涛 回复

        shadowsocks开启,chinadns关闭的话,电脑国内外网站都打不开的,但是手机打开whatisip.me显示的是国外ip,并且能打开国内网址。
        我这里是个小公司,网络什么没有专职维护的,他们应该也没那个技术做这种屏蔽的。
        另外家里是移动网络,公司是联通的,是不是和运营商也有关?

        1. cokebar 文章作者

          1、你ChinaDNS配置的DNS是什么?
          2、你ISP的DNS是什么?
          3、把114DNS替换成你ISP的DNS试试效果

        2. 海涛

          1.ChinaDNS配置的DNS是:
          虚假ip地址表:/etc/chinadns_iplist.txt
          chnroute文件:/etc/shadowsocks/ignore.list
          本地端口:5353
          上游服务器:114.114.114.114,8.8.8.8

          本地dns:202.102.224.68

          114dns换成本地的,也没有效果,还是无法登录y2b,和之前一样。

          你再帮我看看,谢谢

    2. cokebar 文章作者 回复

      额 把你和另外一个人的情况搞混了,那人是国内上不去。。 你电脑上的获取的DNS看看是不是路由的IP
      电脑上装上dig以后 dig www.youtube.com 看看结果
      推荐改成方案二

  6. 我是吃货吃吃吃 回复

    多谢楼主分享,按教程来已经成功了,请教一个问题。

    现在我有一个网站默认被路由重定向走代理了,但是这个网站的登陆只能是中国ip,,怎么添加这个例外呢?

    1. cokebar 文章作者 回复

      /etc/shadowsocks/ignore.list 末尾加上你的IP就行 比如说你的IP是222.111.222.111,末尾另起一行,加上:
      222.111.222.111/32

      1. 我是吃货吃吃吃 回复

        我是要登陆lastpass,但是我不知道具体是那个ip。。。。

        我ping了lastpass.com,显示是128.121.22.133,我直接添加到后面还是不行,是需要找到lastpass的ip段吗?

    2. cokebar 文章作者 回复

      怎么可能,我这里lastpass都用的好好的

      1. 我是吃货吃吃吃 回复

        哈哈我手抖了,重新检查了下,ip填错了,现在好了,多谢楼主解答!

    3. cokebar 文章作者 回复

      你应该是开启了登录地点保护,把你代理的所在地也加到允许列表里不就行了?我还以为是你自己站点呢

      1. 我是吃货吃吃吃 回复

        是的,我开启了登陆保护,刚才按照你说的,把那个ip添加之后重启了下,现在可以了,灰常感谢!

  7. lantsing 回复

    有没有好的ddwrt方案?

    1. cokebar 文章作者 回复

      自己编译 新的ddwrt内核是基于openwrt的 应该有很多共性

  8. zasl 回复

    po主,首先感谢你的文章使我的路由器可以翻墙了,但是现在有个问题我非常迷惑,虽然任何连接到路由器的设备可以翻了,但是如果我想在浏览器活其他软件强行设置代理来翻墙就翻不出去了,比如有个软件,国内虽然可以上去,但是因为ip限制,某些功能无法使用,我就想让这个软件设置为路由器的代理翻过去,这个时候就不行,包括浏览器也是这样,设置为直接连接都可以出去,但是指定代理就不行。

    1. cokebar 文章作者 回复

      shadowsocks服务器是直连的所以即使你电脑再开个shadowsocks也不影响。如果你要连其他的服务器就不一定了,相当于二级代理了,如果两个代理服务器之间能连,那么没有问题。
      不知道你用的什么软件。像steam这种,此方法是无效的,因为此方法只是转发了TCP。如果想要steam跨区,需要VPN

      1. zasl 回复

        不是steam,是Spotify,这个软件有个限制就是,如果超过14天都使用的是注册时以外国家的ip地址,就需要重新激活,有点麻烦,我看到很多人都设置为路由器不是自动代理,路由器只要安装ss,浏览器和其他软件设置代理scoks5就可以了,电脑端不用安装软件,虽然我电脑端有软件可以解决,但是这样还是比较麻烦。现在问题是浏览器直接设置代理都无法上网。。。除非什么代理都不设置就可以。。。

        1. cokebar 文章作者

          那个是路由器只运行ss-local了 那就没啥意思了 还是需要PC端配置socks5代理 手机端更是还要装socks5客户端 我这个方法就是追求全自动 连接的设备无需做任何配置 浏览器无需任何插件 不明白你为啥要在浏览器上配置socks5代理。
          此方案spotify应该是会连接国外服务器的 也会走代理

        2. cokebar 文章作者

          关键是你现在用的代理和你之前注册时候IP是不是一个国家

      2. zasl 回复

        是的,我明白全自动的好处,而且我也非常喜欢,我浏览器设置也只是为了这个软件来测试代理功能是否正常,因为看到你的教程说的是国内能连接的自动连接,只有被墙的才会去自动翻,因为这个软件国内可以正常连接,问题就在于因为有了ip的限制,在一定时间后要求激活。所以我想让这个软件强行代理走。另外怎么知道这个软件是走的代理呢?

        1. cokebar 文章作者

          方案是通过IP判断的 不是被墙的翻 是国外的一律翻 spotify没有国内服务器的吧。。 肯定走的代理

        2. zasl

          我的还是美国的,没错的,不行就这样吧,影响不是太大,大不了就是电脑上的客户端就常开好了。现在有新问题了。鉴于现在的风声,灵魂出国的方式还是需要多样一些,所以我还在安装这灯笼这个软件,现在灯笼登陆的时候不是我电脑本事的地址了,是ss登陆到灯笼的,如果哪天我的ss被封了,灯笼也无法用了,请问怎么解决呢?

      3. zasl 回复

        是一个国家的,我就是用我的ss代理来注册的。注册前没有在路由器上安装ss,就是在电脑的ff上用ss注册的。别说国家,连ip都一样,哈哈哈:)

      4. zasl 回复

        现在就是不知道spotify有没有国内服务器,这个软件在香港和台湾都有服务器的。

        1. cokebar 文章作者

          spotify应该是没有国内服务器的,这点基本可以肯定。
          如果代理服务器是你自己管理的,你可以试试部署一个ShadowVPN,aa65535的github里面也有shadowvpn for openwrt以及luci-app-shadowvpn

      5. zasl 回复

        如果实在不行,我电脑上还是需要安装ss客户端,让软件强行走电脑的ss代理,但是这样我觉得还是有点麻烦,所以想知道现在这种情况有没有办法让路由器的ss可以在浏览器或者软件里面设置代理走,自动翻墙还是需要的,只是有特殊情况下强行走代理?

        1. cokebar 文章作者

          你可以用网页登陆看看显示你的位置是哪里?我的spotify不知为啥跑荷兰了。。坑爹啊 spotify的识别可能有问题 自己去确认一下自己现在的国家到底是哪个

        2. cokebar 文章作者

          如果contry确实没问题,那么可能是软件自身用了UDP连接来检测客户端IP位置,而ss-redir不转发UDP,所以代理失效。此时需要用ss-local,要么PC客户端(其实一点都不麻烦,shadowsocks-gui配置好了以后开机启动就行了,资源占用非常小) 要么去shadowsocks-libev原版(非spec版)里面拷贝ss-local出来放在路由器里执行 具体步骤就不是本篇讨论的范围了 如果有Linux基础应该很简单

      6. zasl 回复

        唉,linux白痴的说,还是淘宝买的搬瓦工的服务器,卖家直接给安装好的ss。。。。装vpn。。。。555555555

        1. cokebar 文章作者

          总结的说,如果你想换用其它方式的代理/VPN,如果那个代理/VPN服务器就是你shadowsocks那个服务器,可以不关路由的shadowsocks,否则最好关掉

    2. aa65535 回复

      将那个 IP 的 CIDR 段从 /etc/shadowsocks/ignore.list 去掉就行了。

      1. zasl 回复

        大神你好!你说的cidr段是这个软件连接的服务器地址吗?应该如何查找这个段呢?

        1. aa65535

          就是要走代理的 IP ,然后在 ignore.list 里去找相近的(前两三段相同) 。

        2. aa65535

          或者使用下面这个命令(注意 IP 和端口换成自己的)
          iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 -j REDIRECT --to-ports 1080

      2. cokebar 文章作者 回复

        我试了开网页是会走代理的,服务器的IP也确实是国外IP。应该是客户端的原因 就像steam客户端即使开了ss-redir也会认为你是大陆 但是浏览器访问就显示你是代理的位置。

    3. cokebar 文章作者 回复

      代理最好别叠加使用,用其他代理时候,把这个关掉。这个方式有个麻烦的地方 就是虽然自动很方便,但是一旦你想换方式,就得进路由界面关掉,稍微有些繁琐,没办法。进路由把shadowsocks的启用勾掉点保存就应该会关掉了,chinadns可以留着(前提是你没用方案二)

      1. zasl 回复

        果然是这样,看来只能这样了。需要时常手动更新软件了。不过这样也好,减轻了电脑的压力,哈哈哈哈。不过方案忘记了,。。到时候不行就都关闭了应该就可以了吧?

  9. jackwtf 回复

    楼主,你好,按照你的方法安装SS插件,为什么des-cfb加密方式无法运行啊,另外个账号的aes-256-cfb加密方式就可以运行。

    1. cokebar 文章作者 回复

      polarssl不支持des-cfb

  10. chintj 回复

    楼主,我按照你的方法可是翻墙,但是ip.cn显示ss地址,上pt也是,估计是全翻,可能ignore.list没内容。这个还可以手动加,但是为什么我电脑连wifi可以上网,但是手机平板连wifi就不能上网呢?还有就是我把ChinaDNS的chnroute改成/etc/shadowsocks/ignore.list,重启后ignore.list被清空了,0kb,导致chinadns不能启动,是怎么回事,是因为我关ss的原因吗?

    1. cokebar 文章作者 回复

      可能是ROM的问题

发表回复

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

请输入验证码 *