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

本站发布的三种shadowsocks在openwrt上的自动翻墙方案:

1、Shadowsocks + ChnRoute 实现 OpenWRT 路由器自动翻墙
2、Shadowsocks + Redsocks 实现 OpenWRT 路由器自动翻墙
3、Shadowsocks + GfwList 实现 OpenWRT 路由器自动翻墙

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

方案简介

写在前面:基于luci-app-shadowsocks v1.4.0版本撰写。目前的版本不带spec字眼,如果是从spec版本更新至此版本,需先卸载之前的spec版本,并删除配置文件(/etc/config/shadowsocks)后,再安装此版本。

一、安装

所需软件列表:

详细安装步骤点击展开

 

二、shadowsocks 配置

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

详细配置步骤点击展开

 

二、DNS配置

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

(新版本的DNS配置部分未编写完毕,我将利用零散时间逐渐更新完毕,可先参考老版本以及《OpenWRT 自动翻墙路由器 DNS 解析的改善》

I. 组建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和解析文件选项卡,勾中“忽略解析文件”

4

自此,基本的DNS转发链建立完备,应该可以正常科学上网了,此时可以尝试一下是否成功。

然而此时区分国内国外域名全靠ChinaDNS,但是ChinaDNS的判断并不一定是准确的。而且此时需要进一步的优化。

II. DNS解析的优化

修改 /etc/dnsmasq.conf  ,在最后加入  conf-dir=/etc/dnsmasq.d ,新建并进入目录  /etc/dnsmasq.d ,下载 accelerated-domains.china.conf 和 foreign_list.conf 两个文件后复制两个文件到  /etc/dnsmasq.d 目录。(后期会更新为自动生成的脚本,可以根据最新列表自动生成,也方便做成计划任务,目前先用这两个生成好的文件)

分别修改两个文件,利用批量替换功能修改:

accelerated-domains.china.conf 文件中所有的的114.114.114.114修改为自己ISP的DNS或者其他效果更好的国内DNS的IP地址(也可以保留114DNS),格式为:

foreign_list.conf (GFWList)文件中所有的 127.0.0.1#5300 修改为:

(具体为什么这么改,可以参看:《OpenWRT 自动翻墙路由器 DNS 解析的改善》

最后重启dnsmasq服务:  /etc/init.d/dnsmasq restart


三、按域名指定是否走代理

待续。。。

1,323 条评论

  1. 引用: 利用 shadowsocks 实现 OpenWRT 路由器的自动翻墙(已过期)

  2. zfc 回复

    按照此教程做完,还是显示shadowsocks没有运行,怎么排查问题?

    1. cokebarcokebar 文章作者 回复

      chinadns能启动么?手动执行/etc/ini.t/shadowsocks start看看输出什么
      可能是你config.json格式不对 不行你可以不使用配置文件 在luci里面填服务器信息就不用担心格式问题了

      1. wingzero8531 回复

        root@OpenWrt:/# /etc/init.d/shadowsocks start
        ipset v6.20.1: Error in line 1: Cannot open session to kernel.
        2015-08-23 09:31:48 ERROR: Invalid config path.

        配置界面启动shadowsocks 一直显示未启动

  3. zfc 回复

    chinadns可以启动,手动执行/etc/ini.t/shadowsocks start没有输出,luci里填了依然无法启动。。。

    1. cokebarcokebar 文章作者 回复

      你没发现我打错了么。。应该是/etc/init.d/shadowsocks start
      按照我上面提到的 取消“使用配置文件”的勾 在luci里面填服务器信息试试

      1. zfc 回复

        重新试了下/etc/init.d/shadowsocks start,显示:
        Usage: ss-rules [options]

        Valid options are:

        -s hostname or ip of shadowsocks remote server
        -l port number of shadowsocks local server
        -c config file of shadowsocks
        -i config file of ignore list
        -e extra options of iptables
        -f flush the rules

        1. cokebarcokebar 文章作者

          目测config.json格式有问题 逗号啥的都得注意 发出来看看

  4. zfc 回复

    {
    “server”: “100.224.131.110”,
    “server_port”: “443”,
    “password”: “123456”,
    “local_port”: “1080”,
    “method”: “aes-256-cfb”,
    }

    1. cokebarcokebar 文章作者 回复

      最后多了个逗号啊 aes-256-cfb后面 也怪我 我教程里面的失误 没删掉 现在改过来了

      1. zfc 回复

        问题找到了,应该是luci里选择使用配置文件,但是没有输入文件地址,文本框中有一个地址,其实是虚的。
        现在用What is my ip看是我的vps ip了,但google还是打不开。。。

        1. cokebarcokebar 文章作者

          Google打不开 用dig检查DNS解析结果 记得清DNS缓存 服务器、路由、电脑都要(重启或者用命令)

        2. cokebarcokebar 文章作者

          作者跑来说明了一下 确实不能留空 我已经更改教程了

  5. 花痴豆芽 回复

    二级路由也是这样设置么?

    1. aa65535 回复

      是不是二级路由都一样设置。

  6. 花痴豆芽 回复

    二级路由和一级路由是LAN-LAN相连,一级路由开启DHCP二级关闭DHCP

    1. cokebarcokebar 文章作者 回复

      那二级就相当于一个交换机而已 装到一级路由里面 二级不动

      1. 花痴豆芽 回复

        那要是WAN-LAN相连,一级网络资源二级路由怎么访问

        1. cokebarcokebar 文章作者

          你可以连下试试。我也不是很确定,不是特懂。反正不管怎么样都和一级路由关系太大了。要么就找网管让它给你分个子网网段,然后把二级路由的LAN划到子网里。
          比如说一级路由网络是10.100.101.0/24 你可以划个小网段给自己 比如说10.100.101.240/28这样 设置到二级路由的LAN上

  7. abcd92349 回复

    有针对极路由1/1s的详细图文教程吗

    1. cokebarcokebar 文章作者 回复

      极路由不是很了解 找个OpenWRT刷上再搞应该就行了 原版ROM肯定是不行 luci应该被改了 定制的 不兼容这个

  8. 肥恩 回复

    楼主,你这个方案,我有点不明白
    好像都只是解決了dns污染问題,但如果ip被封了,会走shadowsocks过吗?

    1. cokebarcokebar 文章作者 回复

      国外IP全走代理

  9. Li Yi-Fei 回复

    你们用UDP 转发 SS-TUNNEL没有socket泄露吗?有很多UDP空连接。重启就消失了。

    我现在在VPS远端架设了pdnsd(缓存比dnsmasq好),然后提供一个非标准端口给chinadns用。

    如果更讲究一点,可以在路由器这一段,chinadns dnsmasq之间也加一个pdnsd解决VPS临时挂掉的情况。同时记得关闭dnsmasq的cache。

    1. cokebarcokebar 文章作者 回复

      我没用ss-tunnel。。不是很清楚

    2. cokebarcokebar 文章作者 回复

      你可以到github发issue

    3. aa65535 回复

      只要不在配置文件里指定过大的 timeout 的话,一般是不会 socks 泄露的。

      1. Li Yi-Fei 回复

        我都设置SS-TUNNEL成了5的timeout,虽然但是还是总是有几十个 UDP socket在,关闭掉SS服务,马上降到只有十几个了。

        1. cokebarcokebar 文章作者

          我openwrt用的方案一,没开UDP转发没有这个问题,不过服务器端开启了UDP转发貌似出现了这个状况(好几个人在用),记得之前改了端口后netstat -lnp看ss端口是否正常时候,看到运行一段时间后就有大量的UDP连接

        2. cokebarcokebar 文章作者

          现在我把服务端更新到最新了,再观察一段

        3. aa65535

          几十个是正常的范围,因为这个连接不会主动去关闭,只能等待超时。

        4. Li Yi-Fei

          不是SS-TUNNEL -T 10 难道不是10秒之后,关闭这个链接吗?另外AA65535有其他联系方式吗?比如mail?单独有问题请教你

        5. aa65535

          可以 mail 联系 aa65535 at live.com
          timeout 不建议去设置它,服务端也是,目前 ss 的处理就是等待超时后自动关闭。

  10. star022843 回复

    请问楼主石像鬼固件的路由器这个教程也适用吗?

    1. cokebarcokebar 文章作者 回复

      后端应该可以,石像鬼基于OpenWRT的吧。前端图形界面luci-app可能不行,毕竟石像鬼定制过了

    2. myliyifei 回复

      可以的 我就是用的是石像鬼。但是必须后台文本模式配置。

1 2 3 4 5 42 43

发表评论

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

请输入验证码 * Time limit is exhausted. Please reload CAPTCHA.