路由器实现自动翻墙

从各种 VPN 到 Goagent,再到 Shadowsocks,最后到路由器上自动翻墙,肉身在墙内,有什么办法呢 (:

自从在路由器上装了 Shadowsocks,手机电量减少速度慢了很多,翻墙速度也快了不少,其实还是得有一个好的 VPS,哈哈。实现过程做下记录:

使用了以下开源项目:

  1. https://github.com/shadowsocks/openwrt-shadowsocks
  2. https://github.com/shadowsocks/luci-app-shadowsocks
  3. https://github.com/aa65535/openwrt-chinadns
  4. https://github.com/aa65535/openwrt-dns-forwarder
  5. https://github.com/aa65535/openwrt-dist-luci

安装

找到自己的路由器型号,下载所需软件:http://openwrt-dist.sourceforge.net,可到对应的 GitHub 项目下载。
ps: 版本可在源配置文件里看到

ChinaDNS (openwrt-chinadns)
DNS-forwarder (openwrt-dns-forwarder)
shadowsocks-libev (openwrt-shadowsocks)
luci-app-ChinaDNS
luci-app-dns-forwarder
luci-app-shadowsocks

需要手动下载的包

ChinaDNS_*.*.*-*_*_*.ipk
dns-forwarder_*.*.*-*_*_*.ipk
libudns_*.*-*_*_*.ipk
luci-app-chinadns_*.*.*-*_all.ipk
luci-app-dns-forwarder_*.*.*-*_all.ipk
luci-app-shadowsocks_*.*.*-*_all.ipk
shadowsocks-libev_*.*.*-*_*_*.ipk

这里的 LEDE 版本是 17.01.1,安装这些包会自动安装部分依赖包,还需要手动安装部分依赖包。

1
opkg install ip-full ipset iptables-mod-tproxy libev libpthread libpcre libmbedtls

上传下载的包到路由器的 /tmp 目录

1
scp ipk/* [email protected]:/tmp

安装 ipk 包

1
opkg install /tmp/*.ipk

安装完成重启路由器

1
reboot

配置

安装 ipk 包之后在 Luci 界面应该能看到「服务」选项,里面包含了「影梭」、「DNS转发」和「ChinaDNS」。

Shadowsocks 配置

进入影梭配置页面 服务 > 影梭 > 服务器管理,添加服务器,填写你的服务器信息,服务器地址、服务器端口、密码、加密方式是必须的,其他的选填。

接下来设置代理方案,进入 访问控制 页面,根据自己需求配置「外网区域」、「内网区域」和「内网主机」,不熟悉配置请参考设置代理方案一节。

最后就是开启代理服务,进入 基本设置 页面,透明代理主服务器 选项选上自己的配置,保存&应用即可完成设置,刷新页面才能看到 Shadowsocks 客户端的运行状态,应该能代理了。

DNS配置

国内域名走国内 DNS 解析,国外域名走国外 DNS 解析,进行额外的 DNS 配置从而解决 DNS 污染和优化 DNS 解析。

基本配置

Luci 界面,服务 > DNS 转发,选中「启用」。

服务 > ChinaDNS,选择「启用」,并将「上游服务器」改为 114.114.114.114,127.0.0.1#53005300DNS 转发 配置项的 监听端口

网络 > DHCP/DNS,在「DNS转发」中填入:127.0.0.1#53535353ChinaDNS 配置项的 本地端口;然后切到 HOSTS和解析文件 选项卡,选中「忽略解析文件」。

优化配置

修改 dnsmasq 配置

全靠 ChinaDNS 的判断并不一定准确。这部分加入 GFWList 和 China-List,来优化国内国外域名的解析。
新建目录 /etc/dnsmasq.d,然后执行:

1
2
3
mkdir /etc/dnsmasq.d
uci add_list [email protected][0].confdir=/etc/dnsmasq.d
uci commit dhcp
1
opkg install coreutils-base64 ca-certificates ca-bundle curl

另外,还可以配置 dnsmasq 来加速 DNS 缓存,在 /etc/dnsmasq.conf 中加入:

1
2
cache-size=10000
min-cache-ttl=1800

按域名指定是否走代理

用到 cokebargfwlist2dnsmasqopenwrt-scripts 两个脚本。
先使用dnsmasq-full替换掉原有的dnsmasq:

1
opkg remove dnsmasq && opkg install dnsmasq-full

a. China-List强制直连 自定义域名强制直连
下载并执行自动生成规则文件的脚本,并重启dnsmasq

1
2
3
curl -L -o generate_dnsmasq_chinalist.sh https://github.com/cokebar/openwrt-scripts/raw/master/generate_dnsmasq_chinalist.sh
chmod +x generate_dnsmasq_chinalist.sh
sh generate_dnsmasq_chinalist.sh -d 182.254.116.116 -p 53 -s ss_spec_dst_bp -o /etc/dnsmasq.d/accelerated-domains.china.conf

ps: 182.254.116.116DNSPod 的 DNS 解析地址

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

1
2
server=/example.com/182.254.116.116
ipset=/example.com/ss_spec_dst_bp

通常需要将 CDN 域名加进来。

重启dnsmasq

1
/etc/init.d/dnsmasq restart

b. GFWList强制走代理 自定义域名强制走代理
下载自动生成规则文件的脚本并执行:

1
2
3
curl -L -o gfwlist2dnsmasq.sh https://github.com/cokebar/gfwlist2dnsmasq/raw/master/gfwlist2dnsmasq.sh
chmod +x gfwlist2dnsmasq.sh
sh gfwlist2dnsmasq.sh -d 127.0.0.1 -p 5300 -s ss_spec_dst_fw -o /etc/dnsmasq.d/dnsmasq_gfwlist.conf

ps: 5300 是「DNS 转发」的「监听端口」,下同

接着可以增加自己的强制走代理的域名,在 /etc/dnsmasq.d 目录下新建 custom_forward.conf,按照下列格式添加:

1
2
server=/example.com/127.0.0.1#5300
ipset=/example.com/ss_spec_dst_fw

同样需要将 CDN 域名加进来。

重启dnsmasq:

1
/etc/init.d/dnsmasq restart

参考:

(完)