OpenVPN 服务和 OpenVPN 守护进程有什么区别?

OpenVPN 服务和 OpenVPN 守护进程有什么区别?

我想在 Debian 机器上运行 OpenVPN 客户端。我可以看到服务正在运行:

# sudo service openvpn status
● openvpn.service - OpenVPN service
   Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2017-12-28 19:01:14 UTC; 1h 8min ago
  Process: 19416 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 19416 (code=exited, status=0/SUCCESS)

我可以通过守护进程启动 OpenVPN,以便它在后台运行

# sudo openvpn --config /etc/openvpn/client.conf --daemon

我可以通过它的日志记录以及检查我的 WAN IP 来确认它是否按预期运行。

但是,我可以停止 OpenVPN 服务...

# sudo service openvpn stop
# sudo service openvpn status
● openvpn.service - OpenVPN service
   Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Thu 2017-12-28 20:10:00 UTC; 37s ago
  Process: 19416 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 19416 (code=exited, status=0/SUCCESS)

但是守护进程仍然在后台运行,我仍然连接到 VPN,并且仍然获取公共 VPN IP 地址。

那么服务和守护进程有什么区别?它们不是互相依赖的吗?

我的目标是让 OpenVPN 在计算机启动时在后台运行,并让它无限期地继续运行。我本来打算将服务设置为在启动时运行,但上述操作现在让我对如何实现这一目标感到困惑...

更新:这是该文件:/lib/systemd/system/openvpn.service

# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target

答案1

在此上下文中,“服务”是用于控制守护进程、启动、停止、重新加载等的接口。openvpn 服务只是 systemd 控制下的 openvpn 的一个实例。


看起来您尚未为 client.conf 启用 openvpn 服务配置。Systemd 可以独立控制 openvpn 的多个实例。这些实例分别命名为 openvpn@<config>.service,其中 <config> 是 .conf 文件的名称,例如[email protected]。创建配置后,您需要将其作为服务启用

systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].

这是一个使用传递的参数来运行指定实例的模板文件。/lib/systemd/system/[email protected]

要控制特定实例,您可以像平常一样发出 systemctl 命令

systemctl status openvpn@client
systemctl start openvpn@client
systemctl stop openvpn@client

ETC。

相关内容