FIClash – 永夜 https://www.shuijingwanwq.com 没有不值得去解决的问题,也没有不值得去学习的技术! Thu, 18 Jun 2026 11:00:26 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 客户 Android 下 Wstunnel + FIClash 远程排障全记录:从脚本创建到 IP 错配的坑 https://www.shuijingwanwq.com/2026/06/18/17355/ https://www.shuijingwanwq.com/2026/06/18/17355/#respond Thu, 18 Jun 2026 11:00:25 +0000 https://www.shuijingwanwq.com/?p=17355 Post Views: 6

本文记录一次在 Termux 上配置 wstunnel 客户端 + FIClash 代理的完整踩坑历程,最终根因竟是 YAML 文件中的 IP 地址与服务器端不匹配。过程中遇到的脚本无法生成、域名替换报错、进程消失等问题也一并梳理,附截图和注解,供后来者参考。


一、项目背景

用户参照我的教程 https://www.shuijingwanwq.com/2026/06/02/15520/ 在 Android 手机上部署:

  • Termux 运行 wstunnel 客户端
  • FIClash(Clash 内核的 Android 图形端)作为代理客户端

我提供了自建的 VPN 服务器信息(域名 wg.shuijingwanwq.com,IP 154.21.196.249),用户照搬教程步骤操作,但最终手机无法上网


二、脚本创建环节的连环坑

截图1 —— 用户询问“域名和IP在哪能找到”

此图为用户发送给我询问“我没有vpn啊,域名和ip在哪能找到”

问题:用户没有自己的 VPN,使用的是我提供的试用服务,因此域名和 IP 直接使用示例中的 wg.shuijingwanwq.com154.21.196.249 即可。但用户没理解这一点,导致迟迟未替换。

解决办法:明确告知用户,试用场景下直接照抄示例中的域名和 IP。


截图2 —— 赋予权限时提示“No such file or directory”

备注:报错信息 chmod: cannot access '/data/data/com.termux/file/home/.termux/boot/start-wstunnel.sh': No such file or directory

排查:用户命令中确实写的是 start-wstunnel.sh(有 .sh),但文件不存在。
根因:用户执行 cat > ~/.termux/boot/start-wstunnel.sh << EOF 时,可能由于我的博客原文中 << 被错误转义为 &lt;&lt;(显示问题),导致复制的命令实际为 cat > ... << EOF 时出错,文件根本没有生成

教训<< 是 shell 的 heredoc 语法,必须原样输入。后续我已修正博客中的转义问题。


截图3 —— “你的域名”未替换导致 wstunnel 报错

备注:红框显示错误 —— error: invalid value '你的域名' for '--tls-sni-override <DOMAIN_NAME>' : Invalid sni override: invalid dns name

用户尝试手动输入命令时,完全保留了教程中的“你的域名”和“你的服务器IP”占位符,未做任何替换,导致 wstunnel 客户端直接报“无效的 DNS 名称”错误。
同时,命令被错误地拆分成多行,进一步破坏了语法结构。

教训:无论教程如何强调,对于初次接触的用户,最好直接提供可复制的完整命令(将占位符替换为真实值后再发给用户)。


三、文件生成与权限修正

经过纠正,用户用正确的命令(替换了真实域名和 IP)创建了脚本(截图4):

经过纠正,用户用正确的命令(替换了真实域名和 IP)创建了脚本(截图4)

随后用户执行 chmod +x ~/.termux/boot/start-wstunnel 时报错,缺少了 .sh 后缀
我在聊天中及时提醒:

我:chmod +x ~/.termux/boot/start-wstunnel.sh
我:你少了 .sh

用户修正后,chmod 命令成功执行。


四、wstunnel 短暂启动后进程消失

用户执行 sh ~/.termux/boot/start-wstunnel.sh,终端打印了如下日志(截图5):

用户执行 sh ~/.termux/boot/start-wstunnel.sh,终端打印了如下日志(截图5)


备注:日志显示 INFO Starting wstunnel clientUDP server listeningTLS handshake using SNI wg.shuijingwanwq.com,看似连接成功。

但用户执行 ps -ef | grep wstunnel看不到进程存在,感到困惑。

真实原因:虽然 TLS 握手日志打印出来了,但由于 YAML 文件中配置的客户端 IP(10.7.0.3)与服务器端实际分配的 IP(10.7.0.4)不一致,导致 WireGuard 虚拟网卡无法正确初始化路由。wstunnel 客户端在尝试建立完整的 UDP 通道后,因底层配置错误而自动崩溃退出,并非用户按了 Ctrl+C 导致。
因此,ps 看不到任何驻留的 wstunnel 进程。


五、FIClash 内置 WireGuard 协议

此时用户启动了 FIClash,并导入了我发送的 YAML 配置文件。
(需要注意的是:FIClash 本身已内置支持 WireGuard 协议,作为代理节点类型之一,因此用户无需额外安装独立的 WireGuard 应用程序。)

但仪表盘几乎无流量(截图6):

备注:上行/下行速度极低,内网 IP 显示为 WiFi IP(192.168.1.34),没有走代理流量。


备注:上行/下行速度极低,内网 IP 显示为 WiFi IP(192.168.1.34),没有走代理流量。

手机桌面如图(截图7),仅安装了 Termux、FIClash、Termux Boot 等工具。

手机桌面如图(截图7),仅安装了 Termux、FIClash、Termux Boot 等工具。

重启手机后问题依旧。


六、终极排障:IP 地址错配是元凶

1. 使用相同文件复现

由于该 YAML 文件是我直接发给用户的,我让用户把整套文件发回给我,直接在我自己的手机上使用同一份文件进行测试,果然复现了完全相同的问题——这证明问题出在配置文件本身,而非用户操作环境。

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

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


备注:关键内容 ——

[Interface]
Address = 10.7.0.4/24
DNS = 8.8.8.8, 8.8.4.4
...

服务器分配给该客户端的虚拟 IP 是 10.7.0.4

3. 检查发送给用户的 YAML 文件

YAML 中 proxies 下的 WireGuard 部分写着:

ip: 10.7.0.3   # 错误!应为 10.7.0.4

这个 IP 是我在准备示例文件时误写的,与服务器实际分配的 IP 不一致。

WireGuard 要求本地虚拟 IP 必须与服务器端 [Interface] 的 Address 一致(或至少属于同一子网且唯一),否则虽然 UDP 隧道可能建立,但路由和包转发会失败,流量无法正常出入。这也是导致 wstunnel 进程崩溃退出的根本原因。

4. 修改为正确 IP 后瞬间恢复(截图9)

备注:将 ip: 10.7.0.3 改为 ip: 10.7.0.4,重新导入 YAML 并连接,仪表盘立即显示正常的上行/下行流量,手机成功访问外网。


备注:将 ip: 10.7.0.3 改为 ip: 10.7.0.4,重新导入 YAML 并连接,仪表盘立即显示正常的上行/下行流量,手机成功访问外网。


七、总结与避坑指南

根因复盘

  • 直接原因:YAML 文件中的 WireGuard 客户端 IP 与服务器端分配的不一致(10.7.0.3 vs 10.7.0.4)。
  • 间接原因:启动脚本的创建过程因博客转义字符问题、占位符未替换、权限命令输错等,拖延了排查时间。
  • 导火索:我发送的示例 YAML 文件本身有错误(写死 10.7.0.3 而未与实际服务器同步)。

经验教训

  1. 脚本创建:务必使用正确的 << heredoc 语法,并检查文件是否真的生成了(用 ls -l 确认)。发教程时,直接给替换好真实值的命令,避免用户漏改占位符。
  2. 进程诊断ps 看不到进程时,不要想当然认为“用户退出了终端”,很可能是配置错误导致客户端主动崩溃,应检查系统日志(logcatdmesg)或运行时的 strace
  3. 配置一致性:任何 VPN 客户端的 IP、端点、密钥都必须与服务器端完全匹配,切忌照搬示例而不核对。
  4. 内置协议认知:如今 FIClash 等客户端已内置 WireGuard 支持,无需额外安装独立应用,但这也意味着配置的 ip 字段必须极其准确。
  5. 提供示例文件时:务必使用占位符(如 YOUR_CLIENT_IP)并单独标注,或者在发给用户前亲自跑一遍完整流程,确保无误。

附:最终的正确启动脚本(供参考)

#!/data/data/com.termux/files/usr/bin/bash
termux-wake-lock
~/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

(注意:请将域名和 IP 替换为你的实际服务器信息)


后记:这次排障前后花了近一天时间,最后发现是配置文件中的一个小数字错误。希望这篇记录能帮助大家少走弯路,遇到类似问题时从“配置文件一致性”和“进程存活状态”双重入手,往往能快速定位。如果有其他疑问,欢迎留言讨论。

]]>
https://www.shuijingwanwq.com/2026/06/18/17355/feed/ 0