使用树莓派,Shadowsocks 和 Privoxy 搭建代理服务器

使用树莓派,Shadowsocks 和 Privoxy 搭建代理服务器

转载自印象笔记

Update:
  • 08-02: 使用 easylist 替换自带的广告过滤规则
  • 08-02: 启用 Polipo 做为后级缓存加速
  • Shadowsocks 原来已经有社区打包,使用方法见 Shadowsocks - Arch

自从 Google 被封杀,看到不少人被迫转向百毒或者Bing。真心讲,至少在学术领域,百毒和 Google 的检索质量就不是一个量级的。所以寻思着给实验室搭个中转代理的服务器。

学校就这点爽,网口分配的都是静态IP,手头有个长年吃灰的树莓派,正好派上用场。 因为实验室的路由器比较高级,不敢给老板玩坏了。所以我的想法就是将树莓派接在路由器的 LAN 口,然后将路由器的端口映射到树莓派上,这样就相当于树莓派有了公网 IP。

安装 Arch Linux

个人偏好 Arch ,虽然以前被坑过几次,但它的文档真是超丰富,怎么也割舍不了对它的爱,哈哈~

树莓派上安装 Arch 超简单的,见 Raspberry Pi - Installation。默认就开了 22 端口,用户名和密码都是 root ,直接 ssh 连接进去就可以配置,超方便。

使用 dd 烧写,根分区只有 2G。一般 SD 卡是大于 2G 的,浪费太可耻了。将根分区扩大到整个存储空间的方法见 How to expand Arch Linux root partition

对了,虽然官方镜像源已经足够快了,不过教育网还是中科大的镜像源更爽,几 MB/s 妥妥地。 中科大开源镜像站 Archlinux ARM 源

最后 pacman -Syu 升级,基本的系统安装就完成了。

Shadowsocks Client 端

我使用的 shadowsocks-nodejs,不过据鸟儿说测试发现并发性和 Python 版本差不了多远,不过我果然还是喜欢这个。

首先安装 nodejs 环境:pacman -S nodejs

然后根据 shadowsocks-nodejs 的说明页安装配置就可以了。

我喜欢用 nohup sslocal & 启动,因为退出 ssh 能维持后台任务,而且日志输出到 nohup.out ,查找也挺方便的。

Privoxy 配置

Shadowsocks是 socks5 代理,转成 http 代理会支持更好。 很多是推荐使用 polipo,比如说 Convert Shadowsocks into an HTTP proxy,不过我没用过。

我是照着 Privoxy - Arch Wiki 来配置的。因为树莓派要做端口映射,所以监听地址使用的 0.0.0.0。

分流

为了国内网速不受影响,我用 Privoxy 的过滤表做了分流。 具体方法是使用 autoproxy2privoxy 将 gfwlist.txt 生成 Privoxy 的规则列表 gfwlist.action,根据其说明再配置好就可以了。用 gfwlist 瞬间就消除了维护规则表的难度,挺爽的。

广告屏蔽

参照 Ad Blocking with Privoxy 这一小节,使用 privoxy - blocklist 将 easylist 条目转成相应的 action 和 filter 文件。

使用方法是:

  1. 初次运行 privoxy-blocklist.sh 生成 /etc/conf.d/privoxy-blacklist
  2. 修改 /etc/conf.d/privoxy-blacklist 配置
    • 修改 URLS 为相应规则地址,我使用的是 Easylisteasylist China
    • 去掉 PRIVOXY_USER, PRIVOXY_GROUP, PRIVOXY_CONF 前的注释
  3. 再次运行 privoxy-blocklist.sh
  4. 确认 /etc/privoxy/config 文件里有相应的 actionsfile 和 filterfile 条目,如果没有,手动添加上。
  5. 去除原生规则
    • 在 /etc/privoxy/config 里注释掉 filterfile default.filter 和 filterfile user.filter
    • 删除 /etc/privoxy/default.action 里 #Generic block pattern by hosts 以下的全部内容
  6. 重启 Privoxy 看是否成功

Polipo 缓存

根据 Polipo - Arch 的说明,在 Privoxy 后级做了缓存,据说能起到加速效果。因为代理是 Shadowsocks,所以设置采用了 Tor 那小节,其他未变。于是整个流程变为 Privoxy 分流 -> Polipo 缓存 -> Shadowsocks 代理。

路由器配置

主要是在路由器设置里做个端口映射,将树莓派曝露到公网上。这方面的设置依路由器差异而定,不过方法是大同小异,一般没太大问题。

最后

开始我使用 cow - github 来做中转代理的,非常简单,而且功能强大。可惜它的 PAC 输出的代理是本机 IP,结果树莓派就只能服务于局域网的机器,于是弃之。 另外 polipo + privoxy 似乎更好,不过我觉得现在的配置方式够用了,就不再折腾啦。