首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Systemd-networkd:在DHCP客户端提供新地址后运行脚本

Systemd-networkd:在DHCP客户端提供新地址后运行脚本
EN

Unix & Linux用户
提问于 2018-09-18 05:18:07
回答 3查看 13.1K关注 0票数 6

我在ubuntu18.04服务器上。我需要运行一个在CloudFlare (某种DynDNS脚本)上更新IP地址的脚本。在以前的版本中,我可以使用接口enp1s0的DHCLIENT出口挂钩来实现这一点。

但是,systemd现在使用自己的内置DHCP客户端。一旦向DCHP客户端提供了新的IP地址,我如何编写执行bash脚本的系统单元?

Systemd正在管理接口enp1s0:

代码语言:javascript
复制
#sudo  systemctl status systemd-networkd
● systemd-networkd.service - Network Service
   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled-runtime; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-18 01:54:16 +08; 10h ago
     Docs: man:systemd-networkd.service(8)
 Main PID: 878 (systemd-network)
   Status: "Processing requests..."
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/systemd-networkd.service
           └─878 /lib/systemd/systemd-networkd

Sep 18 01:54:27 xxx systemd-networkd[878]: enp1s0: Configured
EN

回答 3

Unix & Linux用户

发布于 2018-09-18 15:01:22

我不知道任何systemd解决方案,但是您可以使用ip monitor有效地监视对接口的更改,并将输出输送到一个脚本中,以查找您感兴趣的更改。例如,如果我做了

代码语言:javascript
复制
$ ip monitor address dev enp3s0

然后向接口enp3s0添加一个新的别名地址,我得到行

代码语言:javascript
复制
2: enp3s0    inet 192.168.77.77/24 brd 192.168.77.255 scope global enp3s0:1
       valid_lft forever preferred_lft forever

我想你会看到类似的dhcp变化。

如果您愿意,可以编写一个C程序来进行同样的操作,请参阅此ipevent.c

票数 2
EN

Unix & Linux用户

发布于 2018-10-14 01:01:43

许多软件包不适用于systemd-networkd ..。目前还没有。(参见启动板上的bug报告)

目前,ISC客户端(dhclient)仍然占主导地位,特别是在许多ISP的DHCP服务器所需的自定义DHCP选项中(我正在关注您,Juniper ),以及支持操作系统脚本。

因此,转到/etc/systemd/network编辑处理动态IP寻址和禁用systemd的DHCP的配置文件如下:

代码语言:javascript
复制
[Match]
Name=eth1
[Network]
# Using ISC DHCP client (dhclient) instead of systemd-networkd
# Better support of DHCP-Options and OS-specific script supports
DHCP=no

然后确保ISC客户端(dhclient)在/etc/network/interfaces中的如下内容:

代码语言:javascript
复制
auto eth0
iface eth0 inet dhcp

对于/etc/dhcp/dhclient.conf

代码语言:javascript
复制
send host-name "Wireless_Broadband_Router";
send domain-name "home";
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, time-servers, log-servers,
    default-ip-ttl, dhcp-requested-address, dhcp-lease-time,
    dhcp-server-identifier,dhcp-parameter-request-list,
    vendor-class-identifier,dhcp-client-identifier,
    www-server,
    dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, 
    dhcp6.sntp-servers,
    interface-mtu,
    ntp-servers;

最后一步是让systemd将ISC DHCP客户端作为守护进程启动。在/etc/systemd/system/dhclient@.service中创建文件。

代码语言:javascript
复制
# cat /etc/systemd/system/dhclient@.service 
[Unit]
Description=dhclient on %I
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
# ExecStart=/sbin/dhclient -4 -q %I
ExecStart=/sbin/dhclient -4 -v -pf /run/dhclient.%I.pid -lf /var/lib/dhcp/dhclient.%I.leases %I

[Install]
WantedBy=multi-user.target

并通过从shell执行以下操作,使systemd守护进程可以使用ISC DHCP客户端:

代码语言:javascript
复制
sudo systemctl daemon-reload   #makes the dhclient@.service available
sudo systemctl enable dhclient@eth0.service
sudo systemctl start dhclient@eth0.service
票数 1
EN

Unix & Linux用户

发布于 2019-02-25 14:28:30

看看网络调度员。它是一个守护进程,它在各种网络事件上运行来自/etc/networkd-dispatcher/*.d的脚本。有关事件的详细信息通过环境变量传递给脚本。

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

https://unix.stackexchange.com/questions/469716

复制
相关文章

相似问题

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