没有不值得去解决的问题,也没有不值得去学习的技术!

systemd 用户服务 203/EXEC 错误排查:wstunnel 自启动配置实录

关键信息是 code=exited, status=203/EXEC。这个退出码意味着 systemd 无法执行指定的程序。

自建 VPN

图15:电脑VPN连接成功截图

(1) 从 LetsVPN 停用至自建 WireGuard VPN 全流程复盘(附避坑指南)

手机端优化配置(表单字段编辑专用,仅改2个字段)如图1

(2) WireGuard VPN 配置优化:国内网站直连,国外流量走VPN(实测有效)

ChatGPT(https://chatgpt.com/)、 YouTube(https://www.youtube.com/)、 V2EX(https://v2ex.com/) 始终打不开,提示无法访问。如图1

(3) WireGuard 国内直连+国外走隧道 配置踩坑与完美解决(实测可用)

客户端无「上次握手时间」,一直处于等待连接状态。客户端显示看似连接,但实际无握手、无流量转发,接收一直为 0。

(4) WireGuard 自建 VPN 偶发不可用 全程复盘:从正常使用→突然无握手→端口被封→换端口+智能分流 完整解决流程

Speedtest 出口带宽测速,打开:https://www.speedtest.net/ 。结果如图2

(5) 从 LetsVPN 停用自建 WireGuard 后:成都移动宽带+ Vultr 新加坡节点 实测网速很慢复盘+避坑干货

2. VPS 通过 iptables 做端口段转发:20000~60000 全部UDP端口,统一转发到本机 51820; 3. Vultr 防火墙只需放行 20000~60000 端口段 ,不用逐个添加单端口规则;

(6) 自建WireGuard解决端口频繁被封终极极简方案(保姆级可复现)

洛杉矶节点:Premium、Eyeball、Tier 1 三种网络类型下所有实例均处于缺货状态,包括我能勉强接受的 LAX.AN5.Pro.TINY(Premium 网络,12.98美元/月),该节点 AN5 系列已告罄(如图6);

(7) WireGuard 握手正常但打不开网?我们为什么非要 CN2 GIA,附 DMIT 部署 & 缺货替代方案

需要确保首页 - 当前节点 - ZgoCloud-VPN 是 绿色状态(如图25)。

(8) ZgoCloud + Wstunnel + WireGuard 提速 4 倍,Clash Verge Rev 自动分流与 443 端口防封实战

不可访问:`www.google.com` 提示 `ERR_CONNECTION_CLOSED`;`chatgpt.com`、`v2ex.com` 提示 `ERR_CERT_COMMON_NAME_INVALID`(HSTS 导致的证书错误)

(9) 排查实录:解决Clash Verge + Wstunnel + WireGuard下“部分网站无法访问”的DNS死锁问题

图12:开机后网站测试全部通过

(10) Ubuntu 26.04 下 ZgoCloud + Wstunnel + Clash Verge Rev 开机自启 VPN 配置

分析:第三次测试依然稳健,上传甚至回升到了 81 Mbps。这证明了 CN2 GIA + 9929 线路在下午时段(非深夜)的优异表现。 (图7:VPN 测速 #3 详细数据截图)

(11) Ubuntu 26.04 下 自建 VPN 速度实测报告:ZgoCloud + Wstunnel + WireGuard 方案体验与对比指南

【截图位置:图17 展示了启动后的仪表盘界面】

(12) Android 下 ZgoCloud + Wstunnel + FlClash VPN 配置

📷(图1:Play 商店无法更新)

(13) 自建 WireGuard + Wstunnel 在 Android 上 Google Play 更新异常的完整排查与架构优化

[截图 5:Clash 规则片段,突出显示新增的两行 DST-PORT 规则]

(14) 自建 VPN 后 Thunderbird 无法发送 Gmail 邮件:原因与解决方法

[截图 2:Play 商店更新界面,显示两个应用正常下载]

(15) 自建 VPN 后 Play 商店应用无法更新?别折腾 Wstunnel 了,问题在 Clash 分流规则里

关键信息是 code=exited, status=203/EXEC。这个退出码意味着 systemd 无法执行指定的程序。

(16) systemd 用户服务 203/EXEC 错误排查:wstunnel 自启动配置实录

Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(一):极简原则与初版构建

(17) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(一):极简原则与初版构建

使用 Clash Verge Rev 内置的连接测试,对常用 13 个目标进行检测:

(18) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(二):Google 污染的 DNS 最小修正

你好,我按照你博客文章按流程操作了一下服务器,服务器防火墙也开了,但是手机修改端口还是没有握手提示,也上不了网,这是哪里出问题了吗?

(19) 帮客户远程排查 Vultr WireGuard 无握手无法上网问题(完整实录)

Thunderbird 无法与 imap.gmail.com 连接,请稍后再试。如果问题依然存在,则可能是您超出了此服务器允许的最大连接数量。可在IMAP服务器设置中减少缓存的连接数量。

(20) 从 Thunderbird 连接失败到换用 Gmail API 客户端的完整排查记录

查看服务器上的 client.conf(截图8)

(21) 客户 Android 下 Wstunnel + FIClash 远程排障全记录:从脚本创建到 IP 错配的坑

在 FlClash 中查看实时请求日志,所有 Play 商店相关的请求全部走代理

(22) FlClash + WireGuard + Wstunnel 稳定配置实践(三):Google Play 下载问题解决

🚀 WireGuard + Clash Verge Rev 实现国内直连 / 国外分流(Vultr & ZgoCloud 实战演进版)

(23) 🚀 WireGuard + Clash Verge Rev 实现国内直连 / 国外分流(Vultr & ZgoCloud 实战演进版)

Clash Verge 内存占用过高

(24) 🚀 Clash Verge 从 500MB 到 200MB:Ubuntu VPN 客户端轻量化优化实战

LetsVPN 已经无法继续为中国大陆用户提供 VPN 服务

(25) 自建 VPN 与商业 VPN 怎么选:从 LetsVPN 停用到 WireGuard 自建的真实迁移复盘

【截图 2:Clash Verge Rev 日志中出现 dns resolve failed】

(26) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(四):DNS 偶发超时的极简兜底修正

背景

在国内网络环境下,运营商经常对 UDP 流量进行限速或直接封锁,导致 WireGuard 等基于 UDP 的 VPN 连接不稳定甚至完全无法使用。为了解决这个问题,我使用 wstunnel 将 WireGuard 的 UDP 流量封装成 WSS(WebSocket Secure over TLS) 流量。WSS 本质上是建立在 TLS 之上的 WebSocket,端口为 443,看起来和普通的 HTTPS 流量完全一样,运营商难以识别和干扰,从而保证了 VPN 连接的稳定性。

为了方便,我写了一个启动脚本 start-vpn.sh,并使用 systemd 用户服务配置了开机自启,原本一切运行正常。

问题现象:电脑重启后 VPN 无法工作

某天电脑重启后,我发现 VPN 没有正常工作。于是检查 wstunnel 服务的状态:

systemctl --user status wstunnel.service

输出如下:

● wstunnel.service - Wstunnel Client for VPN
     Loaded: loaded (/home/wangqiang/.config/systemd/user/wstunnel.service; enabled)
     Active: activating (auto-restart) (Result: exit-code) since ...
    Process: 12780 ExecStart=/home/wangqiang/start-vpn.sh (code=exited, status=203/EXEC)
   Main PID: 12780 (code=exited, status=203/EXEC)
关键信息是 code=exited, status=203/EXEC。这个退出码意味着 systemd 无法执行指定的程序。

关键信息是 code=exited, status=203/EXEC。这个退出码意味着 systemd 无法执行指定的程序。

排查 203/EXEC 错误

203/EXEC 通常由以下几种原因导致:

  1. ExecStart 指定的文件不存在
  2. 文件没有执行权限
  3. 脚本的 shebang(如 #!/bin/bash)错误或对应的解释器不存在
  4. 脚本所在文件系统被挂载为 noexec

由于之前服务是正常的,我首先想到是不是文件被移动或删除了。检查原路径:

ls -l /home/wangqiang/start-vpn.sh

结果:

ls: cannot access '/home/wangqiang/start-vpn.sh': No such file or directory

果然,文件不在了。我回想起来,之前整理目录时把脚本移到了 ~/VPN/ 下:

ls -l /home/wangqiang/VPN/start-vpn.sh

输出:

-rwxrwxr-x 1 wangqiang wangqiang 163 May 28 16:41 /home/wangqiang/VPN/start-vpn.sh

问题根源:移动了脚本,但 systemd 服务文件中的 ExecStart 还指向旧路径。重启后 systemd 尝试启动服务时找不到脚本,因此报 203/EXEC 错误并不断自动重启。

修复步骤

1. 修改服务文件中的路径

编辑用户服务文件:

nano ~/.config/systemd/user/wstunnel.service

ExecStart 行改为:

ExecStart=/home/wangqiang/VPN/start-vpn.sh
ExecStart=/home/wangqiang/VPN/start-vpn.sh

保存后退出(nano 中按 Ctrl+O,回车,再按 Ctrl+X)。

2. 确认脚本具有执行权限(已存在,无需修改)

ls -l /home/wangqiang/VPN/start-vpn.sh

权限中包含 x,无需额外 chmod

3. 重新加载 systemd 并重启服务

systemctl --user daemon-reload
systemctl --user restart wstunnel.service

4. 检查服务状态

systemctl --user status wstunnel.service

现在输出变为 active (running)

● wstunnel.service - Wstunnel Client for VPN
     Loaded: loaded (/home/wangqiang/.config/systemd/user/wstunnel.service; enabled)
     Active: active (running) since Mon 2026-06-08 14:01:52 CST; 8s ago
   Main PID: 13932 (start-vpn.sh)
      Tasks: 6 (limit: 18198)
     Memory: 3.7M
        CPU: 122ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/wstunnel.service
             ├─13932 /bin/bash /home/wangqiang/VPN/start-vpn.sh
             └─13935 /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

并且日志中显示 wstunnel 成功启动、监听 UDP 端口、建立 TLS 连接:

6月 08 14:01:52 ... Started wstunnel.service.
6月 08 14:01:52 ... INFO wstunnel: Starting wstunnel client v10.5.5
6月 08 14:01:52 ... INFO wstunnel::protocols::udp::server: Starting UDP server listening on 127.0.0.1:51820
6月 08 14:02:00 ... INFO wstunnel::protocols::udp::server: New UDP connection from 127.0.0.1:46144
6月 08 14:02:00 ... INFO wstunnel::protocols::tcp::server: Opening TCP connection to 154.21.196.249:443
6月 08 14:02:00 ... INFO wstunnel::protocols::tls::server: Doing TLS handshake using SNI DnsName("wg.shuijingwanwq.com")

5. 验证端口监听

最后确认 UDP 转发端口已经正常监听:

ss -lun | grep 51820

输出:

UNCONN 0      0          127.0.0.1:51820      0.0.0.0:*
一切恢复正常。现在 wstunnel 客户端会随用户登录自动启动,并在意外退出时自动重试(Restart=on-failure)。

一切恢复正常。现在 wstunnel 客户端会随用户登录自动启动,并在意外退出时自动重试(Restart=on-failure)。

为什么用 wstunnel 来加密 WireGuard 流量?

运营商普遍对 UDP 流量实施 QoS 限速或直接丢弃,导致 WireGuard 连接经常超时或断线。wstunnel 将 UDP 数据包封装在 WSS(WebSocket Secure over TLS) 流中——WSS 使用 443 端口和 TLS 加密,从网络特征上看与普通 HTTPS 请求完全一致。运营商的 DPI 设备无法区分这是正常网页访问还是 VPN 隧道,因此不会对流量进行特殊处理,保证了连接的稳定性和带宽。

在启动命令中:

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
  • wss:// 表示使用 WebSocket over TLS,服务器端必须配置有效的 TLS 证书。
  • --tls-sni-override 用于指定 SNI 名称,使得 TLS 握手时使用 wg.shuijingwanwq.com 作为服务器名称指示,进一步模拟正常 HTTPS 请求。

通过这种方式,WireGuard 的 UDP 流量被“伪装”成标准的 HTTPS 流量,成功避免了运营商的干扰。

总结与避坑指南

常见错误解决方法
status=203/EXEC检查 ExecStart= 路径是否正确,文件是否存在且有 +x 权限
脚本手动可运行但 systemd 失败检查脚本 shebang(第一行),避免使用 ~ 相对路径
systemd 修改后配置未生效务必执行 systemctl --user daemon-reload
服务一直 auto-restart查看 journalctl --user -u 服务名 -f 获得详细错误日志

特别提醒:如果你移动了脚本的位置,一定记得同步更新 systemd 服务文件中的路径,否则就会出现本文描述的 203/EXEC 错误。修改后需要执行 daemon-reload 才能生效。

另外,如果是用户服务--user),请确保服务随用户登录启动:systemctl --user enable 服务名。用户服务依赖于用户的 systemd 实例(一般由 systemd --user 在登录时自动启动)。

参考资料

  • systemd.exec 手册 – 了解 ExecStart 和退出码
  • journalctl --user -u wstunnel.service -f – 实时查看用户服务日志

通过以上步骤,我快速定位并解决了因移动脚本导致的 203/EXEC 错误,恢复了 wstunnel 的自启动。希望这篇博客能帮助遇到类似问题的朋友少走弯路。

Happy tunneling!

自建 VPN 后 Play 商店应用无法更新?别折腾 Wstunnel 了,问题在 Clash 分流规则里 Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(一):极简原则与初版构建

🚀 推荐 VPS(WireGuard / Clash / 自建 VPN 专用)

本系列方案推荐使用 Vultr VPS 作为基础服务器环境:

✔ 支持 WireGuard / Clash / VPS 架构部署
✔ 全球多机房节点可选
✔ 稳定适合长期运行的网络服务

👉 点击访问 Vultr(推荐注册入口)



💡 新用户优惠说明

Vultr 官方可能会针对新用户提供一定的试用额度或促销活动,例如:

– 最高可能获得 $300 新用户测试额度
– 用于 VPS 部署与测试用途
– 是否生效取决于 Vultr 官方活动规则及账户条件

⚠️ 不同地区、时间或账户类型可能存在差异。


⚠️ 重要说明

本站提供的链接为 Vultr 官方联盟推广链接,用于推荐 VPS 服务。

所有优惠活动均由 Vultr 官方提供与解释,本网站不保证所有用户均可获得相同促销权益。



拒绝反复折腾|专属 WireGuard VPN 远程部署与优化服务

本系列长期记录 WireGuard、Clash、VPS、DNS、Linux 网络环境和 AI 工具访问优化等实践。如果你不想反复踩坑、折腾服务器与协议配置,可以联系我做一次远程排查或专属方案部署。

适合以下用户:
✅ ChatGPT、Claude、Gemini 等 AI 工具使用者
✅ 海外远程办公用户
✅ 技术学习与开发环境访问需求
✅ 不想长期折腾 VPS 与代理配置的用户
✅ 希望拥有专属节点而非公共机场的用户

服务内容:
远程代搭建:在你自己的服务器上部署专属 WireGuard VPN,数据完全掌控。
免费试用:可申请免费试用我的自建节点,再决定是否继续。
分流优化:针对 AI 工具、开发环境及日常使用进行优化。
问题排查:协助排查连接失败、速度慢、DNS 异常、规则配置等常见问题。

如需了解方案或申请试用,请直接联系我,并注明:VPN 咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理