Ubuntu系统下使用wg-quick运行WireGuard异常问题求助
兄弟,我太懂你这种闹心的感觉了——Mac上WireGuard GUI用得顺风顺水,到VPS上一跑wg-quick直接断SSH,连重连都不行,还找不到有用日志排查。别慌,咱们一步步来解决这个问题:
先解决“断连后必须重启VPS”的紧急问题
下次再出现SSH冻结的情况,不用急着重启机器,直接通过服务商提供的VNC/网页控制台登录到VPS,执行下面的命令就能快速恢复网络:
wg-quick down wg0
这样就能恢复SSH连接,还能留在系统里排查问题,省得反复重启折腾。
核心问题:流量路由策略导致SSH断连
从你给出的wg-quick执行输出看,最后一步添加了0.0.0.0/0的默认路由到WireGuard接口,再加上fwmark 51820的规则,会把所有流量(包括SSH的回程流量)都导向WireGuard,直接切断了现有SSH连接。哪怕你说AllowedIPs不影响SSH,路由策略的优先级可能还是把SSH流量截走了。
给你两个针对性的修复方案:
方案1:在WireGuard配置里添加路由规则,保留SSH流量
打开你的wg0.conf,在[Interface]区块里添加一条PostUp规则,让VPS公网IP的流量优先走主路由表(也就是原来的网络):
[Interface] PrivateKey = 你的私钥 Address = <MY_IP>/32, fd00::9:7e38/128 PostUp = ip rule add from <你的VPS公网IP> table main priority 100 # 其他原有配置...
替换<你的VPS公网IP>为你实际用来SSH连接的VPS公网地址。这条规则的作用是:所有从VPS公网IP发出的流量(包括SSH的回程包)都会优先走原来的网络,不会被WireGuard的路由拦截。
方案2:调整AllowedIPs范围(如果不需要全局代理)
如果你不需要让VPS的所有流量都走WireGuard,可以把AllowedIPs改成你实际需要访问的网段,而不是0.0.0.0/0, ::/0。比如只访问某个内网网段:
[Peer] PublicKey = 对方公钥 AllowedIPs = 192.168.1.0/24, fd00::/64 # 其他原有配置...
这样就只有目标网段的流量会走WireGuard,SSH流量依然走原来的网络。
如何查看有用的日志?
下次启动WireGuard时,用下面的命令把启动日志保存到文件里,方便后续排查:
wg-quick up ~/wg0.conf 2>&1 | tee wg-start.log
另外,还可以查看系统级的WireGuard日志:
journalctl -u wg-quick@wg0 # 或者查看内核日志里的WireGuard相关信息 dmesg | grep wireguard
验证配置的正确姿势
先通过VNC控制台登录VPS,执行wg-quick up ~/wg0.conf,然后:
- Ping一个公网地址(比如
8.8.8.8),看是否能正常连通 - 同时尝试用SSH重新连接VPS,看是否能成功
如果这两步都没问题,说明配置已经修复了SSH断连的问题。
你先试试这些方法,应该能解决你的问题。要是还有疑问,可以把wg0.conf里的敏感信息(比如私钥、公钥)隐去后贴出来,咱们再接着调。
备注:内容来源于stack exchange,提问作者Reyraa




