无头 OpenVPN:受监控的会话还是托管服务
通过 SSH 启动 OpenVPN 是对远程网络的一次改动。请选择受监控的会话或自有服务,并准备好凭据和回退通道。
通过 SSH 运行 OpenVPN 会在这台远程机器上、在该机器的执行环境中启动它。这属于远程网络改动,而不是远程按一下按钮。两种合理模式是受监控的前台会话和自有服务,它们的准备、凭据和故障表现各不相同。
两种模式,一个配置文件
两种模式使用同一个配置文件,也都会改动主机上的路由。区别在于启动时是否有人在场,以及会话结束后会发生什么。
| Mode | Useful for | What it needs |
|---|---|---|
| Supervised foreground session | A connection with a human watching and able to type | A usable terminal, a reviewed profile and recovery access |
| Managed service | An unattended lifecycle that starts without a login | Owned configuration, supported credential delivery and restart policy |
前台模式适合有人在场、受监控的连接。服务模式适合无需任何人登录就应启动的连接。把两者混在一起,既让前台进程继续运行,又在同一配置上启用服务,是这里最常见的自找故障。
前台会话到底是什么
前台 OpenVPN 进程在隧道建立期间应当持续运行。Initialization Sequence Completed只表示初始化完成,并不意味着你要等提示符返回。桌面图形界面把这项长时间工作藏在窗口后面,正因如此,人们才期待 SSH 命令也这样表现。它并不会。
单独检查应用的访问权限。一个被占用的终端和一行日志既不能证明成功,也不能证明失败。
无人值守服务需要什么
服务以自己的账户、工作目录和文件系统限制启动,这些都与你的 shell 不同。请使用明确路径和合适的所有权,而不是依赖你碰巧所在的位置。给单元设一个你真正想要的自动重启策略,因为无退避的连接循环会刷满日志并惹恼对端。然后验证它在重启后能起来,而不是等你下次登录之后。
交互式 MFA 天生就会破坏无人值守的场景。如果配置文件需要人工输入验证码,它就不是无人值守服务;把一次性验证码存起来也不是凭据设计。要主动做出这个决定,而不是在开机时才发现。
凭据是四种不同的输入
OpenVPN 的手册把控制台输入、凭据文件、私钥口令和管理界面驱动的交互区分开来。用户名加密码是一回事,加密密钥的口令是另一回事。按需提供凭据的管理接口是第三种。请选择符合你认证设计的机制,而不是因为某次碰巧能用就把所有东西拼进一个文件。
保护好承载身份或私有材料的配置文件和日志。服务账户会读它们,拥有正确组成员资格的人也会读。
一个所有者,以及一条回退通道
在启用宽泛的隧道路由之前,先保住你的 SSH 管理通道。端点失效的全局隧道配置可能让机器失联,而修复时又需要一台你没安排的带外控制台。经批准的带外控制台或有意的管理回退策略就是保险。
为日常运维选定唯一的配置所有者。自动服务与前台进程争夺同一批接口、路由和解析器状态时,产生的故障看起来像服务商的问题。受监控的运行用正常中断停止,托管的运行通过其管理器停止,而不是杀掉所有名为 openvpn 的进程。
需要写下来的区别很简单:受监控的运行可以依赖你的会话,而无人值守的服务不可以。