从各种 VPN 到 Goagent,再到 Shadowsocks,最后到路由器上自动翻墙,肉身在墙内,有什么办法呢 (:
自从在路由器上装了 Shadowsocks,手机电量减少速度慢了很多,翻墙速度也快了不少,其实还是得有一个好的 VPS,哈哈。实现过程做下记录:
使用了以下开源项目:
- https://github.com/shadowsocks/openwrt-shadowsocks
- https://github.com/shadowsocks/luci-app-shadowsocks
- https://github.com/aa65535/openwrt-chinadns
- https://github.com/aa65535/openwrt-dns-forwarder
- 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#5300
,5300
是 DNS 转发
配置项的 监听端口
。
网络
> DHCP/DNS
,在「DNS转发」中填入:127.0.0.1#5353
,5353
是 ChinaDNS
配置项的 本地端口
;然后切到 HOSTS和解析文件
选项卡,选中「忽略解析文件」。
优化配置
修改 dnsmasq 配置
全靠 ChinaDNS 的判断并不一定准确。这部分加入 GFWList 和 China-List,来优化国内国外域名的解析。
新建目录 /etc/dnsmasq.d
,然后执行:
1 | mkdir /etc/dnsmasq.d |
1 | opkg install coreutils-base64 ca-certificates ca-bundle curl |
另外,还可以配置 dnsmasq 来加速 DNS 缓存,在 /etc/dnsmasq.conf
中加入:
1 | cache-size=10000 |
按域名指定是否走代理
用到 cokebar 的 gfwlist2dnsmasq 和 openwrt-scripts 两个脚本。
先使用dnsmasq-full替换掉原有的dnsmasq:
1 | opkg remove dnsmasq && opkg install dnsmasq-full |
a. China-List强制直连 自定义域名强制直连
下载并执行自动生成规则文件的脚本,并重启dnsmasq
1 | curl -L -o generate_dnsmasq_chinalist.sh https://github.com/cokebar/openwrt-scripts/raw/master/generate_dnsmasq_chinalist.sh |
ps: 182.254.116.116
是 DNSPod
的 DNS 解析地址
接着可以继续添加自己的需要强制不走代理的域名,在 /etc/dnsmasq.d 目录下新建 custom_bypass.conf ,按照下列格式添加
1 | server=/example.com/182.254.116.116 |
通常需要将 CDN 域名加进来。
重启dnsmasq
1 | /etc/init.d/dnsmasq restart |
b. GFWList强制走代理 自定义域名强制走代理
下载自动生成规则文件的脚本并执行:
1 | curl -L -o gfwlist2dnsmasq.sh https://github.com/cokebar/gfwlist2dnsmasq/raw/master/gfwlist2dnsmasq.sh |
ps: 5300
是「DNS 转发」的「监听端口」,下同
接着可以增加自己的强制走代理的域名,在 /etc/dnsmasq.d
目录下新建 custom_forward.conf
,按照下列格式添加:
1 | server=/example.com/127.0.0.1#5300 |
同样需要将 CDN 域名加进来。
重启dnsmasq:
1 | /etc/init.d/dnsmasq restart |
参考:
(完)