两件不同的事被当成一件来卖:把一台机器变成 VPN 服务器,和给一台要连别人网关的笔记本加装 VPN 客户端。安装脚本回答的是第一件,回答不了第二件,README 怎么写都没用。拿 setup-ipsec-vpn 安装脚本 当具体例子:它在受支持的 Linux 主机上用 Libreswan 和 xl2tpd 搭起 IPsec/L2TP、Cisco IPsec 或 IKEv2 服务器。那是一台服务器的部署契约,不是任何机器的通用配方。自己搭 VPN 服务器之前要先定下什么,因为后面的所有事情都围绕这台服务器展开。

主机得有人管

同时还跑着别的东西、或者防火墙由云控制台而不是本机守护进程管理的主机,和一台干净的设备是两种部署。把你实际执行的策略和实际运行的版本写下来,然后拿两者去对照上游的发行说明,而不是去年的博客文章。对照之后你会发现,真正变了的往往是你没有记录下来的那些默认值。

装通不等于通了。对 IPsec 来说,主机前面的网络必须放行 UDP 500 和 4500,某些实现还要放行 ESP 协议本身。一个安全组丢掉 50 个包之后脚本照样成功退出,装出来的服务器谁也连不上,而安装输出里一个字都不会提。等你能从外面连上时,往往已经过去了好几个小时的排障时间。

安装器实际接管了什么

看它写下的配置文件、IPsec 密钥、L2TP 守护进程设置、PPP 选项以及引用它们的 systemd 单元。项目 README 说改动前会备份现有配置,这很有用,但那不等于主机备份。

今天指向默认分支的下载地址,下个月可能返回不同的内容,所以记下你跑过的提交或版本,并留一份自己的副本。同时先想清楚哪些设置会被发行版软件包接管、哪些会在重跑脚本或手工修改时被脚本覆盖:这两条维护路径的失败方式不一样。

脚本给不了你的东西

自动化产出的是能用的部署,然后就停在那里。它不决定隧道该碰到哪些私有资源,那是入口策略问题,主机防火墙和上层网络都有自己的意见。它也不决定谁拿凭据、怎么发下去、人走了怎么收回访问。它更不决定坏更新之后 重启之后怎样把服务器恢复,而这恰恰是人们最不想在最坏的时间点发现的那部分。

客户端配置和看得见的密钥是访问材料,不是安装日志。生成之后贴进共享频道的配置就是一个账号,安装摘要的截图也一样适用这条标准。为恢复服务所必需的身份状态维护一份受保护的清单,并记下从那以后撤销过哪些凭据。

第一个客户端就是验收测试

用一个有授权的客户端、按你实际启用的协议验收部署。确认名字对得上、隧道里的地址和你预期的一样、外部地址没有变。把这次检查写下来,因为下一次有人会依赖它。

如果想要的组合已经不再被支持,就在安装之前选一条还在维护的路线。把旧配置复活,只会在下一次更新时再坏一次,还要多花一个晚上去修。

写一页交接文档

写短一点:主机、构建它的版本、必须开放的端口、涉及的组件,以及谁负责更新。这一页就够下一个人用了。

主机变化时就回顾这一页,而不是只在出事时才看。一份从不更新的交接文档,很快就会变成一份错误的文档。

相关文章