跳转至

第18章 常见问题诊断

科学上网过程中难免遇到各种问题。本章提供系统化的故障排查方法,帮助快速定位和解决常见问题。

18.1 无法连接的排查步骤

18.1.1 问题分类

无法连接的常见表现:

1. 完全无法连接
   - 客户端显示:连接失败
   - 浏览器:无法访问网站

2. 部分网站无法访问
   - 国内网站正常
   - 国外网站无法访问

3. 时好时坏
   - 偶尔能连接
   - 经常断开

4. 特定应用无法使用
   - 浏览器正常
   - 其他软件无法联网

18.1.2 系统化排查流程

第一步:检查客户端配置

Clash检查清单:
□ 配置文件是否正确导入
□ 代理模式是否启用(规则/全局)
□ 节点是否选择
□ 系统代理是否开启
□ 端口是否冲突

验证方法:
1. Clash → General → System Proxy(开启)
2. Clash → Proxies → 选择可用节点
3. Clash → Logs → 查看错误信息

常见错误:
❌ "proxy handshake failed"
   → 节点配置错误或节点失效

❌ "timeout"
   → 网络连接超时

❌ "connection refused"
   → 端口被占用或防火墙阻止

第二步:验证节点可用性

# 1. 测试服务器IP可达性
ping 服务器IP
# 或(某些服务器禁ping)
curl -v telnet://服务器IP:端口

# 2. 测试端口连通性
# Windows
Test-NetConnection -ComputerName 服务器IP -Port 443

# Linux/macOS
nc -zv 服务器IP 443
# 或
telnet 服务器IP 443

# 3. 测试TLS握手
openssl s_client -connect 域名:443 -servername 域名

成功输出:
Verify return code: 0 (ok)

失败输出:
connect: Connection refused
SSL handshake failed

第三步:检查网络环境

本地网络检查:
1. 能否访问百度/淘宝等国内网站
   → 检查基础网络

2. DNS解析是否正常
   nslookup google.com

3. 防火墙是否阻止
   临时关闭防火墙测试

4. 杀毒软件是否拦截
   临时关闭测试

ISP限制检查:
1. 使用手机热点测试
   如果正常 → 宽带ISP限制

2. 更换DNS
   1.1.1.1 / 8.8.8.8

3. 尝试不同端口
   80/443/8443等

第四步:服务器端检查

# SSH连接服务器

# 1. 检查服务状态
systemctl status v2ray
systemctl status xray
systemctl status nginx

# 2. 查看服务日志
journalctl -u v2ray -n 50
tail -50 /var/log/v2ray/error.log

# 3. 检查端口监听
netstat -tulnp | grep 443
ss -tulnp | grep 443

# 4. 测试本地连接
curl -x socks5://127.0.0.1:1080 https://google.com

# 5. 检查防火墙
ufw status
iptables -L -n

18.1.3 具体故障案例

案例1:节点配置错误

现象:
Clash显示"proxy handshake failed"

原因:
1. UUID/密码错误
2. 加密方式不匹配
3. 传输协议配置错误
4. TLS设置错误

解决:
1. 对比客户端和服务器配置
2. 检查UUID是否一致
3. 验证alterId(VMess)
4. 确认TLS域名配置

服务器端V2Ray配置:
{
  "inbounds": [{
    "protocol": "vmess",
    "settings": {
      "clients": [{
        "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "alterId": 0
      }]
    }
  }]
}

客户端配置必须匹配:
- uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- alterId: 0

案例2:端口被占用

现象:
服务启动失败
日志:bind: address already in use

检查:
# Linux
netstat -tulnp | grep :443
lsof -i :443

# 发现nginx占用了443端口

解决方案1:更换V2Ray端口
{
  "inbounds": [{
    "port": 10000,  // 改为其他端口
    "listen": "127.0.0.1"
  }]
}

解决方案2:使用端口复用(推荐)
配置Fallback让V2Ray和Nginx共用443

案例3:防火墙阻止

现象:
服务器端测试正常
客户端无法连接

检查:
# 服务器端
ufw status
iptables -L -n | grep 443

解决:
# UFW
ufw allow 443/tcp
ufw reload

# iptables
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables-save > /etc/iptables/rules.v4

# firewalld
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload

案例4:时间不同步

现象:
VMess连接失败
日志:invalid timestamp

原因:
VMess要求客户端和服务器时间差 < 90秒

检查:
# 客户端
date

# 服务器
date

解决:
# 服务器安装NTP
apt install chrony -y
systemctl enable chrony
systemctl start chrony

# 验证同步
chronyc tracking

# Windows客户端
# 设置 → 时间和语言 → 自动设置时间

18.2 速度慢的优化方法

18.2.1 速度慢的原因分析

带宽瓶颈:

1. 服务器带宽不足
   - 共享带宽被占满
   - VPS商家限速

2. 本地带宽限制
   - 家庭宽带上行限制
   - ISP QoS限速

3. 线路拥堵
   - 国际出口拥堵
   - 高峰期缓慢

延迟问题:

1. 物理距离远
   - 美西延迟 ~150ms
   - 欧洲延迟 ~250ms
   - 亚洲延迟 ~50ms

2. 路由跳数多
   - 绕路严重
   - 中转节点多

3. 丢包率高
   - 网络不稳定
   - 线路质量差

18.2.2 速度测试方法

基础速度测试:

# 1. Speedtest测试
# 安装
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
apt install speedtest -y

# 测试
speedtest

# 指定服务器
speedtest --server-id=服务器ID

# 2. Fast.com(Netflix CDN)
# 浏览器访问
https://fast.com

# 命令行
npm install --global fast-cli
fast

代理速度测试:

# 通过代理下载文件测速
# Clash代理端口:7890

# Linux/macOS
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

curl -o /dev/null https://速度测试文件地址

# 或使用wget
wget -e use_proxy=yes \
     -e http_proxy=127.0.0.1:7890 \
     -O /dev/null \
     https://速度测试文件地址

# 测试文件来源
https://github.com/cloudflare/Cloudflare-CfSpeed/releases/latest/download/测试文件

节点延迟测试:

Clash内置测速:
1. Proxies → 节点
2. 点击闪电图标
3. 显示延迟(ms)

ClashX测速:
右键节点 → Benchmark

Clash for Windows:
Proxies → 右键节点 → Delay Test

或批量测速:
Proxies → 全选 → Speed Test

18.2.3 优化方案

优化1:启用BBR加速

# 检查是否已启用
lsmod | grep bbr
sysctl net.ipv4.tcp_congestion_control

# 启用BBR(见第9章)
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

# 验证
lsmod | grep bbr
# 应显示:tcp_bbr

效果:
- 提升TCP吞吐量
- 降低延迟
- 改善弱网环境表现

优化2:调整MTU

# 检查当前MTU
ip link show eth0
ifconfig eth0

# 测试最佳MTU(Windows)
ping -f -l 1472 google.com
# 逐步减小数值直到不分片

# 设置MTU(Linux)
ip link set eth0 mtu 1400
# 永久设置
echo "MTU=1400" >> /etc/sysctl.conf

# Windows
netsh interface ipv4 set subinterface "以太网" mtu=1400 store=persistent

效果:
- 减少分片
- 提高传输效率
- 适合弱网环境

优化3:使用CDN中转

CloudFlare CDN:
1. 域名接入CloudFlare
2. 开启CDN(橙色云朵)
3. V2Ray配置WebSocket+TLS
4. 客户端连接CDN域名

优势:
✓ 隐藏真实IP
✓ DDoS防护
✓ 就近接入
✓ 提升速度(某些地区)

配置示例:
{
  "streamSettings": {
    "network": "ws",
    "wsSettings": {
      "path": "/v2ray"
    },
    "security": "tls",
    "tlsSettings": {
      "serverName": "你的CF域名"
    }
  }
}

优化4:多路复用(Mux)

// Xray客户端配置
{
  "outbounds": [{
    "protocol": "vmess",
    "settings": {...},
    "mux": {
      "enabled": true,
      "concurrency": 8  // 并发连接数
    }
  }]
}

// V2Ray配置
{
  "mux": {
    "enabled": true,
    "concurrency": 8
  }
}

效果:
 减少握手次数
 复用TCP连接
 提升并发性能

注意:
⚠️ 不适用于UDP
⚠️ 可能影响大文件下载
⚠️ 某些协议不支持

优化5:更换传输协议

协议性能对比:

TCP(传统)
速度:★★★☆☆
稳定:★★★★★
延迟:一般
适用:通用场景

mKCP(KCP over UDP)
速度:★★★★★
稳定:★★★☆☆
延迟:低
适用:弱网、高丢包

QUIC
速度:★★★★☆
稳定:★★★★☆
延迟:低
适用:UDP友好网络

gRPC
速度:★★★★☆
稳定:★★★★☆
延迟:一般
适用:CDN场景

推荐:
- 一般场景:TCP + TLS
- 弱网环境:mKCP
- CDN中转:gRPC / WebSocket

18.2.4 线路优化

选择优质线路:

线路类型:

1. 直连线路
   电信/联通/移动 → 目标服务器
   延迟:高
   稳定性:一般
   成本:低

2. CN2 GIA线路
   中国电信精品网
   延迟:低
   稳定性:高
   成本:高

3. IPLC/IEPL专线
   内网专线,不过GFW
   延迟:极低
   稳定性:极高
   成本:极高

4. 中转/中继
   国内VPS → 国外VPS
   延迟:中
   稳定性:高
   成本:中

选择建议:
- 预算有限:普通线路 + BBR
- 追求稳定:CN2 GIA
- 极致体验:IPLC专线
- 平衡方案:中转线路

搭建中转服务器:

# 使用iptables转发
# 国内VPS配置

# 1. 启用转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# 2. 配置转发规则
# 本地端口10000转发到国外服务器IP:443
iptables -t nat -A PREROUTING -p tcp --dport 10000 \
  -j DNAT --to-destination 国外IP:443

iptables -t nat -A POSTROUTING -p tcp -d 国外IP --dport 443 \
  -j SNAT --to-source 国内VPS_IP

# 3. 保存规则
iptables-save > /etc/iptables/rules.v4

# 客户端连接
# 服务器地址:国内VPS_IP
# 端口:10000

18.3 频繁断线解决方案

18.3.1 断线原因分析

网络层面:

1. NAT超时
   - 家用路由器NAT表满
   - 超时断开连接

2. ISP限制
   - QoS限制长连接
   - 检测到代理流量

3. 网络波动
   - WiFi信号不稳定
   - 移动网络切换

4. 服务器重启
   - 自动更新
   - 资源耗尽

协议层面:

1. TCP keepalive失效
   - 长时间无数据传输
   - 被中间设备断开

2. WebSocket超时
   - 代理服务器超时
   - CDN超时设置

3. TLS会话过期
   - Session timeout
   - 需要重新握手

18.3.2 客户端优化

Clash配置优化:

# 增强连接稳定性
tun:
  enable: true
  stack: system
  dns-hijack:
    - any:53

# TCP并发
tcp-concurrent: true

# 设置超时
dial-timeout: 5000ms

V2Ray配置优化:

{
  "policy": {
    "levels": {
      "0": {
        "handshake": 4,
        "connIdle": 300,      // 连接空闲超时(秒)
        "uplinkOnly": 2,
        "downlinkOnly": 5,
        "bufferSize": 512
      }
    }
  },
  "outbounds": [{
    "protocol": "vmess",
    "streamSettings": {
      "sockopt": {
        "tcpKeepAliveInterval": 10,  // TCP保活间隔
        "tcpFastOpen": true
      }
    }
  }]
}

18.3.3 服务器端优化

系统TCP优化:

# /etc/sysctl.conf
# TCP KeepAlive设置
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3

# 连接重用
net.ipv4.tcp_tw_reuse = 1

# 增加连接队列
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192

# 应用配置
sysctl -p

Nginx超时配置:

http {
    # 增加超时时间
    proxy_connect_timeout 60s;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;

    # WebSocket保活
    keepalive_timeout 300s;

    server {
        location /v2ray {
            proxy_pass http://127.0.0.1:10000;

            # 关键:WebSocket保活
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            # 超时设置
            proxy_connect_timeout 60s;
            proxy_read_timeout 300s;
            proxy_send_timeout 300s;
        }
    }
}

监控和自动重启:

#!/bin/bash
# monitor.sh - 监控服务并自动重启

SERVICE="v2ray"

while true; do
    # 检查服务状态
    if ! systemctl is-active --quiet $SERVICE; then
        echo "$(date): $SERVICE 已停止,正在重启..." >> /var/log/monitor.log
        systemctl restart $SERVICE
    fi

    # 检查端口监听
    if ! netstat -tulnp | grep -q ":443.*LISTEN"; then
        echo "$(date): 端口443未监听,重启服务..." >> /var/log/monitor.log
        systemctl restart $SERVICE
    fi

    sleep 60
done

18.3.4 使用故障转移

Clash故障转移配置:

proxy-groups:
  - name: 自动切换
    type: fallback
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
    proxies:
      - 节点1
      - 节点2
      - 节点3

  # 或使用负载均衡
  - name: 负载均衡
    type: load-balance
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
    strategy: consistent-hashing  # 或 round-robin
    proxies:
      - 节点1
      - 节点2
      - 节点3

18.4 特定网站无法访问

18.4.1 问题分类

访问异常类型:

1. 完全无法打开
   - DNS解析失败
   - 连接被重置
   - 超时

2. 部分内容无法加载
   - 图片/视频无法显示
   - 资源加载失败
   - CDN被墙

3. 功能异常
   - 无法登录
   - 无法提交表单
   - WebSocket连接失败

4. 地区限制
   - 版权限制
   - 地理位置限制

18.4.2 DNS问题

DNS污染检测:

# 测试DNS解析
# 国内DNS
nslookup google.com 114.114.114.114

# 国外DNS
nslookup google.com 8.8.8.8

# 如果结果不一致 → DNS污染

# 使用DoH查询
curl -H 'accept: application/dns-json' \
  'https://1.1.1.1/dns-query?name=google.com&type=A'

解决方案:

# Clash配置强制DNS
dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - 'localhost.ptlogin2.qq.com'
  nameserver:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback:
    - https://dns.google/dns-query

# 特定域名使用特定DNS
nameserver-policy:
  'www.google.com': 8.8.8.8
  '+.netflix.com': 1.1.1.1

18.4.3 分流规则问题

检查规则匹配:

# Clash日志模式
log-level: debug

# 查看规则匹配
# 日志会显示:
# [Rule] google.com match DOMAIN-SUFFIX → PROXY

# 常见问题:
1. 规则顺序错误
   DIRECT规则在PROXY之前

2. 域名拼写错误
   google.com 写成 gogle.com

3. 缺少规则
   新网站未添加规则

# 解决:调整规则顺序
rules:
  - DOMAIN-SUFFIX,google.com,PROXY  # 具体规则在前
  - GEOIP,CN,DIRECT                 # 通用规则在后
  - MATCH,PROXY                      # 兜底规则最后

18.4.4 网站特殊要求

Netflix等流媒体:

问题:
显示"proxy detected"或地区不可用

原因:
1. IP被识别为代理
2. 不是原生IP
3. IP地区不匹配

解决:
1. 使用原生IP节点
   - AWS/GCP等云服务商
   - 家宽IP

2. 使用专门的流媒体节点
   - Netflix专用节点
   - 地区对应节点

3. DNS解锁
   某些服务商提供DNS解锁

Clash分流:
rules:
  - DOMAIN-SUFFIX,netflix.com,Netflix专用
  - DOMAIN-KEYWORD,netflix,Netflix专用

ChatGPT等AI服务:

问题:
"Access denied" / "Not available in your country"

原因:
1. 地区限制
2. IP风险评分高
3. 数据中心IP被屏蔽

解决:
1. 使用住宅IP节点
2. 避免使用亚洲IP
3. 使用美国/欧洲节点
4. 清除浏览器Cookie

推荐地区:
✓ 美国
✓ 英国
✓ 德国
✗ 香港
✗ 新加坡(部分可用)

18.5 客户端错误代码解析

18.5.1 Clash错误代码

常见错误及解决:

1. "dial tcp: lookup xxx: no such host"
   原因:DNS解析失败
   解决:
   - 检查DNS配置
   - 使用其他DNS
   - 检查域名是否正确

2. "dial tcp: i/o timeout"
   原因:连接超时
   解决:
   - 检查网络连接
   - 测试节点可用性
   - 增加超时时间

3. "read: connection reset by peer"
   原因:连接被重置
   解决:
   - 节点可能被墙
   - 检查服务器状态
   - 更换节点

4. "proxy handshake failed"
   原因:代理握手失败
   解决:
   - 检查UUID/密码
   - 验证加密方式
   - 确认协议配置

5. "EOF"
   原因:连接意外关闭
   解决:
   - 服务器可能重启
   - 检查Nginx配置
   - 查看服务器日志

18.5.2 V2Ray错误代码

核心错误信息:

1. "failed to handler mux client connection"
   原因:Mux配置问题
   解决:
   - 禁用Mux测试
   - 检查服务器支持
   - 减少并发数

2. "invalid user"
   原因:用户验证失败
   解决:
   - 检查UUID
   - 验证alterId
   - 确认用户存在

3. "invalid timestamp"
   原因:时间不同步
   解决:
   - 同步系统时间
   - 启用NTP
   - 时间差 < 90秒

4. "TLS handshake failed"
   原因:TLS握手失败
   解决:
   - 检查证书有效性
   - 验证域名配置
   - allowInsecure设置

5. "transport: authentication handshake failed"
   原因:认证握手失败
   解决:
   - 检查密钥/密码
   - 验证加密方式
   - 确认协议版本

18.5.3 系统错误代码

Windows错误:

1. 错误代码:10061
   "Connection refused"
   原因:目标端口未监听
   解决:
   - 检查代理端口设置
   - 确认服务已启动
   - 验证防火墙规则

2. 错误代码:10060
   "Connection timed out"
   原因:连接超时
   解决:
   - 检查网络连接
   - 测试服务器可达性
   - 增加超时时间

3. 错误代码:10054
   "Connection reset"
   原因:连接被重置
   解决:
   - 节点可能失效
   - 检查防火墙
   - 更换节点

18.5.4 浏览器错误

Chrome错误代码:

1. ERR_PROXY_CONNECTION_FAILED
   代理连接失败
   解决:
   - 检查代理设置
   - 确认代理运行
   - 验证端口正确

2. ERR_TUNNEL_CONNECTION_FAILED
   隧道连接失败
   解决:
   - 代理服务器问题
   - 检查HTTPS代理
   - 测试节点状态

3. ERR_NAME_NOT_RESOLVED
   DNS解析失败
   解决:
   - 检查DNS设置
   - 清除DNS缓存
   - 使用其他DNS

4. ERR_TIMED_OUT
   连接超时
   解决:
   - 检查网络连接
   - 测试节点延迟
   - 更换节点

清除Chrome缓存:
chrome://net-internals/#sockets
→ Flush socket pools
chrome://net-internals/#dns
→ Clear host cache

本章小结

本章提供了系统化的故障排查方法:

核心要点:

  1. 无法连接排查
  2. 系统化排查流程
  3. 从客户端到服务器
  4. 逐层验证定位问题

  5. 速度优化

  6. 启用BBR加速
  7. 调整MTU
  8. 使用CDN中转
  9. 多路复用
  10. 优化线路

  11. 频繁断线

  12. TCP KeepAlive
  13. 超时配置
  14. 故障转移
  15. 自动重启

  16. 特定网站问题

  17. DNS污染处理
  18. 分流规则调整
  19. 流媒体解锁
  20. 地区限制绕过

  21. 错误代码

  22. Clash错误解析
  23. V2Ray错误处理
  24. 系统错误理解
  25. 浏览器错误修复

故障排查原则:

1. 由近及远
   客户端 → 网络 → 服务器

2. 由简到繁
   基础检查 → 高级诊断

3. 逐层排除
   配置 → 网络 → 服务

4. 保留证据
   日志 → 截图 → 配置

5. 系统记录
   问题 → 原因 → 解决方案

快速诊断清单:

□ 节点是否选择
□ 系统代理是否开启
□ 配置是否正确
□ 服务是否运行
□ 端口是否监听
□ 防火墙是否放行
□ 时间是否同步
□ DNS是否正常
□ 日志有无错误
□ 能否ping通服务器

下一章我们将学习网络测试工具的使用。


实践任务:

  1. 掌握系统化排查流程
  2. 学会使用测速工具
  3. 配置故障转移
  4. 理解常见错误代码
  5. 建立问题记录习惯