根据OpenVPN 2 手册:
persist-tun 和 persist-key 选项用于确保在底层网络中断时自动恢复连接。使用用户 nobody 和组 nobody(或组 nogroup)时,这些选项是必需的。
这在实践中意味着什么?
在服务器端有一个 tun0 设备。OpenVPN 进程以 nobody 和 nogroup 身份运行。到目前为止一切正常。但是 persist-tun 选项到底有什么用呢?无论我是否连接,相同的 tun0 设备仍然存在。
来自另一个问题:
删除 persist-tun 选项。如果没有该选项,VPN 链接将断开,tun 设备将关闭并被删除。当然,问题是删除该选项意味着您需要以 root 而不是 nobody 身份运行 VPN 守护程序。因为作为 nobody 帐户,OpenVPN 在重新建立连接时将无法创建新的 tun 设备。
删除 persist-tun 选项后,tun 设备仍然存在,但没有连接的客户端。
请详细解释一下 persist-tun、persist-key、user nobody、group nogroup 和 keepalive 选项所涉及的过程。
答案1
使用的原因有 3 个persist-tun
1- 您需要 root 权限才能管理接口。如果 OpenVPN 更改为 nobody/nogroup,则无法添加/删除接口。因此,有必要保留 tun 接口。
2- 如果删除了 tun 接口,您将丢失指向它的路由。这意味着您的流量将以未加密的方式通过默认路由传输。这可能是您不希望发生的事情。
3- 如果接口未被移除(持续存在),则不会执行 up/down 脚本。手册中写道:
–persist-tun 不要关闭并重新打开TUN / TAP设备或通过SIGUSR1或–ping-restart重新启动运行上/下脚本。SIGUSR1是一种类似于SIGHUP的重启信号,但它提供对重置选项的更细粒度的控制。
类似解释也出现在2.4 手册为了persist-key
–persist-key 不通过 SIGUSR1 或 –ping-restart 重新读取密钥文件。此选项可与 –user nobody 结合使用,以允许由 SIGUSR1 信号触发的重新启动。通常,如果您在 OpenVPN 中放弃 root 权限,则守护进程无法重新启动,因为它现在无法重新读取受保护的密钥文件。
此选项通过在 SIGUSR1 重置期间保留密钥来解决问题,因此无需重新读取它们。
答案2
我认为这更像是客户端设置。如果客户端断开连接,在某些情况下它会删除隧道,然后重新创建隧道。我不确定它在服务器端是否能做任何有用的事情。因为服务器端基本上一直处于运行状态。