VPN 的问题大多集中在少数几个原因上,按正确的顺序排查能省下一个晚上。除非某一步另有说明,命令都在服务器上执行。示例使用默认端口 51820/udp 的 WireGuard;如果是 OpenVPN 或 Xray,请换成你自己的服务名和端口。
最后核实于 2026-11-13。
1. 服务器是带独立 IPv4 的套餐吗?
VPN 客户端是从外部连入你的服务器的。NAT 套餐从外部只放行一个端口,也就是你的专属 SSH 端口,所以任何 VPN 都无法在上面工作。如果控制面板显示的地址带有 20xxx 这样的端口,你用的就是 NAT。改用独立 IPv4 会保留数据,也不需要重装;见更换 IP 地址。
2. 服务在运行吗?
systemctl status wg-quick@wg0
journalctl -u wg-quick@wg0 -n 30 --no-pager
OpenVPN 的单元名通常是 openvpn-server@server,Xray 是 xray。启动失败的服务几乎总会在日志最后几行写明原因:配置里有笔误、缺少密钥文件、端口已被占用。
3. 它在你预期的端口上监听吗?
ss -ulpn | grep 51820 # UDP: WireGuard, OpenVPN over UDP
ss -tlpn | grep 443 # TCP: Xray / VLESS, OpenVPN over TCP
没有输出就说明服务没在那个端口监听,不管配置里怎么写。把端口和客户端里的对比一下。
4. 防火墙放行了吗?
ufw status verbose
如果防火墙已启用,而列表里没有你的端口,就打开它:
ufw allow 51820/udp
注意协议:WireGuard 需要的是 UDP,51820/tcp 规则对它毫无用处。启用或重载防火墙之前,先确认 SSH 规则还在,否则会把自己锁在外面。万一真发生了,控制面板里的浏览器控制台能让你重新进去。
5. 客户端真的到达服务器了吗?
对 WireGuard 来说,看 handshake 就知道:
wg show
某个 peer 显示 latest handshake: N seconds ago,说明客户端已经到达服务器,密钥也匹配。如果完全没有 handshake 这一行,说明它从未到达。这时按顺序检查:客户端配置里的 Endpoint IP 和端口、第 4 步的防火墙、客户端公钥是否在服务器的 [Peer] 块里(反过来也要查)。
6. 连上了,但什么都打不开?
隧道是通的,但服务器没有把流量转发到互联网。检查转发:
sysctl net.ipv4.ip_forward
输出必须是 1。如果不是,就永久开启:
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-vpn.conf
sysctl --system
然后检查 NAT 规则。在 WireGuard 配置里就是带 MASQUERADE 的 PostUp 那一行,里面的网卡名必须是服务器真实的网卡名:
ip -br addr
如果那一行写的是 -o eth0,而你的网卡叫别的名字,就改好配置并重启服务。
7. 换个网络测试
不用家里的 Wi-Fi,改用手机流量连接,或者请其他国家的人试一试。如果在那边 VPN 能用,而在你平时的网络里不行,说明服务器没问题,是中间某个环节在封锁连接。
- 想看看服务器从某个国家到底能不能访问:如何检查 VPS 的 IP 能否从俄罗斯和伊朗访问。
- 在 WireGuard 和 OpenVPN 会被识别并封锁的地方,VLESS + Reality 看起来就像普通的 HTTPS,难封得多。
8. 还是不行?
提交工单,并写明你已经检查过的内容:第 2–5 步的输出,以及你使用的 VPN 客户端名称。有了这些,我们通常在第一次回复里就能告诉你问题出在哪。
评论
暂无评论。来做第一个吧。