#dns-records #cloudflare #ddns #networking #ipv6 #godaddy

nightly app ddns-rs

一款易于使用的程序,可帮助您更新DNS记录

3个版本

0.1.2 2023年5月7日
0.1.1 2022年4月26日
0.1.0 2021年12月26日

#8 in #ddns

MIT许可协议

69KB
1.5K SLoC

ddns-rs

Rust CI Status Crate Status

ddns-rs 是一款易于使用的程序,可帮助您更新DNS记录。

功能

  • 同时支持 IPV4IPV6
  • 支持许多DNS提供商
  • 支持自动创建DNS记录到提供商
  • 支持多种获取IP的方法
  • 支持多任务处理

快速启动

创建配置文件 config.toml 如下所示

[base]
task_startup_interval = 5
task_retry_timeout = 10

[tasks]
t1 = {provider = "p1", family = "ipv4", interval = 10, interface = "i1", notifiers = ["n1"]}

[providers]
p1 = {kind = "cloudflare", force = false, ttl = 600, token = "your_cloudflare_token", dns = "www.example.com"}

[interfaces]
i1 = {kind = "stock", name = "eth0"}

[notifiers]
n1 = {kind = "empty"}

在后台运行

.\ddns-rs -vvv -d

作为systemd服务运行

ddns-rs 运行创建账户

sudo adduser --system --gecos "DDNS-RS Service" --disabled-password --group --no-create-home ddns

ddns-rs 移动到 /usr/bin 然后chown

sudo chown ddns:ddns /usr/bin/ddns-rs

创建 ddns-rs 所需的目录

sudo mkdir /var/log/ddns-rs
sudo chown -R ddns:ddns /var/log/ddns-rs

将您的 config.toml 移动到 /etc/ddns-rs

sudo mkdir /etc/ddns-rs
sudo chown -R ddns:ddns /etc/ddns-rs

创建systemd服务

sudo tee /etc/systemd/system/ddns-rs.service > /dev/null <<EOF
[Unit]
Description=ddns-rs service
Wants=network-online.target
After=local-fs.target network-online.target nss-lookup.target

[Service]
Type=exec
User=ddns
Group=ddns
UMask=007
PrivateTmp=false
ExecStart=/usr/bin/ddns-rs -vvv -C /etc/ddns-rs -L /var/log/ddns-rs
TimeoutStopSec=60
Restart=on-failure
SyslogIdentifier=ddns-rs

[Install]
WantedBy=multi-user.target
EOF

启动 ddns-rs

sudo systemctl daemon-reload
sudo systemctl start ddns-rs.service

启用 ddns-rs

sudo systemctl enable ddns-rs.service

文档

基础

[base]
task_startup_interval = 10
task_retry_timeout = 10

task_startup_interval 字段指定任务启动间隔。

task_retry_timeout 字段指定任务失败时的重试超时。

提供商

ttl 字段支持所有接口,用于自动创建DNS记录。

force 字段支持所有接口,意味着即使目标IP地址已经是我们要更新的值,也会强制更新记录。

kind 字段指示将使用哪个提供商。

目前,我们支持以下提供商

Cloudflare

kind = "cloudflare"
force = false
ttl = 600
token = "your_cloudflare_token"

Godaddy

kind = "godaddy"
force = false
ttl = 600
api_key = "your_cloudflare_api_key"
secret = "your_cloudflare_secret"

Fake

force = false
ttl = 600
kind = "fake"

一个占位符提供商,通常与通知器一起使用。因此,force 字段的含义略有不同,当 forcetrue 时,即使当前值与假提供商缓存的先前值相同,也会发送通知。

这里的 ttl 有不同的含义,它表示存储在 Fake Provider 中的记录将被删除的时间。

接口

目前,我们支持以下接口

  • Stock,表示从接口自身获取IP
  • Peer,表示从您指定的服务器获取IP

Stock

kind = "stock"
name = "you_interface_name"

Peer

kind = "peer"
url_v4 = "url_of_return_ipv4_address"
url_v6 = "url_of_return_ipv6_address"
ipv4_field_path = "regex:<capture_group_number:expression>"
ipv6_field_path = "json:</path_of_ip_field>"

Notifier

目前,我们支持以下通知器:

一个占位符通知器,无操作。

kind = "empty"

电子邮件

当IP地址变更时发送电子邮件。

kind = "email"
smtp_host = ""
smtp_port = ""
smtp_starttls = true
smtp_username = ""
smtp_password = ""
subject = ""
from = ""
to = ""

参数from是可选的,默认与smtp_username相同。

参数subject是可选的,默认为DDNS-RS 通知

Webhook

当IP地址变更时调用您的webhook。

kind = "webhook"
url = ""
authorization_header = ""
local_address = ""

参数local_address可以是0.0.0.0::以强制使用IP族。

任务

provider = "name_of_provider_in_the_config_file"
family = "ipv4" # ipv4, ipv6, all
interval = 10 # in second
autostart = true # default true
interface = "name_of_interface_in_the_config_file"
notifiers = ["name_of_notifier_in_the_config_file"]

许可证

MIT

依赖项

~21–37MB
~682K SLoC