在 Raspberry Pi 4(运行 Raspbian 32 位 Lite)上运行 OpenVPN 时,我遇到了一个有趣的问题。当 OpenVPN 通过 SSH、作为 systemd 服务或在 Docker 容器内运行时,该问题似乎与身份验证过程有关。具体情况如下:
当我在 Raspberry Pi(连接了显示器和键盘)上直接运行 OpenVPN 时,我可以使用 --auth-user-pass 标志和包含我的凭据的文件成功建立 VPN 连接。
但是,当我通过 SSH 运行相同的 OpenVPN 命令时,VPN 连接失败。具体来说,VPN 客户端发送身份验证,但未收到服务器的响应,最终导致超时。
如果我通过 SSH 运行 OpenVPN 并在提示时手动输入我的凭据,则 VPN 连接就会成功。
当将 OpenVPN 设置为在启动时运行的 systemd 服务时,它总是会失败。但是,如果我在启动后手动启动或重新启动服务,则成功与否取决于在哪里完成:如果直接在 Raspberry Pi 上完成,则会成功,但如果通过 SSH 完成,则会失败。
在 Docker 容器内部,其行为类似于 systemd 服务。当直接从 Raspberry Pi 运行 Docker 容器时,VPN 连接成功,但当通过 SSH 运行 Docker 容器时,VPN 连接失败。
当我故意输入错误的凭据时,我可以重现相同的行为(服务器没有响应,导致超时),这让我相信该问题与身份验证过程有关。
我已确认身份验证文件在所有情况下均可访问且包含正确的凭据。
我使用的 SSH 帐户与直接在 Raspberry Pi 上工作时使用的帐户相同。
总之,OpenVPN 的身份验证过程表现不一致:直接在 Raspberry Pi 上运行时可以正常工作,但通过 SSH、作为 systemd 服务或在 Docker 容器中运行时会失败。我想知道为什么会出现这种差异以及如何解决它。任何见解都将不胜感激。
谢谢你!
以下是VPN连接超时时的部分日志:
UDP link remote: [AF_INET]someip:someport
WWWW
[UNDEF] Inactivity timeout (--ping-exit), exiting
TCP/UDP: Closing socket
SIGTERM[soft,ping-exit] received, process exiting