被锁在 VPN 服务器之外:留好第二条进入通道
隧道坏了不应该连你修服务器的能力一起带走。在真正需要之前,先规划、测试并复查一条独立的运维通道。
你打开控制台,改了一条防火墙规则,正连着的隧道就消失了。改动是对的,重载是错的,如今回到那台机器的唯一路径,正是你刚弄断的那条。第二条进入通道是设计决策,它必须存在于故障之前,而不是故障之中。
先盘点手上还剩什么
从眼前这个控制台页面开始,列出不依赖隧道的路径。带串口或 VNC 会话的云厂商网页控制台算一条。独立网络上的管理界面算另一条。物理接触算第三条,而这条恰恰是人们在最糟的时刻才发现缺的。
| Path | Depends on | Usually fails when |
|---|---|---|
| Provider console | Account access and the provider's own API | Credentials live in a wiki only reachable over the tunnel |
| Management subnet | A second interface and its own routing | The bad change was a global route or firewall policy |
| Second tunnel | A different listener, port and credentials | Both listeners were changed in the same edit |
| Physical or local console | Being in the building | Nobody has been in the building for a year |
把第三列当成故障清单来读,而不是当成抽象说法。其中两条路径通常因为同一个原因失效。这张表就是让你在故障开口解释之前先察觉到的办法。
独立性本质上是依赖问题
如果恢复账号的密码存在一个只能经隧道访问的服务里,它就不独立。同一台主机、同一端口、同一防火墙策略上的第二个 VPN 同样不独立,因为弄坏前一条的那次改动,会把两条一起弄坏。
沿着链条往下走,给每一步所需的条件命名。网络可达性、名称解析、认证来源,以及管理服务本身,是四项彼此独立的依赖;共享其中任意一项的路径,都会继承那次故障。
从没测过的路径值得单独怀疑。几个月没打开的控制台可能需要用邮件重设密码,而那个邮箱可能就托管在你够不着的那台机器上。趁一切正常时把路径测一遍,你就会在某个平静的下午发现这件事。
用第二条通道完成一次受控变更
在控制台上给将要改的配置拍个快照或复制一份。只改一处。重载服务,先读结果再动别的,因为同时改两处会把恢复变成实验。
做这件事时让恢复会话保持打开。第二条通道的全部价值就在于它能扛住你正在修改的东西,所以先把它关掉,就等于去掉了它唯一有用的属性。
从恢复通道验证,而不是凭记忆
真正要紧的检查是常规路径有没有回来,而恢复会话正是你按顺序确认它的地方:
systemctl status openvpn-server@server --no-pager ss -lntup | grep -E ':(1194|443)\b' nft list ruleset | sed -n '1,40p' journalctl -u openvpn-server@server --since '-10 min' --no-pager | tail -n 30
先读服务状态,再看监听,再看规则,最后看日志。服务在跑却没有监听,问题指向服务配置;有监听却没有可达的规则,问题指向过滤。顺序重要,因为每一步都在收窄下一步;直接跳到日志,通常读到的是描述症状而非原因的错误。
systemctl 文档 覆盖了这里用到的状态与重启行为,包括一次失败的重载如何让旧进程继续运行。恢复到一个自洽的版本,胜过从一台修不了服务器的客户端反复重连。如果你在改动前定的回滚条件已经满足,就恢复并停下。
让资产清单保持最新
人员或基础设施变动时复查访问清单。趁一切正常时测试恢复通道。退役那些上次重组之后没人用过的账号。两个过期账号加一张过期的证书,在周二只是顺手清理,在周日就是一次事故。
记录谁能用每条路径、它允许什么、凭据如何轮换。没有归属者的恢复路径会变成一扇被遗忘的门,那是与被困在门外不同的一类故障。