树莓派zero2W的科学上网方案以及优化
树莓派上的科学上网
树莓派上不论是raspbian的安装/更新,还是conda/pip的安装/更新,都因为科学原因不太稳定,因此可以先准备科学安装/更新环境。
1 系统安装及配置(废弃)
1.1 换国内镜像源
解决升级慢或 Cannot initiate the connection to mirrors.opencas.cn 问题(ps.使用 nano 是因为用 vi 会有 bug 输入很麻烦):
1 | sudo nano /etc/apt/sources.list |
修改 sources.list,注释第一行,在最后添加国内镜像站:
1 | deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main non-free contrib |
同样的:
1 | sudo nano /etc/apt/sources.list.d/raspi.list |
修改 raspi.list,注释第一行,在最后添加:
1 | deb http://mirrors.aliyun.com/raspbian/raspbian/ stretch main ui |
也可以使用其他镜像站,比如:
1 | # 中国科学技术大学 |
固件升级,谨慎操作,可能会踩到奇怪的编译坑:
1 | sudo rpi-update && sudo reboot -h now |
软件包升级:
1 | sudo apt-get update && time sudo apt-get upgrade && time sudo apt-get dist-upgrade |
软件包清理,顺便装个 vim:
1 | sudo apt-get clean |
解决树莓派的 locale 警告:
1 | sudo dpkg-reconfigure locales |
选择生成 en_GB.UTF-8、en_US.UTF-8、zh_CN.UTF-8。
为空项设置值:
1 | sudo update-locale LANGUAGE="en_GB.UTF-8" |
2 搭建科学工具(废弃)
2.1 安装 SS
安装 shadowsocks 命令行客户端:
1 | pip install shadowsocks |
后续:因为树莓派无法安装 python3,遂放弃,转而使用 electron-ssr,但因为作者已经删除了这个项目,所以找了当时备份下来的版本。
electron-ssr-backup(失败,弃用,内核不支持)
现在,让我们重新回到步骤2上,开始修改步骤2。
2.1 使用 虚拟环境 安装 Python 包
我创建了一个虚拟环境,然后在其中安装 Shadowsocks。这种方式不会影响系统的全局 Python 环境。
- 创建一个虚拟环境:
1 | python3 -m venv shadowsocks-venv |
- 激活虚拟环境:
1 | source shadowsocks-venv/bin/activate |
在虚拟环境中,你会看到命令行提示符变成 (shadowsocks-venv),这意味着你已经进入了虚拟环境。
- 安装 Shadowsocks:
1 | pip install shadowsocks |
结果这些都不行。
3 真正的解决方法?(建议看完~不然你会后悔)
在经历了6小时的折磨:
- twitch挂掉宝→
- 寻思能不能自动挂→
- 找到自动挂
/mnt/Twitch.Drops.Miner-aarch64.AppImage又寻思能不能扔到服务器上关电脑也能挂→ - 因为没可视化界面服务器想到了树莓派→
- 用了张新 sd 卡给树莓派刷了个带可视化界面的 linux 系统→
- 把掉宝程序弄上树莓派,自动掉宝要翻墙→
- 所有 linux 翻墙软件都不符合树莓派的内核→
- 研究半天决定用 linux 虚拟环境的 python3 进行 ss 的安装→
- ss 不支持 py3.10 后版本→
- 前面版本 py 树莓派会报错 [微笑]→
- 另寻途径决定用软路由翻墙再开放网络给树莓派连接达到直接翻墙→
- 以前手贱关了软路由无线结果无线接口直接没了→
- 找了半天,刷机要 u 盘启动,卖家已经跑路,我刷他的母牛→
- 最后想到电脑用 clash 共享端口通过同一局域网达到翻墙效果→
- 翻墙成功后发现在挂掉宝在获取 cookie 时要弹 chrome,结果树莓派性能垃圾到弹 chrome 直接爆内存(我艹啊)→
- 最后还是原方案用电脑挂
之后,我终于找到了最终的解决方案,那就是 clash verge rev。
首先,我再确定了一遍我这个树莓派 zero2w 的内核:
1 | uname -m |
输出的是:
1 | aarch64 |
这就确定了我的 树莓派 Zero 2 W 正在运行 64 位操作系统(aarch64 = ARM64)。
然后我选择的是 Clash Verge Rev v2.3.1,因为只有这个版本的 ARM64 能够下载并且是最新的,至于下载的是 GUI 版本会更占内存我已经没办法再留意了,因为我真的心态快崩了…
因为树莓派无法翻墙,所以我是本机下载完后用 xftp 8 传输到树莓派的。
然后 cd 到目录下:
1 | sudo apt install ./Clash.Verge_2.3.1_arm64.deb |
这条命令会自动处理依赖关系,并安装软件。
完成后在 VNC 里直接点击打开:

配置成功后点击 system proxy 按钮即可成功翻墙(不容易)
期间,因为考虑到 zero2w 内存比较小,所以调整了一下 swap 分区由 512MB 调整为 1G:
1 | sudo nano /etc/dphys-swapfile |
树莓派默认的 Swap 参数为 100M,将 CONF_SWAPSIZE=100 改为:
1 | CONF_SWAPSIZE=1024 |
Ctrl + O 修改,然后 Ctrl + X 退出。
接着重启 swapfile 服务来让他生效:
1 | sudo /etc/init.d/dphys-swapfile stop |
也可以直接使用 systemctl 命令来重启 dphys-swapfile 服务(其实最后我都是直接死机然后断电重启的= =):
1 | sudo systemctl restart dphys-swapfile |
接着用 free 命令来查看 swap 交换文件大小是否改变生效:
1 | free -m |
此时看到的内存及 swap 信息如下:
1 | total used free shared buff/cache available |
但还是卡到生活无法自拔,遂还是放弃(别打我,但也还是能作为vnc桌面端的vpn)。
ps. 如果设置了开机自启 clash verge,记得使用 ls ~/.config/autostart/ 查看桌面环境、图形界面的开机自启程序,然后删掉:
1 | rm ~/.config/autostart/'Clash Verge.desktop' |
4 真正的解决方法(这是真的!没有欺骗了!)
突然发现了这个项目: https://github.com/wnlen/clash-for-linux
使用的是 Clash 内核 + WebUI(yacd),没有 Electron GUI,占用内存少,更适合树莓派 zero2w 这种辣鸡设备(
⚙️ 使用步骤(针对树莓派 Zero 2 W)
- 下载项目
1 | git clone https://github.com/wnlen/clash-for-linux.git #这里我选择的是下载完后用xftp 8传到里面直接使用 |
- 配置环境变量
1 | sudo nano .env |
- 修改
CLASH_URL为你的 Clash 订阅地址 CLASH_SECRET可留空,脚本会自动生成
- 启动服务
1 | sudo bash start.sh |
输出示例:
1 | Clash Dashboard 访问地址:http://<ip>:9090/ui |
- 加载环境变量 / 开启系统代理
1 | source /etc/profile.d/clash.sh |
- 登陆网页 http://<树莓派ip>:9090/ui
- 在 API Base URL 一栏中输入:
http://<ip>:9090 - 在 Secret(optional) 一栏中输入启动成功后输出的 Secret
- 点击 Add 并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置

- 重启 / 停止服务(可选)
1 | # 重启 |
很简单,也很快,以至于我有点不敢相信

然而,不出意外的话意外出现了,我配置好的订阅链接他显示已经加载成功却一条都没有(开始头疼了),于是我开始排查。
最后发现是我订阅链接出问题了导致无法使用,于是我重新创建了 .env,替换了原来的链接,重新 sudo bash start.sh,结果终于可以了。

最后使用 wget www.google.com 命令进行测试,至于为什么不使用 ping 命令,那是因为 ping 走网络层 icmp 协议,普通模式下不会给你代理这个报文。

这样便是成功,至此,我们终于成功让这个小歇佬 zero2w 成功翻墙了(撒花庆祝~)。
后续优化
因为我的自动掉宝需要登录浏览器获取账号token,但是zero2w这小赤佬内存少到根本跑不动chrome或者firefox,而之前的swap增加临时分区不知道为什么到2G就无法继续增加。

就算打开了也卡死……
所以我找到这位大佬的csdn blog-利用zram-swap使树莓派ZERO 2W性能提升,打算通过zram-swap来改善内存性能问题。
由于我们已经翻墙成功了,所以不需要像他里面写的本地移植,按照zram-swap官方文档方案安装即可
1
2git clone https://github.com/foundObjects/zram-swap.git
cd zram-swap && sudo ./install.sh安装脚本会在安装完成后自动启动 zram-swap.service,并在启动过程中启用 systemd 服务。默认分配会创建一个 lz4 格式的 zram 设备,当内存完全填满时,该设备应该会占用大约一半的物理内存。
1
2
3
4
5
6
7sudo cat /proc/swaps
##查看是否安装成功
##如果正常的话就会出现
Filename Type Size Used Priority
/var/swap file 2097148 171408 -2
/dev/zram0 partition 533548 0 15把spaw分区改大一点,我改成6G。
1
2
3
4
5sudo nano /etc/default/zram-swap
#找得这条并取消注释,改成6G
_zram_fixedsize="6G"
#保存后重新启动zram-swap
sudo systemctl restart zram-swap.service使用
swapon --show或者sudo cat /proc/swaps命令查看是否修改成功。1
2
3
4wlf@raspberrypi:~/zram-swap $ swapon --show
NAME TYPE SIZE USED PRIO
/var/swap file 2G 221.6M -2
/dev/zram0 partition 6G 0B 15现在,像博客里所说的,启动chrome应该快很多了吧。。。。。。个屁,辣鸡zero2w给我吃屁去吧!
至此,完整的心路历程出来了
twitch挂掉宝→
寻思能不能自动挂→
找到自动挂
/mnt/Twitch.Drops.Miner-aarch64.AppImage又寻思能不能扔到服务器上关电脑也能挂→因为没可视化界面服务器想到了树莓派→
用了张新 sd 卡给树莓派刷了个带可视化界面的 linux 系统→
把掉宝程序弄上树莓派,自动掉宝要翻墙→
所有 linux 翻墙软件都不符合树莓派的内核→
研究半天决定用 linux 虚拟环境的 python3 进行 ss 的安装→
ss 不支持 py3.10 后版本→
前面版本 py 树莓派会报错 [微笑]→
另寻途径决定用软路由翻墙再开放网络给树莓派连接达到直接翻墙→
以前手贱关了软路由无线结果无线接口直接没了→
找了半天,刷机要 u 盘启动,卖家已经跑路,我刷他的母牛→
最后想到电脑用 clash 共享端口通过同一局域网达到翻墙效果→
翻墙成功后发现在挂掉宝在获取 cookie 时要弹 chrome,结果树莓派性能垃圾到弹 chrome 直接爆内存(我艹啊)→
最后还是原方案用电脑挂→
又不服气,找到了clash verge,开始尝试→
clash verge规则不匹配原clash,开始手动修改规则并且使用自搭的短链接文本发布后导入→
发现树莓派zero2w的内存和性能太垃圾,无法跑动clash verge这种gui桌面端应用→
找到了内核级应用clash-for-linux,终于成功跑动并且成功翻墙→
结果尝试掉宝软件时,发现内存太少浏览器弹不出→
开始优化系统和内存调配,使用zarm-swap进行调配→
各种优化后发现,该打不开的chrome还是打不开,该死机的还是死机,终于是心灰意冷选择放弃,折腾了这么多,唯一的收获就是这篇blog……
完结。END。愿天堂没有树莓派zero系列。阿门
