#ip-address #update #dns #gandi #system #live #automatic

app gandi-live-dns

自动更新 Gandi Live DNS 中的 IP 地址。使得使用 Gandi 作为动态 DNS 系统成为可能。

3 个稳定版本

1.8.0 2023 年 2 月 13 日
1.7.0 2023 年 2 月 2 日
1.5.0 2022 年 11 月 13 日

#2 in #gandi

每月 32 次下载

MIT 许可证

51KB
992

Gandi Live Dns Rust

Contributors tests Test coverage report lint checks Releases Docker Image Size MIT license

一个程序,可以设置 Gandi 域配置中配置的 DNS 条目的 IP 地址。由于 Gandi 的 LiveDNS API,这创建了一个动态 DNS 系统。

如果您想托管网络服务但没有静态 IP 地址,此工具将允许您将您的域指向正确的 IP 地址。此程序可以更新一个或多个域和子域的 IPv4 和 IPv6 地址。它可以作为一次性的工具,由 systemd 计时器或 cron 管理,或者作为一个长期运行的过程,自己重新安排。

目录

用法

Gandi Live DNS API 每分钟限制 30 个请求。此程序尊重此速率限制:如果您有超过 30 个域需要更新,程序将暂停并等待一分钟,加上随机延迟以确保不会超过速率限制。

系统软件包

某些 Linux 发行版有可用的软件包。

欢迎为其他发行版贡献以发布此软件包!

预构建的二进制文件

gandi-live-dns 提供了与版本一起的预构建二进制文件。查看 版本页面 以获取最新版本。这些二进制文件是静态链接的,并为 Linux 和 Windows 提供支持,包括 Linux 版本的 ARM 架构。

从版本页面下载最新版本,从存档中提取它,并将其放置在您的 $PATH 中以使用它。

  • 创建一个名为 gandi.toml 的文件,然后将 example.toml 的内容复制并粘贴进去。
  • 按照示例配置中的说明获取您的API密钥,并将其放入配置文件中。
  • 按照配置文件中的示例设置您想要更新的条目。
  • 在包含配置文件的目录中运行 gandi-live-dns 以更新DNS条目。

使用 Docker

使用支持x86_64、arm64、armv6和armv7平台的 seriousbug/gandi-live-dns-rust Docker镜像。按照以下步骤使用这些镜像。

  • 创建一个名为 gandi.toml 的文件,然后将 example.toml 的内容复制并粘贴进去。
  • 按照示例配置中的说明获取您的API密钥,并将其放入配置文件中。
  • 按照配置文件中的示例设置您想要更新的条目。
  • 运行以下命令:

Docker默认不支持IPv6。如果您需要更新IPv6地址,请查看相关页面以启用IPv6或直接使用预构建的二进制文件。

如果您遇到关于找不到配置文件的错误,请确保命令中包含配置文件的完整路径($(pwd)/gandi.toml 部分)。否则,Docker将创建一个目录。

从源代码构建

此包还发布在 crates.io 上,名称为 gandi-live-dns。如果您想从源代码构建并安装,您可以使用 cargo install gandi-live-dns 来构建和安装它。

自动化

作为后台进程运行

gandi-live-dns 可以作为守护进程运行,在后台定期更新IP地址。要这样做,请添加命令行选项 --repeat=<延迟秒数>。当提供时,此工具在更新IP地址后不会退出,而会继续执行定期更新。

如果您使用Docker,可以在启动时添加此选项。

# This will update your IP now, then repeat every 24 hours
docker run --rm -it -v $(pwd)/gandi.toml:/gandi.toml:ro seriousbug/gandi-live-dns-rust:latest --repeat=86400

或者使用 docker-compose.yml 文件,将其添加到参数中。

gandi-live-dns:
  image: seriousbug/gandi-live-dns-rust:latest
  restart: always
  volumes:
    - ./gandi.toml:/gandi.toml:ro
  # Repeat the update every day
  command: --repeat=86400

跳过的更新

在后台进程模式下,如果自上次更新以来您的IP地址没有更改,工具将避免向Gandi发送更新。只要工具继续运行,它将在重启时发送更新,即使您的IP地址没有更改。您还可以通过在配置文件顶部添加 always_update = true 来覆盖此行为。

使用 Systemd 计时器

“打包”文件夹包含一个Systemd服务和定时器,您可以将其用于自动运行此工具。默认情况下,它将在每次启动后更新IP地址,并且至少每天更新一次。您可以调整定时器以加快速度,但请避免不必要地过载Gandi的服务器。

  • gandi-live-dns.timergandi-live-dns.service 放入 /etc/systemd/system
  • gandi-live-dns 二进制文件放入 /usr/bin/
    • 您也可以将其放入 /usr/local/bin 或其他目录,只需确保更新服务文件中的路径
  • 创建文件夹 /etc/gandi-live-dns,并将您的 gandi.toml 放入其中
  • 为服务创建用户: useradd --system gandi-live-dns --home-dir /etc/gandi-live-dns
  • 确保只有服务可以访问配置文件: chown gandi-live-dns: /etc/gandi-live-dns/gandi.toml && chmod 600 /etc/gandi-live-dns/gandi.toml
  • 使用 systemctl enable --now gandi-live-dns.timer 启用定时器

开发

本地构建

cargo buildcargo build --release 对于开发和发布构建已足够。不需要特殊指令。

发布版本

要创建发布版本,首先设置 crossdocker。确保您使用 docker login 登录到 Docker。然后按照以下步骤操作

  • 根据 semverCargo.toml 中的版本号升级
    • 提交并推送更改
  • 运行 ./make-release.sh

    这将构建二进制文件,然后将它们打包到归档中,以及构建和上传 Docker 镜像。

  • 在 Github 上创建发布版本
    • 确保在 master 上创建发布版本的标签
    • 将二进制归档上传到 Github 发布
  • 更新 AUR 版本
  • 运行 cargo publish 以更新 crates.io 版本

替代方案

贡献者

jannikac
jannikac

💻

依赖关系

~11–25MB
~392K SLoC