Ubuntu 26.04 下 ZgoCloud + Wstunnel + Clash Verge Rev 开机自启 VPN 配置
之前在 Windows 上一直用 ZgoCloud + wstunnel + Clash Verge Rev 的方案,用着挺稳的。最近想在 Ubuntu 26.04 上也复现一套,并且希望开机就能自动连上,不用每次手动敲命令。折腾了一下午,总算搞定了。把过程记下来,算是给自己留个笔记,万一以后重装系统也能照着来。
一、先说一下我用的组件
- VPS 服务商:ZgoCloud(已经配好了服务端的 wstunnel + WireGuard)
- 本地穿透工具:wstunnel v10.5.5(版本必须和服务端一致)
- 代理客户端:Clash Verge Rev(用它的 WireGuard 节点和分流)
- 系统:Ubuntu 26.04,笔记本是 x86_64 架构
二、安装 Clash Verge Rev
我一开始在 Ubuntu 的“软件”应用里搜“Clash”,结果出来的都不是我要的(图1)。后来去 GitHub 上看了,原来 Clash Verge Rev 只提供 .deb 和 .AppImage,没上架商店。

我下载了 Clash.Verge_2.5.1_amd64.deb(因为我电脑是 x86_64)。下载完在文件管理器里右键这个 .deb 文件,选择“打开方式” → “软件安装”(图2)。系统弹出一个安装窗口,点“安装”输密码就行了(图3)。


装完之后,应用菜单里就有了 Clash Verge Rev 的图标。
三、部署 wstunnel 客户端
wstunnel 服务端我用的版本是 v10.5.5,所以客户端也必须下这个版本,不然会连不上。去 erebe/wstunnel 下载了 wstunnel_10.5.5_linux_amd64.tar.gz。
下载后右键压缩包 → “提取到…”,我把它解压到当前目录(图4)。解压出来一个文件夹,里面只有一个 wstunnel 可执行文件。

我需要把这个 wstunnel 放到系统 PATH 里,比如 /usr/local/bin。打开文件管理器,按 Ctrl+L 输入 /usr/local/bin,发现这个目录是空的(图5)。

直接右键粘贴是灰色的,因为权限不够。我嫌图形化麻烦,直接用命令:
sudo cp /home/wangqiang/下载/wstunnel_10.5.5_linux_amd64/wstunnel /usr/local/bin/
sudo chmod +x /usr/local/bin/wstunnel
然后检查一下版本:
$ /usr/local/bin/wstunnel --version
wstunnel-cli 10.5.5
没问题(图6上半部分)。

接着我在自己的主目录下创建了一个启动脚本 ~/start-vpn.sh,内容如下(记得把服务器 IP 和域名换成自己的):
#!/bin/bash
/usr/local/bin/wstunnel client -L udp://127.0.0.1:51820:127.0.0.1:51820?timeout_sec=0 --tls-sni-override wg.shuijingwanwq.com wss://154.21.196.249:443
赋予执行权限:
chmod +x ~/start-vpn.sh
用 cat 确认一下内容(图6中间部分)。
四、实现 wstunnel 开机自启(systemd 用户服务)
我不想每次开机都手动执行 nohup ~/start-vpn.sh ...,太麻烦了。所以用 systemd 的用户服务来管理。
先创建服务文件:
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/wstunnel.service
内容如下:
[Unit]
Description=Wstunnel Client for VPN
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/home/wangqiang/start-vpn.sh
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=default.target
保存后,重新加载 systemd、启用服务并立即启动:
systemctl --user daemon-reload
systemctl --user enable wstunnel.service
systemctl --user start wstunnel.service
查看状态:
$ systemctl --user status wstunnel.service
● wstunnel.service - Wstunnel Client for VPN
Active: active (running) since ...
可以看到服务正在运行(图7)。另外检查端口监听:
$ ss -lun | grep 51820
UNCONN 0 0 127.0.0.1:51820 0.0.0.0:*
说明 UDP 端口已经起来了。

五、准备 Clash 配置文件
我在 Windows 上已经调试好了一份 ZgoCloud-VPN.yaml,里面定义了 WireGuard 节点(公钥、私钥、预共享密钥)和分流规则。直接复制到 Ubuntu 里,放在主目录下:
vi ~/ZgoCloud-VPN.yaml
把内容粘贴进去,保存。核心就是那段 type: wireguard 的代理配置。具体配置可参考:排查实录:解决Clash Verge + Wstunnel + WireGuard下“部分网站无法访问”的DNS死锁问题
六、在 Clash Verge Rev 中导入配置
打开 Clash Verge Rev 图形界面,点左侧“订阅”,然后点右上角“新建” → 选择“Local”类型(图6)。名称我填了 ZgoCloud-VPN,然后点击“选择文件”,选中 ~/ZgoCloud-VPN.yaml,保存。

导入后,在订阅列表里右键这个配置,选择“使用”。然后切换到“代理”页面,能看到 ZgoCloud-WG 这个 WireGuard 节点(图7)。

回到“首页”,打开“系统代理”开关(图8)。

这时候浏览器已经可以访问外网了(图9),网站测试通过。

七、让 Clash Verge Rev 也开机自启
在 Clash Verge Rev 的“设置” → “系统设置”里,有一个“开机自启”开关,我把它打开了(图10)。这样每次登录桌面,软件就会自动启动。

八、重启测试
设置完以上所有步骤后,我重启了电脑。重新登录桌面后:
- 检查 wstunnel 服务:
systemctl --user status wstunnel.service显示active (running),并且日志里有New UDP connection和 TLS 握手信息(图11)。 - 在 Clash Verge Rev 中测试 Google、YouTube、GitHub、Apple 四个网站,全部正常(图12)。


九、我踩过的坑
- 不要手动安装系统的 WireGuard 包。
sudo apt install wireguard是多余的,因为 Clash Verge Rev 内置的 mihomo 内核已经用用户空间实现了 WireGuard。 - wstunnel 版本必须匹配。服务端 v10.5.5,客户端也要下 v10.5.5,否则可能会协议不兼容。
- systemd 服务启动失败,报 Address in use。是因为我之前手动用
nohup跑过一个 wstunnel,占用了 51820 端口。我执行了pkill wstunnel杀掉手动进程,再启动 systemd 服务就好了。
十、现在每天的体验
开机 → 登录桌面 → 直接打开浏览器就能访问外网。wstunnel 和 Clash Verge Rev 都在后台自动运行,完全不需要我手动干预。国内网站直连,国外网站走 VPN,分流规则自动判断。速度足够看 YouTube 4K,443 端口 + TLS 伪装也一直没被墙过。
这套方案从 Windows 移植到 Ubuntu,虽然中间踩了几个小坑,但最终结果我很满意。把这个过程记录下来,万一以后需要重装系统或者换电脑,可以照着这篇文章自己再来一遍。
如果你也有类似的需求,希望我的这份记录能给你一些参考。不过每个人的网络环境和配置都不太一样,我写的只是我自己的做法,不保证完全通用。祝你折腾顺利~