跳转至

第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. 建立问题记录习惯