You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SystemD实现SoftEther VPN客户端启动后自动执行DHCP(dhclient vpn_vpn)

如何通过SystemD实现SoftEther VPN客户端启动后自动执行DHCP(dhclient vpn_vpn)

嘿,这个需求很常见,有两种简单可靠的方案可以实现,我给你详细说说:

方案一:直接修改现有SoftEther VPN客户端服务

这种方法最直接,你只需要在现有的systemd unit文件里添加启动后执行的命令,同时加上停止前释放IP的操作,让整个流程更干净:

打开你的SoftEther VPN客户端service文件(比如/etc/systemd/system/softethervpn-client.service),修改[Service]部分:

[Service]
Type=forking
ExecStart=/srv/vpnserver/vpnclient start
ExecStop=/srv/vpnserver/vpnclient stop
# 启动VPN后自动执行DHCP获取IP
ExecStartPost=/usr/sbin/dhclient vpn_vpn
# 停止VPN前先释放IP地址
ExecStopPre=/usr/sbin/dhclient -r vpn_vpn

注意:dhclient的路径可能需要根据你的系统调整,比如有些系统是/sbin/dhclient,你可以用which dhclient命令确认准确路径。

修改完成后,重新加载systemd配置并重启服务生效:

systemctl daemon-reload
systemctl restart softethervpn-client.service

方案二:创建独立的DHCP配置OneShot服务

如果你不想修改原有的VPN服务,也可以单独创建一个依赖于它的oneshot服务,这样逻辑更清晰:

  1. 创建一个新的systemd unit文件,比如/etc/systemd/system/softethervpn-dhclient.service,内容如下:
[Unit]
Description=SoftEther VPN Client DHCP自动配置
After=softethervpn-client.service
Requires=softethervpn-client.service

[Service]
Type=oneshot
# 执行DHCP获取IP
ExecStart=/usr/sbin/dhclient vpn_vpn
# 停止时释放IP
ExecStop=/usr/sbin/dhclient -r vpn_vpn
# 让systemd认为服务执行完后仍保持活跃状态,这样停止时能触发ExecStop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  1. 启用并启动这个新服务:
systemctl daemon-reload
systemctl enable --now softethervpn-dhclient.service

额外注意事项

  • 确保vpn_vpn是你的SoftEther VPN客户端创建的正确网络接口名,你可以在启动VPN后用ip link命令查看确认
  • 如果dhclient执行后需要保持后台运行,你可以加上-d参数,但通常默认的行为已经能满足需求
  • 测试的时候可以先手动启动VPN服务,然后检查IP是否成功获取:ip addr show vpn_vpn

备注:内容来源于stack exchange,提问作者Ingwie Phoenix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:44:34