Ubuntu 20.04:服务仅在用户首次登录后运行

Ubuntu 20.04:服务仅在用户首次登录后运行

我正在尝试设置一个 openvpn 服务器,它使用 nat 让用户可以访问 AWS 中的多个 VPC。

为此,我正在运行命令...

iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens5 -j MASQUERADE

...其中 10.10.0.0/24 是 openvpn 分配的私有 IP 范围。

虽然让这个 iptables 命令在服务器重新启动时自动运行,但我遇到了麻烦。

我目前正在做的方式是使用以下服务......

/etc/systemd/system/vpn_iptables.service:

[Unit]
Description=Set up the firewall
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/vpn_iptables

[Install]
WantedBy=multi-user.target

脚本本身是这样定义的......

/usr/local/sbin/vpn_iptables:

#!/usr/bin/sh
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o ens5 -j MASQUERADE

我一直在绞尽脑汁试图找出看似不一致的行为。伪装似乎有效,但突然间就失效了。

我最终发现,重新启动后我需要至少一次 ssh 进入服务器,然后它才能正常工作。

这使得调试出现的问题变得非常困难。

我猜这与我定义 my 的方式有关vpn_iptables.service,但我对此了解不够,无法理解我做错了什么。

我想要做的是让服务始终在网络可用时立即启动,但不应等到用户登录。

我的理解是,这WantedBy=multi-user.target是为了确保系统准备好接受用户连接,但我不知道为什么它实际上需要用户登录。

任何指示将不胜感激。

另外我应该提到我已经尝试了各种其他方法来自动运行它,包括将其放入 /etc/rc.local 以及 cloud-init per-boot 脚本等中。其他似乎都不起作用。我假设这与这些不同脚本运行的时间有关。

答案1

如果它对其他人有帮助,我找到了解决方案......

我只需要将 WantedBy 更改为...

[Install]
WantedBy=openvpn.service

现在我更好地理解了这实际上意味着什么,这真的很有意义。

相关内容