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

转载 Mar 13, 2020

转载自印象笔记

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 似乎更好,不过我觉得现在的配置方式够用了,就不再折腾啦。

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
您的支持将鼓励我们继续创作!

Who Am I STEM Club

博罗中学 WAI 科技社官方账号

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.