ZeroNet 设置代理,解决连接问题

背景

近期,ZeroNet 又出现了连接问题。与 Tracker 的连接错误导致无法访问新站点,或者全新部署 ZeroNet 时,无法进行初始化。

开发者提出了使用 Tor meek bridges 的方法,并提供了 Windows 平台下的 Bundle 包,其中包含了 Tor 组件,用户可以在出错时,点击页面上的 Use Tor meek bridges for tracker connections 按钮,启用 Tor bridges 。

在 Linux 下,可以直接参照此文档 Frequently asked questions 中的说明,配置 Tor 与 ZeroNet 的连接。

经过测试,使用 Tor 的确很好地解决了问题。但在 Linux 下配置步骤相对较多。故想到利用已有的代理,比如 Shadowsocks、SSR,让 ZeroNet 通过这些代理进行连接。本文以在安装 Raspbian 系统的树莓派上的设置为例,说明如何操作。

方法

安装 proxychains:

sudo apt install proxychains -y

设置 proxychains :

sudo vi /etc/proxychains.conf

文件中最后部分的代理配置修改为:

socks5 127.0.0.1 1081

这里使用了树莓派上运行在 1081 端口上的 SSR 代理。

解决 proxychains 找不到库的问题(若无此问题则不必,而且 LD_PRELOAD 路径随系统不同而不同,可类推):

sudo vi /usr/bin/proxychains

LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libproxychains.so.3

配置一个 ZeroNet 的 systemd 服务,这样开机可以自动运行 ZeroNet 后台了:

mkdir -p ~/.config/systemd/user
vim ~/.config/systemd/user/zeronet.service

文件中添加内容如下:

[Unit]
Description=ZeroNet Service
After=default.target

[Service]
ExecStart=/usr/bin/proxychains /usr/bin/python /home/pi/youzeronetpath/zeronet.py --tor disable
Restart=on-abort

[Install]
WantedBy=default.target

启用服务:

systemctl --user enable zeronet
systemctl --user start zeronet

之后在浏览器访问 localhost:43110 即可。

说明:之所以使用了 --tor disable 这个参数,是因为 ZeroNet 在启动的时候会检查 Tor 服务是否可连。然而 Tor 客户端服务是监听在 localhost 上的,我们的代理并没有 bypass 本地地址,所以会导致 ZeroNet 一直处于检测状态而卡住。把 Tor 功能彻底禁用就好了。

思考

ZeroNet 原本的意义就在于使用去中心化的方法避免审查,然而也有其具体实现上的短板,当用户访问新站点时,用户如何知道这个托管这个站点的都有哪些节点呢?这往往需要固定 ip 地址上的服务来给用户“指路”,而在审查过程中,这些固定的 Tracker 就是最易被干扰的。

那么说使用代理来访问 ZeroNet 是否就失去意义了呢?我觉得不然。虽然使用了代理,但去中心化本身的优势仍旧还是存在的:比如对于一个站点,只要节点数足够,除了他的主人,任何人都没有办法摧毁或者篡改的。这点特性依旧存在,而且去中心化还免去了托管空间的诸多麻烦。

ZeroNet 仍然在不顺畅的网络环境中前进,其在部分地区面临的挑战也在逐渐帮助它增强着自身抗打击的能力。然而不得不说,其活跃程度总归有点衰减的味道。希望各位有识之士能帮助 ZeroNet 更好发展。