故障排除指南¶
常见 R-VPN 问题的解决方案。
连接问题¶
"连接失败"或超时¶
**症状:**客户端挂在 Connecting to wss://... 最终超时。
检查:
-
服务器端口可访问:
-
防火墙允许端口 443:
-
TLS 证书有效:
-
WebSocket 路径正确。客户端连接到
{websocket_path}(例如/api/v1/ws)。如果您的服务器使用不同路径,请更新 client.toml。
"TLS 握手失败"¶
**症状:**客户端显示 TLS handshake failed 或 certificate verify failed。
原因和解决方案:
-
Let's Encrypt 证书未续期:
-
server_address 中的主机名错误:
-
SNI 不匹配:
-
iOS:沙箱证书验证问题(旧版本): 确保在更新后重建了 Rust 库。在 iOS 上,证书验证通过
SecTrustEvaluateWithError使用系统信任存储。
立即 "连接被拒绝"¶
**症状:**客户端立即失败,显示 Connection refused。
检查:
# 服务器正在运行吗?
sudo systemctl status rvpn-server
# 它在正确的端口上监听吗?
sudo ss -tlnp | grep 443
# 您能本地连接吗?
curl -I http://127.0.0.1:8443/api/v1/ws
"X3DH 握手失败"¶
**症状:**连接开始但在加密设置期间失败。
原因:
-
预密钥包不匹配: 客户端和服务器必须使用相同的预密钥包。如果服务器轮换了密钥而客户端有旧包,这可能会失败。
-
身份密钥已更改: 如果服务器身份密钥被重新生成,所有客户端都需要新的预密钥包。
"太多连接"或超出速率限制¶
**症状:**连接成功后一段时间出现 Connection refused 或 Rate limited。
检查服务器速率限制:
每个客户端连接占用一个插槽。如果您有许多设备,请增加这些值。
TUN 模式问题¶
客户端连接但没有互联网访问¶
检查 1:服务器上的 IP 转发:
如果未启用:
检查 2:服务器上的 NAT 规则:
您应该看到 MASQUERADE 规则和 FORWARD ACCEPT 规则。
如果缺失:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
检查 3:服务器安全组/防火墙允许出站: 服务器必须能够发起到任何 IP 的任何端口的出站连接,NAT 才能工作。
检查 4:server.toml 中启用了 NAT:
检查 5:客户端路由:
流量发出但没有返回¶
**症状:**您可以 ping 外部 IP 但没有响应。服务器日志显示帧被中继但没有 "Relay completed"。
**根本原因:**SOCKS5 响应在隧道就绪之前发送。
**修复:**这是旧版本中的一个错误。重建并重新部署:
检查服务器日志:
INFO rvpn_server: Listening on 0.0.0.0:443
INFO rvpn_server: WebSocket path: /api/v1/ws
INFO rvpn_server: TUN mode enabled
如果 TUN 模式未启用,TUN 模式下的客户端将无法正常连接。
服务器上未创建 TUN 接口¶
检查:
如果接口不存在:
1. 验证 [server.tun] 中 enabled = true
2. 检查服务器日志中接口创建期间的错误
3. 尝试不同的接口名称以避免命名冲突
客户端无法 ping 服务器 TUN IP¶
检查:
如果客户端无法到达 10.200.0.1,隧道未正确建立。
SOCKS5 模式问题¶
应用未通过代理路由¶
检查 1:代理正在运行:
如果这返回您的 VPN 服务器 IP,代理正在工作。
检查 2:系统代理设置:
确保您的系统或应用配置为使用 127.0.0.1:1080 作为 SOCKS5 代理。
检查 3:浏览器代理设置: Chrome 和 Edge 使用系统代理设置。Firefox 有自己的代理设置。
检查 4:应用特定问题: 某些应用不支持 SOCKS5(仅支持 HTTP 代理)。使用 SOCKS5 到 HTTP 代理适配器或切换到 TUN 模式。
SOCKS5 模式下的 DNS 泄漏¶
**症状:**DNS 泄漏测试显示您的 ISP DNS,而不是 VPN DNS。
**修复:**启用 DNS 代理:
将您的系统 DNS 配置为 127.0.0.1。请参阅防止 DNS 泄漏获取详细设置。
Chrome 特定问题:**Chrome 默认使用自己的安全 DNS 解析器,这会绕过系统 DNS 和 VPN 隧道。
- 在桌面/安卓上:前往 设置 → 隐私和安全 → 安全 → 使用安全 DNS 并关闭它。
- 清除 Chrome 的 DNS 缓存:访问 chrome://net-internals/#dns 并点击 **清除主机缓存。
- 在 iOS 上:强制关闭 Chrome 或清除浏览数据以刷新其缓存。
多路复用模式问题¶
**症状:**某些应用或网站无法加载、超时或行为不一致,而代理似乎正在运行。
**修复:**多路复用模式在所有流之间共享单个 WebSocket 隧道。如果某个网站或应用与此行为不兼容,请暂时切换到旧版(非多路复用)模式:
重要:**旧版模式为**每个 TCP 流打开一个 WebSocket 连接。繁忙的浏览器很容易耗尽服务器的 max_connections_per_ip 限制。如果您计划定期使用旧版模式,请要求服务器管理员提高限制:
连接速度慢¶
可能原因:
- **高延迟:**VPN 服务器地理位置遥远
- **服务器过载:**一个服务器上的连接太多
- **带宽限制:**服务器的上游饱和
- **MTU 问题:**高延迟链路上的数据包分片
解决方案:
-
在 client.toml 中降低 MTU:
-
尝试更靠近您位置的不同服务器
- 检查服务器负载:
uptime、htop - 如果不需要,禁用 IPv6:
iOS 应用问题¶
"启动 VPN 失败"¶
检查:
1. 服务器地址包含 wss://(不是 https://)
2. 身份密钥已生成(设置 -> 身份)
3. 预密钥包已导入
4. 服务器正在运行且可访问
重建 Rust 库:
连接频繁断开¶
可能原因:
- 网络不稳定(Wi-Fi 到蜂窝切换)
- iOS 在后台挂起应用
- VPN 配置文件被撤销
解决方案: 1. 在 iOS 设置 -> VPN 中启用"始终在线 VPN" 2. 检查 iOS 更新 3. 重建并重新安装应用
未分配 IP¶
**原因:**服务器的 DHCP 池耗尽。
**修复:**在服务器上增加 DHCP 范围:
或断开未使用的客户端。
分流隧道问题¶
绕过流量仍通过 VPN¶
检查:
验证规则已加载: 客户端日志在启动时应显示绕过规则:
检查路由表:
确保被绕过的网络不在 VPN 路由表中。
流媒体服务仍被屏蔽¶
原因: 1. 流媒体服务可能使用 GPS/地区信号,而不仅仅是 IP 2. 账户支付货币和历史影响内容 3. CDN IP 可能与国家绕过数据不匹配
解决方案: 1. 清除浏览器/应用 cookies 和缓存 2. 使用浏览器扩展伪造时区和地区 3. 可能需要全隧道模式(不绕过任何内容)
性能问题¶
VPN 延迟高¶
检查到服务器的延迟:
如果即使到服务器的延迟也很高,那是地理距离的问题,不是 VPN。
优化: 1. 使用更靠近您位置的服务器 2. 如果在卫星或高延迟链路上,降低 MTU:
吞吐量低¶
检查:
1. 服务器带宽:到服务器的 iperf3 测试
2. 客户端硬件:加密对旧设备是 CPU 密集型的
3. 网络拥塞
优化:
[performance]
worker_threads = 4
crypto_worker_count = 4
recv_buffer_size = 262144
send_buffer_size = 262144
获取更多信息¶
启用调试日志¶
获取详细客户端日志:
获取服务器日志:
检查系统日志¶
验证网络路径¶
常见日志消息¶
| 日志消息 | 含义 |
|---|---|
Listening on 0.0.0.0:443 |
服务器启动成功 |
WebSocket path: /api/v1/ws |
WebSocket 端点已配置 |
TUN mode enabled |
服务器 TUN 接口活动 |
X3DH handshake complete |
加密已建立 |
NAT enabled |
服务器将伪装客户端流量 |
Relay completed |
一个数据中继会话完成 |
Too many connections |
超出速率限制 |