在退役工单开出的那天,你的客户端仍然能够连接。配置文件还留在应用里,它照常协商,隧道像什么都没变一样建立起来。此时应当按与搭建服务相反的方向来做:从客户端清单开始,向外走到监听端口,再到防火墙,最后处理那些比它们都活得久的凭据。关闭虚拟机是最后一步,而不是第一步。本指南假定你对主机有控制台访问权限,并且有权修改客户端记录和 DNS。

先梳理客户端清单

打开任何分发配置文件的系统,在动服务器之前先读清单。每一条都代表一台自认为拥有访问权限的设备:手机、笔记本、分支机构路由器、每晚同步的容器。把清单导出到工单里,因为主机一旦消失,就再也没有 wg show 能告诉你谁曾经连过。

把每台设备分到替换端点、不再需要或未知三类。真正要紧的是未知那一类,因为几个月后有人会在抽屉里翻出这些配置文件并尝试使用。用你处理访问申请的同一渠道发出通知,并在其中写明旧端点停止响应的日期。

吊销身份,而不只是删除文件

两种不同的动作都被叫作吊销。在 WireGuard 中,一个对等端只有在其公钥出现在带 AllowedIPs 条目的 peer 段里时才被授权,所以从笔记本上删掉配置文件对服务器毫无影响。删掉 peer 段并重新应用配置,同时不丢弃你要保留的 peer,正如 wg(8) 手册所述:

wg show
wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
wg syncconf wg0 <(wg-quick strip wg0)

wg syncconf 是帮你省下一次维护窗口的那部分。它就地根据文件重建接口,因此移除一个 peer 不会拆掉其他人正在使用的隧道。如果你要退役整台主机而不只是一个 peer,顺序仍然重要,因为这些密钥可能在其他地方也被信任。

在 X.509 体系中,吊销动作针对证书而不是文件:openssl ca -revoke client.crt,然后 openssl ca -gencrl -out crl.pem。这只在验证方读取它的地方生效,也就是说,需要一台 OpenVPN 服务器,其中配置了 crl-verify 并在之后重新加载。如果这个网关是该 CA 的唯一使用者,CRL 在它消失那天就不再重要;如果同一个 CA 还为第二个网关签发证书,一份你从未吊销的证书仍会在那里继续工作。

账户是第三种情况,也是最常被跳过的一种。当网关针对 RADIUS、LDAP 或托管身份提供商进行认证时,账户其实存在于 VPN 之外。请到目录里把它禁用。只删掉服务器上的用户段落,会留下一份仍然有效的凭据,替换端点一旦指向同一个目录就会接受它。

关闭监听端口以及通往它们的路径

用能经受重启的方式停止服务,然后用套接字列表而不是单元状态来确认。systemctl disable --now wg-quick@wg0 会停止接口并移除 wg-quick 添加的路由和规则;systemctl disable --now openvpn-server@server 对模板化的 OpenVPN 实例做同样的事。之后分别执行 ss -lunp 和 ss -ltnp。旧端口返回空结果,才是唯一算数的证据。

wg-quick 添加的,wg-quick 会移除。你手工添加的会留下:一条持久 NAT 规则、一条防火墙放行、一条路由器端口转发、一条云安全组入站规则、一个负载均衡监听器。这些都需要显式移除,DNS 记录也一样,包括 A、AAAA 以及任何指向该名称的 CNAME。解析到死主机的名称与根本解析不了的名称,失败方式不同,这个差别会让某人耗掉一个下午。

你忘掉的那份副本就是克隆。从备份恢复的快照或虚拟机会保留主机密钥和旧 peer 列表,一旦有东西把它在同一地址上带回来,客户端就会重连到你以为已经退役的服务。请给备份集打上属于已停用服务的标签,并把它排除在自动恢复路径之外。

追查仍然指向旧端点的一切

缓存的配置文件比 DNS 活得更久。带数字地址的已保存配置在记录消失后仍会继续拨号,而常开客户端会在每次网络变化时重试。这是噪声而不是访问,因为监听端口已经关闭,但弄清你看到的是哪一种,决定你如何回复工单。

然后清扫那些没人归到 VPN 名下的依赖:探测端口的可用性检查、从主机拉取配置的备份任务、用于推送 peer 条目的自动化凭据、专为这个端点创建的恢复账户。每一条都是带自己生命周期和归属人的访问路径,所以每一条都需要一个决定,而不是悄悄删除。

验证,然后记录下来

当来自外部的测试以你预期的方式失败时,退役才算完成。从一个你不控制的网络连接旧地址和端口。被过滤或被拒绝的结果才是成功。在客户端应用里确认配置文件是被移除而不是被关闭,并且没有任何管理配置文件悄悄把它加回来。

然后记录你做了什么:端点、日期、吊销的密钥和证书、禁用的账户、备份所在位置。下一个翻到旧配置的人需要能回答它是被吊销了还是只是被删除了,而不用猜,工单里的一张短表就能做到这一点。

在关闭工单之前:

  • 客户端配置文件已移除或替换,未知设备已处理
  • peer 已移除且配置已重新应用,或证书已吊销且 CRL 已发布
  • 目录账户已禁用,而不仅是删除了本地文件
  • 服务已禁用,旧端口上不再有监听
  • 防火墙、端口转发、安全组和 DNS 记录已移除
  • 备份已打标签,快照已排除在恢复路径之外
  • 监控与自动化凭据已停用

单独验证替换端点,要用一台从未持有旧配置文件的客户端。这一次测试就能告诉你,你是真的退役了一个服务,还是只是给问题换了个名字。

相关文章