首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OpenVPN客户端连接上重新启动系统单元

如何在OpenVPN客户端连接上重新启动系统单元
EN

Server Fault用户
提问于 2020-04-07 04:05:53
回答 1查看 786关注 0票数 0

出于一般目的,最好知道如何检测网络更改并重新启动服务--但我的具体用例是希望在OpenVPN客户端连接后重新启动sshd。如果不对默认服务进行广泛的重新配置(我想避免这种情况),似乎sshd就会立即在基本网络服务上启动(这在单元文件包含After=network.target时是有意义的)。

还有sshd特有的-我不希望它在外部接口上监听端口22。一开始,我以为我可以通过防火墙来保护它,但是由于我发现我的防火墙脚本没有运行correctly...better来保护这两种方式。是的,我已经发现了愚蠢的错误并修复了防火墙(用于在/etc/default/ START_FIREHOL=yes中配置所需的记录)。

看起来,如果sshd配置为侦听显式IP,但IP不是活动的,则侦听器将不会启动,也不会在IP活动时自动绑定。由于可能最好让sshd启动任何其他有效的侦听器,而不是完全不启动,所以我不想“要求”OpenVPN客户端在sshd启动之前完成。这就是我的挑战。

我在OpenVPN中找到了"ipchange“设置--但我无法让它在短时间内工作,而且我还是希望有一个更通用的解决方案供将来使用。

我尝试过的任何针对OpenVPN客户端实例的依赖都会触发太快--客户机单元显示为“已启动”,尽管它尚未完成DHCP初始化。这意味着IP还没有激活。

我没有找到任何与网络接口状态相关的systemd单元依赖关系的文档,所以我想知道一些想法。

EN

回答 1

Server Fault用户

发布于 2020-04-07 04:05:53

我不知道这是否是最好的解决办法--但这是个可行的办法。

当创建/激活接口时,Systemd会自动创建网络设备单元。在我的例子中,作为第一个OpenVPN连接,所涉及的单元是“sys设备-虚拟-net-tun0.Device”。当IP被配置时,这个单元似乎被计算为“已启动”。

我没有为systemd单元找到明确的“重新启动”配置设置,因此我创建了以下服务:

代码语言:javascript
复制
openvpn-online.service

[Unit]
Description=Restart Network Services on VPN Connection
Conflicts=shutdown.target
Requires=openvpn-client@myclient.service sys-devices-virtual-net-tun0.device
BindsTo=openvpn-client@myclient.service sys-devices-virtual-net-tun0.device
After=openvpn-client@myclient.service sys-devices-virtual-net-tun0.device

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart sshd
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

这个feels...inelegant...but,它工作得很完美。现在sshd很早就开始了,然后在OpenVPN客户机完成DHCP后重新启动。

Systemd还允许多个ExecStart=行用于oneshot单元--因此,如果其他服务需要,我可以对此进行调整。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1011225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档