在PandoraBox(OpenWrt)上玩Shadowsocks的一点经验

适合的就是最好的。回家之后网络环境发生了变化,相应的上网方案也需要调整。好在我买了一个智能路由并且刷了PandoraBox,可以玩的东西很多。

我的上网思路是在PandoraBox上用shadowsocks+ChinaDNS+Dnsmasq实现对所有外国网站的代理,也就是所谓的「透明代理」。要代理所有的外国网站是因为在我这里访问外国网站速度特别慢,索性都代理了。

相关的教程网上也有很多了,我简单分享一下自己的一点经验。

shadowsocks-libev-spec的配置文件有问题

shadowsocks-libev-spec在PandoraBox的仓库里面的版本是2.2.1-1,这个版本安装后新建/etc/config/shadowsocks文件,但这个文件的内容不足以启动shadowsocks,还会报一个稀奇古怪的错误。解决方案是在上面提到的配置文件中添加一些内容,添加后的文件是这个样子的

1
2
3
4
5
6
7
8
9
10
config shadowsocks
option ignore_list '/etc/chinadns_chnroute.txt'
option tunnel_port '1153'
option tunnel_forward '8.8.8.8:53'
option lan_ac_mode '0'
option local_enable '1' # 必需,因为有相应的判断。
option redir_enable '1' # 必需,因为有相应的判断。
option tunnel_enable '1' # 必需,因为有相应的判断。
option use_conf_file '1' # 这样它就读Shadowsocks的配置文件了。

根据脚本,配置文件好像要和里面给的格式一样,我直接改过来了,没有深究不一样会不会出错。

简单解释一下原理

网上的教程不少,但大都专注于具体的操作,对原理的解释不多,我简单写写自己的理解。

  1. 上面的配置文件让Shadowsocks把8.8.8.8也就是谷歌的DNS的53端口转发到本地的1153
  2. ChinaDNS中可以配置国内DNS,它起到了混合国内DNS和谷歌DNS的功能,结果在1053端口。
  3. Dnsmasq配置为忽略其他解析只转发1053端口,让局域网内的用户可以用路由器作为DNS服务器。
  4. Shadowsocks还有一个工作是对所有的网络访问进行转发,但国内IP除外。

经过上面的流程,就实现了近乎透明的网络访问,但还是有缺陷的:

  • 所有的非国内IP都走代理,有可能带来浪费和速度上的损失,某些需要IP登录的功能失效。
  • 不能很方便的开/关和配置黑/白名单。
  • 和本地的比,我感觉不太稳定。