每当我的系统获得新的 IPv6 地址时,如何运行 systemd oneshot 服务?

Bre*_*ret 5 networking dhcp d-bus systemd ipv6

每当我的系统从网络路由器获得分配给它的新 IPv6 地址时,我都想运行 systemd oneshot 服务(这将在启动时进行,并且在整个正常运行时间内定期进行)。

理想情况下,此事件仅适用于 IPv6 地址更新,不包括潜在的 IPv4 地址更改。

是否可以使用 systemd 监控此类事件的网络 dbus 活动?

我的最终目标是在发生这种情况时命中动态 DNS 端点,以便该系统的 IPv6 DNS 记录避免过时。

Cel*_*ada 3

很多年前我写过类似的东西,叫做(缺乏想象力)autoddns。

它不调用 systemd 服务(我认为当时不存在 systemd!),但它确实调用外部进程来执行 DNS 更新(nsupdate)。然而,它确实直接在网络链路级别监视 IP 地址的添加和删除,这意味着无论它们如何发生(手动管理配置、SLAAC、DHCP、网络管理器),它都会拾取它们。当发生变化时它会立即做出反应。它确实支持过滤器(设计用于自动排除链接本地地址等内容),因此您可以让它尊重 IPv6 地址更改并忽略 IPv4 地址更改,如您所愿。

也许您可以使用它或修改它来满足您的需求。我认为,检测 IP 地址变化并对其做出反应的大部分功能都在watchip.c中。