没有不值得去解决的问题,也没有不值得去学习的技术!

帮客户远程排查 Vultr WireGuard 无握手无法上网问题(完整实录)

你好,我按照你博客文章按流程操作了一下服务器,服务器防火墙也开了,但是手机修改端口还是没有握手提示,也上不了网,这是哪里出问题了吗?

作者:

自建 VPN

图1:收到需要处理相关链接的通知。

(1) 根据网信办相关要求下线 8 篇自建 VPN 中文文章:保留系列标题并返回 404 的处理记录

图15:电脑VPN连接成功截图

(2) 从 LetsVPN 停用至自建 WireGuard VPN 全流程复盘(附避坑指南)

手机端优化配置(表单字段编辑专用,仅改2个字段)如图1

(3) WireGuard VPN 配置优化:国内网站直连,国外流量走VPN(实测有效)

ChatGPT(https://chatgpt.com/)、 YouTube(https://www.youtube.com/)、 V2EX(https://v2ex.com/) 始终打不开,提示无法访问。如图1

(4) WireGuard 国内直连+国外走隧道 配置踩坑与完美解决(实测可用)

客户端无「上次握手时间」,一直处于等待连接状态。客户端显示看似连接,但实际无握手、无流量转发,接收一直为 0。

(5) WireGuard 自建 VPN 偶发不可用 全程复盘:从正常使用→突然无握手→端口被封→换端口+智能分流 完整解决流程

Speedtest 出口带宽测速,打开:https://www.speedtest.net/ 。结果如图2

(6) 从 LetsVPN 停用自建 WireGuard 后:成都移动宽带+ Vultr 新加坡节点 实测网速很慢复盘+避坑干货

2. VPS 通过 iptables 做端口段转发:20000~60000 全部UDP端口,统一转发到本机 51820; 3. Vultr 防火墙只需放行 20000~60000 端口段 ,不用逐个添加单端口规则;

(7) 自建WireGuard解决端口频繁被封终极极简方案(保姆级可复现)

洛杉矶节点:Premium、Eyeball、Tier 1 三种网络类型下所有实例均处于缺货状态,包括我能勉强接受的 LAX.AN5.Pro.TINY(Premium 网络,12.98美元/月),该节点 AN5 系列已告罄(如图6);

(8) WireGuard 握手正常但打不开网?我们为什么非要 CN2 GIA,附 DMIT 部署 & 缺货替代方案

需要确保首页 - 当前节点 - ZgoCloud-VPN 是 绿色状态(如图25)。

(9) ZgoCloud + Wstunnel + WireGuard 提速 4 倍,Clash Verge Rev 自动分流与 443 端口防封实战

不可访问:`www.google.com` 提示 `ERR_CONNECTION_CLOSED`;`chatgpt.com`、`v2ex.com` 提示 `ERR_CERT_COMMON_NAME_INVALID`(HSTS 导致的证书错误)

(10) 排查实录:解决Clash Verge + Wstunnel + WireGuard下“部分网站无法访问”的DNS死锁问题

图12:开机后网站测试全部通过

(11) Ubuntu 26.04 下 ZgoCloud + Wstunnel + Clash Verge Rev 开机自启 VPN 配置

分析:第三次测试依然稳健,上传甚至回升到了 81 Mbps。这证明了 CN2 GIA + 9929 线路在下午时段(非深夜)的优异表现。 (图7:VPN 测速 #3 详细数据截图)

(12) Ubuntu 26.04 下 自建 VPN 速度实测报告:ZgoCloud + Wstunnel + WireGuard 方案体验与对比指南

【截图位置:图17 展示了启动后的仪表盘界面】

(13) Android 下 ZgoCloud + Wstunnel + FlClash VPN 配置

📷(图1:Play 商店无法更新)

(14) 自建 WireGuard + Wstunnel 在 Android 上 Google Play 更新异常的完整排查与架构优化

[截图 5:Clash 规则片段,突出显示新增的两行 DST-PORT 规则]

(15) 自建 VPN 后 Thunderbird 无法发送 Gmail 邮件:原因与解决方法

[截图 2:Play 商店更新界面,显示两个应用正常下载]

(16) 自建 VPN 后 Play 商店应用无法更新?别折腾 Wstunnel 了,问题在 Clash 分流规则里

关键信息是 code=exited, status=203/EXEC。这个退出码意味着 systemd 无法执行指定的程序。

(17) systemd 用户服务 203/EXEC 错误排查:wstunnel 自启动配置实录

Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(一):极简原则与初版构建

(18) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(一):极简原则与初版构建

使用 Clash Verge Rev 内置的连接测试,对常用 13 个目标进行检测:

(19) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(二):Google 污染的 DNS 最小修正

你好,我按照你博客文章按流程操作了一下服务器,服务器防火墙也开了,但是手机修改端口还是没有握手提示,也上不了网,这是哪里出问题了吗?

(20) 帮客户远程排查 Vultr WireGuard 无握手无法上网问题(完整实录)

Thunderbird 无法与 imap.gmail.com 连接,请稍后再试。如果问题依然存在,则可能是您超出了此服务器允许的最大连接数量。可在IMAP服务器设置中减少缓存的连接数量。

(21) 从 Thunderbird 连接失败到换用 Gmail API 客户端的完整排查记录

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

(22) 客户 Android 下 Wstunnel + FIClash 远程排障全记录:从脚本创建到 IP 错配的坑

在 FlClash 中查看实时请求日志,所有 Play 商店相关的请求全部走代理

(23) FlClash + WireGuard + Wstunnel 稳定配置实践(三):Google Play 下载问题解决

🚀 WireGuard + Clash Verge Rev 实现国内直连 / 国外分流(Vultr & ZgoCloud 实战演进版)

(24) 🚀 WireGuard + Clash Verge Rev 实现国内直连 / 国外分流(Vultr & ZgoCloud 实战演进版)

Clash Verge 内存占用过高

(25) 🚀 Clash Verge 从 500MB 到 200MB:Ubuntu VPN 客户端轻量化优化实战

LetsVPN 已经无法继续为中国大陆用户提供 VPN 服务

(26) 自建 VPN 与商业 VPN 怎么选:从 LetsVPN 停用到 WireGuard 自建的真实迁移复盘

【截图 2:Clash Verge Rev 日志中出现 dns resolve failed】

(27) Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(四):DNS 偶发超时的极简兜底修正

前言

前几天,一位读者在微信上找到我,发来这样一条消息:

“你好,我按照你博客文章按流程操作了一下服务器,服务器防火墙也开了,但是手机修改端口还是没有握手提示,也上不了网,这是哪里出问题了吗?”

你好,我按照你博客文章按流程操作了一下服务器,服务器防火墙也开了,但是手机修改端口还是没有握手提示,也上不了网,这是哪里出问题了吗?

他参考的是我博客上的两篇文章:

按理说,如果再多参考一篇《WireGuard 自建 VPN 偶发不可用 全程复盘》,他应该也能自行解决。不过既然客户找上门,我就顺手帮他远程排查一下,也把整个过程完整记录下来,供遇到类似问题的朋友参考。


第一步:拿到服务器权限,开始排查

我向客户要了 SSH 登录信息,先看看服务器上到底什么情况。

我向客户要了 SSH 登录信息,先看看服务器上到底什么情况。

登录后,首先检查 WireGuard 服务状态和当前生效的 iptables 规则。

1. 查看 WireGuard 状态

Bash
wg show

输出:

Plaintext
interface: wg0
  public key: Mz1875giVsx4VO2HCLp2muoKPvxRzqaAskxpdHPkkWc=
  private key: (hidden)
  listening port: 51820

peer: oGifzA+TPY7W1AmqEc0R18Wv4dr/sFHguP7kCr81gX8=
  preshared key: (hidden)
  allowed ips: 10.66.66.2/32, fd42:42:42::2/128

peer: zFHZ//qIYRmK2rxO2JeZYON2JPo/Mni9J2kaeUIVfxk=
  preshared key: (hidden)
  allowed ips: 10.66.66.3/32, fd42:42:42::3/128

WireGuard 服务本身是正常的,有 peer 配置,监听 51820 端口,但没有 latest handshake(上次握手时间),说明手机根本没有与服务器完成握手。

2. 查看 PREROUTING 端口转发规则

Bash
iptables -t nat -L PREROUTING -n -v --line-numbers

输出:

Plaintext
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      330 59076 REDIRECT   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:20000:60000 redir ports 51820
2        0     0 REDIRECT   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:20000:60000 redir ports 51820

这里发现了两条完全相同的 REDIRECT 规则,有一条 pkts=0(从未被命中),这是之前重复执行命令导致的,不影响功能但不够干净。顺手删掉一条:

Bash
iptables -t nat -D PREROUTING 2

再次查看,只剩一条了:

Plaintext
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      330 59076 REDIRECT   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:20000:60000 redir ports 51820

3. 保存规则

Bash
netfilter-persistent save

输出:

Plaintext
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save

4. 确认 iptables-persistent 已安装

Bash
dpkg -l iptables-persistent
Plaintext
||/ Name                Version      Architecture Description
+++-===================-============-============-=====================================================
ii  iptables-persistent 1.0.16       all          boot-time loader for netfilter rules, iptables plugin

ii 表示已安装,没问题。


第二步:定位核心问题 —— INPUT 链默认 DROP

接下来检查 INPUT 链(入站流量过滤):

Bash
iptables -L INPUT -n -v --line-numbers

输出:

Plaintext
Chain INPUT (policy DROP 237K packets, 13M bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:54712
2    1009K  477M ufw-before-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
3    1009K  477M ufw-before-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
4     237K   13M ufw-after-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
5     237K   13M ufw-after-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
6     237K   13M ufw-reject-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
7     237K   13M ufw-track-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

问题找到了!

  • INPUT 链默认策略是 DROP(丢弃所有入站流量)
  • 当前只放行了 udp dpt:54712(可能是某个临时端口),没有放行 UDP 20000-60000 或 51820
  • 虽然 Vultr 后台防火墙(截图4)已经正确放行了 UDP 20000-60000,但服务器内部的 iptables INPUT 链直接把包丢弃了
虽然 Vultr 后台防火墙(截图4)已经正确放行了 UDP 20000-60000,但服务器内部的 iptables INPUT 链直接把包丢弃了

这就是手机始终无握手的根本原因。

修复:放行 UDP 20000-60000

Bash
iptables -I INPUT 1 -p udp --dport 20000:60000 -j ACCEPT

验证规则已生效:

Bash
iptables -L INPUT -n -v --line-numbers | head -5
Plaintext
Chain INPUT (policy DROP 237K packets, 13M bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:20000:60000
2        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:54712
3    1009K  477M ufw-before-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

第一条规则已经正确插入,优先放行。

保存规则

Bash
netfilter-persistent save

第三步:解决上网问题 —— IP 转发 + FORWARD + NAT

放行 INPUT 后,手机应该能完成握手了,但可能还无法上网(访问 Google 等)。还需要配置 IP 转发、FORWARD 链放通和 NAT 伪装。

开启 IP 转发

Bash
sysctl -w net.ipv4.ip_forward=1
grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf || echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

放通 FORWARD 链

Bash
iptables -P FORWARD ACCEPT
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT

添加 NAT 伪装(SNAT/MASQUERADE)

让手机流量从服务器公网 IP 出去,才能访问外网。

自动获取公网网卡和 WireGuard 子网:

Bash
PUBLIC_IFACE=$(ip route | grep default | awk '{print $5}')
WG_SUBNET=$(grep -oP 'Address\s*=\s*\K[0-9.]+/[0-9]+' /etc/wireguard/wg0.conf 2>/dev/null | head -1 | cut -d/ -f1 | sed 's/\.[0-9]*$/.0\/24/')
WG_SUBNET=${WG_SUBNET:-10.0.0.0/24}
PUBLIC_IFACE=${PUBLIC_IFACE:-eth0}
Bash
iptables -t nat -A POSTROUTING -s ${WG_SUBNET} -o ${PUBLIC_IFACE} -j MASQUERADE

输出:

Plaintext
已添加 NAT 伪装 (子网: 10.66.66.0/24, 网卡: enp1s0)

保存所有规则

Bash
netfilter-persistent save

重启 WireGuard 服务

Bash
systemctl restart wg-quick@wg0

第四步:验证修复结果

查看 WireGuard 状态:

Bash
wg show

输出:

Plaintext
interface: wg0
  public key: Mz1875giVsx4VO2HCLp2muoKPvxRzqaAskxpdHPkkWc=
  private key: (hidden)
  listening port: 51820

peer: zFHZ//qIYRmK2rxO2JeZYON2JPo/Mni9J2kaeUIVfxk=
  preshared key: (hidden)
  endpoint: 117.176.187.98:24535
  allowed ips: 10.66.66.3/32, fd42:42:42::3/128
  latest handshake: 1 minute, 4 seconds ago
  transfer: 28.48 KiB received, 40.54 KiB sent

peer: oGifzA+TPY7W1AmqEc0R18Wv4dr/sFHguP7kCr81gX8=
  preshared key: (hidden)
  allowed ips: 10.66.66.2/32, fd42:42:42::2/128

latest handshake: 1 minute, 4 seconds ago —— 握手成功了!

手机端验证

我把自己手机上的 WireGuard 配置导入后,截图5显示:

我把自己手机上的 WireGuard 配置导入后,截图5显示:上次握手时间
  • 上次握手时间:18 秒钟之前
  • 接收:22.55 MiB,发送:4.17 MiB

流量已经在正常传输了。

然后打开浏览器访问 Google:

Google 正常打开,问题彻底解决!

Google 正常打开,问题彻底解决!


问题根因总结

检查项状态说明
WireGuard 服务✅ 正常监听 51820,有 peer 配置
Vultr 后台防火墙✅ 正确已放行 UDP 20000-60000
PREROUTING REDIRECT✅ 正确将 20000-60000 重定向到 51820
iptables-persistent✅ 已安装规则可持久化
INPUT 链放行 UDP 20000-60000缺失INPUT 默认 DROP 导致握手包被丢弃
IP 转发 (net.ipv4.ip_forward)❌ 未开启无法路由 VPN 流量
FORWARD 链放通 wg0❌ 未配置无法转发 VPN 数据包
NAT 伪装 (MASQUERADE)❌ 未配置手机流量无法从公网 IP 出去

核心问题: 客户只配置了 PREROUTING 重定向,但忽略了 INPUT 链的放行规则。虽然 Vultr 后台防火墙放行了端口,但服务器内部的 iptables INPUT 链默认策略为 DROP,直接把所有入站包丢弃了。

次要问题: 未开启 IP 转发和 NAT 伪装,导致即使握手成功也无法上网。


完整修复命令汇总

如果你也遇到类似问题(无握手、无法上网),在确保 PREROUTING 规则已配置的前提下,执行以下命令即可修复:

Bash
# 1. 放行 UDP 端口范围(解决 INPUT DROP 导致无握手)
iptables -I INPUT 1 -p udp --dport 20000:60000 -j ACCEPT

# 2. 开启 IP 转发
sysctl -w net.ipv4.ip_forward=1
grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf || echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

# 3. 放通 FORWARD 链
iptables -P FORWARD ACCEPT
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT

# 4. 添加 NAT 伪装(自动获取网卡和子网)
PUBLIC_IFACE=$(ip route | grep default | awk '{print $5}')
WG_SUBNET=$(grep -oP 'Address\s*=\s*\K[0-9.]+/[0-9]+' /etc/wireguard/wg0.conf 2>/dev/null | head -1 | cut -d/ -f1 | sed 's/\.[0-9]*$/.0\/24/')
WG_SUBNET=${WG_SUBNET:-10.0.0.0/24}
PUBLIC_IFACE=${PUBLIC_IFACE:-eth0}
iptables -t nat -A POSTROUTING -s ${WG_SUBNET} -o ${PUBLIC_IFACE} -j MASQUERADE

# 5. 保存规则
netfilter-persistent save

# 6. 重启 WireGuard
systemctl restart wg-quick@wg0

避坑要点

  1. Vultr 后台防火墙 ≠ 服务器内部 iptables
    后台放行端口只是“允许流量到达服务器网卡”,但服务器内部的 iptables INPUT 链仍然可能丢弃流量。务必检查 INPUT 链策略,如果是 DROP,必须显式放行所需端口。
  2. PREROUTING REDIRECT 只做端口转换,不负责放行
    nat 表的 PREROUTING 链在路由决策之前生效,但如果 INPUT 链丢弃了包,重定向后的流量仍然到不了 WireGuard 服务。
  3. 手机上网需要 IP 转发和 NAT
    如果手机需要访问外网(Google、ChatGPT 等),必须开启 net.ipv4.ip_forward=1,放通 FORWARD 链,并添加 MASQUERADE 规则。
  4. 检查 WireGuard 配置文件中的子网
    NAT 伪装时需要使用正确的子网(如 10.66.66.0/24),否则流量无法正确路由。

结语

这位客户遇到的问题其实很典型:配置了端口转发,但忽略了入站放行和路由转发。在排查过程中,只需要一条一条检查 iptables 规则,就能快速定位问题。

希望这篇记录能帮到遇到类似问题的朋友。如果你也想自建 WireGuard VPN 但不想折腾,欢迎联系我获取专属解决方案。


Clash Verge Rev + WireGuard + Wstunnel 稳定配置实践(二):Google 污染的 DNS 最小修正 从 Thunderbird 连接失败到换用 Gmail API 客户端的完整排查记录

🚀 推荐 VPS(WireGuard / Clash / 自建 VPN 专用)

本系列方案推荐使用 Vultr VPS 作为基础服务器环境:

✔ 支持 WireGuard / Clash / VPS 架构部署
✔ 全球多机房节点可选
✔ 稳定适合长期运行的网络服务

👉 点击访问 Vultr(推荐注册入口)



💡 新用户优惠说明

Vultr 官方可能会针对新用户提供一定的试用额度或促销活动,例如:

– 最高可能获得 $300 新用户测试额度
– 用于 VPS 部署与测试用途
– 是否生效取决于 Vultr 官方活动规则及账户条件

⚠️ 不同地区、时间或账户类型可能存在差异。


⚠️ 重要说明

本站提供的链接为 Vultr 官方联盟推广链接,用于推荐 VPS 服务。

所有优惠活动均由 Vultr 官方提供与解释,本网站不保证所有用户均可获得相同促销权益。



拒绝反复折腾|专属 WireGuard VPN 远程部署与优化服务

本系列长期记录 WireGuard、Clash、VPS、DNS、Linux 网络环境和 AI 工具访问优化等实践。如果你不想反复踩坑、折腾服务器与协议配置,可以联系我做一次远程排查或专属方案部署。

适合以下用户:
✅ ChatGPT、Claude、Gemini 等 AI 工具使用者
✅ 海外远程办公用户
✅ 技术学习与开发环境访问需求
✅ 不想长期折腾 VPS 与代理配置的用户
✅ 希望拥有专属节点而非公共机场的用户

服务内容:
远程代搭建:在你自己的服务器上部署专属 WireGuard VPN,数据完全掌控。
免费试用:可申请免费试用我的自建节点,再决定是否继续。
分流优化:针对 AI 工具、开发环境及日常使用进行优化。
问题排查:协助排查连接失败、速度慢、DNS 异常、规则配置等常见问题。

如需了解方案或申请试用,请直接联系我,并注明:VPN 咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理