DDNS 客户端配置

另请参阅: DDNS 客户端文档

  • 由于功能扩展,并非所有设置在所有 OpenWrt 版本中都受支持。
  • 如果某项设置并非在所有版本中都可用,说明中会注明支持的版本。
  • 请注意, ddns-scripts 设计为每个配置段仅支持一个主机或 IP 协议版本。
  • 从 BB 14.07 起, ddns-scripts 仅支持 IPv4 地址的更新。
  • 从 ddns-scripts 2.7.6 (trunk) 开始,选项命名将进行调整,以便更好地进行功能分组。
  • 更新 ddns-scripts 到新版本时,现有配置文件中的选项名称将自动重命名。
  • 此外,一些选项也将 在全局配置中可用 ,因此无需在每个服务段中重复定义。
  • 在服务段中定义的选项将覆盖全局段设置。

ddns-scripts 包配置文件位于 /etc/config/ddns

你可以在 GitHub 上找到最新版本的完整文档 ddns.sample_config
使用默认设置时,最小配置如下:

config service "myddns_ipv4"
	option service_name	"example.org"
	option domain		"yourhost.example.org"
	option username		"your_username"
	option password		"your_password"
	option interface	"wan"
	option ip_source	"network"
	option ip_network	"wan"

:!: 从 CC 15.05 起支持

config service "myddns_ipv6"
	option use_ipv6		"1"
	option service_name	"example.org"
	option domain		"yourhost.example.org"
	option username		"your_username"
	option password		"your_password"
	option interface	"wan6"
	option ip_source	"network"
	option ip_network	"wan6"

:!: ** 每个 DDNS 提供商和主机都需要定义一个 “service”
:!: 如果你希望向 DDNS 提供商更新 IPv4IPv6 地址,也需要分别定义 ** (从 CC 15.05起)

名称
(旧)
名称
(新)
类型 必填项 默认值 描述
enabled boolean yes '0' 启用(1)或禁用(0)。
interface network name yes (none) 指定用于检测外部 IP 的网络接口(如 wan)。当该接口启动时,DDNS 脚本将开始监控并更新 IP。
use_ipv6 boolean no '0' 是否使用 IPv6 地址。 BB 14.07 起不支持 IPv6,
从CC 15.05 支持。
service_name string yes(*) (none) 用哪个DDNS?
/usr/lib/ddns/services 中选择。
从 CC 15.05 起 如果 option use_ipv6 启用(1) 从 /usr/lib/ddns/services_ipv6 中选择一个
最新信息 Github.com
(*) 如果没有你想要的DDNS提供商, 删除这个选项然后使用 'option update_url' 或者从 CC 15.05 起使用'option update_script' 替代。
update_url string yes(*) (none) 查看DDNS提供商配置信息。使用他们的URL
(*) 若设置 'option service_name' 则弃用该选项
update_script string no (none) 从 CC 15.05 起 自定义更新脚本路径 /path/to/update_script.sh
若选择的DDNS提供商因为脚本原因不更新IP地址,原因是他们添加额外参数或步骤导致,需要写个自定义脚本更新。
详情看 update_sample.sh
:!: 使用该选项请移除'option service_name' 并且 'option update_url' 与该选项二选一
domain string yes (none) 使用的主机名或“FQDN
(此主机名或“FQDN”必须已在DDNS服务商处注册)
:!: 即使该DDNS服务商更新时无需提交此信息,也请务必填写。ddns-scripts将通过此域名比对本地IP与已注册IP。
:!: 自DD版本起 ddns-scripts 使用 'option lookup_host' (详见下文) 检测您的已注册IP。
因此,此选项适用于部分服务商支持的特殊多主机更新配置场景。
lookup_host string yes (none) 自 DD 起 ,不再使用 Option domain (上文) 来获取已注册的 IP。请在此配置你希望用于查询当前 IP 地址的 DNS 名称(“FQDN”)。
username string yes(*) (none) DDNS服务商账户的用户名
请查阅DDNS服务商帮助文档,部分服务商会将“主机名”等不同信息作为DDNS更新时的“用户名”。
更多详细信息可参考 DDNS client
(*)若您的DDNS服务商更新时无需此信息,请填写 “X” 作为占位符。
password string yes(*) (none) DDNS服务商账户的密码
请查阅DDNS服务商帮助文档,部分服务商会将令牌ID等不同信息作为DDNS更新的“密码”。例如,若使用afraid.org服务,请将25位随机生成的令牌填写在此字段中。
更多详细信息可参考 DDNS client
(*)若您的DDNS服务商更新时无需此信息,请填写 “X” 作为占位符。
use_https boolean no '0' 禁用(0) / 启用(1) HTTPS 与您的 DDNS 服务商进行安全通信。
部分服务商若不通过HTTPS发送更新请求,可能会出现问题。
如果使用了上面的 update_url不要使用 'http“s”:', 而是使用 'http:' **
:!: 需要已安装 “Wget” 或 “cURL”
更多详细信息请参考 DDNS client | | cacert | | string | no(*) | (none) | 证书目录路径/path/to/certificates 或 证书文件路径/path/to/certificate.crt
“ca-certificates” 将证书安装到 /etc/ssl/certs 目录。
更多详细信息请参考 DDNS client
//
(*)如果 option use_https 值为'1'** (启用)时为必填项//
自 CC 15.05 已支持 'IGNORE'
:!: 将通过HTTPS传输数据但不验证DDNS服务商的服务器证书 (存在安全风险)
ip_source string yes 'network' 用于定义向DDNS服务商发送本地IP地址的检测来源。
可选参数如下:
- 'network' 需要配置 'option ip_network'
- 'web' 需要配置 'option ip_url'
- 'interface' 需要配置 'option ip_interface'
- 'script' 需要配置 'option ip_script'
详情请见下文。
ip_network string no(*) 'wan' 在 “ip_network” 选项选择一个该配置文件 /etc/config/network 中的网络接口 (例如 “wan”)。 如果选择了 “wan”,将会发送该接口当前的IP地址
(*)如果 option ip_source 值为 'network'时为必填项
ip_url string no(*) (none) 使用指定的网站检测当前外部 IP,该网站会返回发起请求主机的 IP 地址。如果处于 NAT 后面,这是最佳选项,因为本地网络或接口都不会拥有公共 IP(也就是大内网)。
如果 DDNS 提供商未提供或未建议此项,请从 列表 中选择一个 URL。
(*) 若 option ip_source 值为 'web'时为必填项
ip_interface string no(*) (none) 选定一个物理接口 (例如 'eth1') 检测当前IP地址,该接口只用于检测IP地址。
(*) 若 option ip_source 值为 'interface'时为必填项
ip_script string no(*) (none) 使用自定义脚本检测当前IP地址。
完整路径: '/path/to/script.sh'.
详情参阅: getlocalip_sample.shGet IP from modem scripts collection
:!: 脚本必须具有可执行权限。
(*)若 option ip_source 值为 'script' 时为必填项
check_interval number no '10' 设置检查本地 IP 是否变化的时间间隔。
允许单位值: 'seconds'(秒) 'minutes'(分钟) 'hours'(小时)。
:!: 小于 5 分钟没有意义,因为互联网中的 DNS 服务器大约需要 5 分钟才能同步。
:!: 这两个选项必须同时设置,或同时不设置。
check_unit string no 'minutes'
force_interval number no '72' 当未检测到 IP 变化时,强制向服务提供商发送一次更新。如果你的 DDNS 记录未更新,请查阅 DDNS 提供商的文档。
允许单位值: 'minutes'(分钟) 'hours'(小时) 'days'(天)
:!: 最小值必须大于或等于 check_interval(见上文)。
:!: 这两个选项必须同时设置,或同时不设置。

自 CC 15.05 起 支持值 '0'。该值会在一次成功更新后停止脚本执行。
force_unit string no 'hours'
retry_interval number no '60' 如果在检测、发送或更新过程中发生错误,脚本会重试相关操作。
在这里定义开始重试前需要等待的时间。
允许单位值:'seconds'(秒) 'minutes'(分钟)
:!: 这两个选项必须同时设置,或同时不设置。
retry_unit string no 'seconds'
retry_max_count number no '0' 自 CC 15.05 起(23→master,retry_count 重命名为 retry_max_count)脚本在发生通信错误时终止执行前的重试次数。
:!: 当设置为 '0' 时,将无限次重试。
use_syslog boolean no '0' 自 BB 14.07 起 通过 disable(0) / enable(1) 控制是否将事件记录到 syslog(系统日志)。
自 CC 15.05 起 记录到 syslog 的事件级别如下:
0 == 禁用
1 == info、notice、warning、errors
2 == notice、warning、errors
3 == warning、errors
4 == errors
:!: 导致 ddns-scripts 停止运行的严重错误(critical errors)始终会记录到 syslog。
use_logfile boolean no '1' 自 CC 15.05 起 通过 disable(0) / enable(1) 控制是否记录到日志文件。
默认路径: /var/log/ddns/[sectionname].log
在 'ddns' 区段中可以修改 所有 日志文件的路径(见下文)。
dns_server string no (none) 自 CC 15.05 起 通常情况下,当前(互联网上)注册的 IP 会根据本地定义的名称解析策略检测得到(例如 /etc/resolve.conf 等)。
在此处指定一个 DNS 服务器,以替代默认值。
你可以使用 FQDN、主机名或 IP 地址。
force_dnstcp boolean no '0' 自 CC 15.05 起 通过 disable(0) / enable(1) 控制是否使用 TCP 协议发送 DNS 请求。
默认情况下,每一次 DNS 调用都是通过 UDP 协议完成的。一些互联网服务提供商提供的调制解调器会缓存 UDP DNS 请求,并将所有请求重定向到本地调制解调器缓存,再由其转发到外部服务器。
若要强制 DNS 请求使用 TCP,请启用此选项。
:!: 需要安装 BIND host 软件包。
proxy string no (none) 自 CC 15.05 起 如果访问 WEB 上的 HTTP/HTTPS 页面需要代理(Proxy),也可以在此处配置,用于向 DDNS 提供商发送更新。
如果你在上方配置了 option use_https '1',则需要在此处设置 HTTPS 代理;否则设置 HTTP 代理。
:!: 不应在此情况下检测当前 IP(上方的 option ip_source 'web'),因为该请求也会通过所配置的代理发送。
语法: [user:password@]proxy:port :!: port 为必填!
IPv6 地址必须放在方括号 '[...]' 中。
force_ipversion boolean no '0' 自 CC 15.05 起 通过 disable(0) / enable(1) 控制此选项。
通常系统会根据多种设置(大多在软件编译时决定)来选择更偏好使用 IPv4IPv6 进行通信。一些 DDNS 提供商会根据你发送更新请求时所使用的 IP 地址来更新其 DDNS 记录。
因此,你可能需要强制使用你希望更新的 IP 版本,或者根据你的环境出于其他原因强制指定 IP 版本。
:!: 需要安装 Wget 或 cURL 软件包以及 BIND host 软件包!
bind_network string no (none) 自 CC 15.05 起 指定在检测 IP 和发送更新时用于通信的网络。
:!: 需要安装 Wget 或 cURL 软件包!
Wget 会绑定到该网络的 IP,而 cURL 会绑定到该网络的物理接口。
rec_id string no (none) 自 DD 起 如果设置了此项,并且使用的服务是 CloudFlare,则会更新指定的记录(当同一域名存在多个记录时非常有用)。
若未设置,将自动更新记录(但如果同一域名存在多个记录,将会随机选择其中一个)。
is_glue boolean no '0' 自 DD 起 如果 DDNS 记录是 glue record,并且需要将注册的 IP 与该 glue record 进行比较,则此选项为必填。
此选项需要安装 bind host,并且只有在使用 dns_server 选项时才有效。dns_server 的值必须是定义该 glue record 的 DNS 服务器。

** 从 CC 15.05 起支持
:!: **不建议更改此设置。

:!: 仅支持段名为 “global”
:!: 此设置由 ddns-scripts 和对应的 luci-app-ddns 使用。

Name
(old)
Name
(new)
Values Required Default Description
allow_local_ip upd_privateip boolean no '0' 禁止(0) / 允许(1) 向 DDNS 提供商发送私有/指定 IP。
被屏蔽的 IPv4:0/8、10/8、100.64/10、127/8、169.254/16、172.16/12、192.168/16
被屏蔽的 IPv6:::/32、f000::/4
date_format ddns_dateformat string no '%F %R' 设置用于在日志文件和 LuCI WebUI 中显示日期的日期格式。
支持的格式代码参阅: look here.
run_dir ddns_rundir string no '/var/run/ddns' 设置用于存放 '*.pid' 和 '*.update' 文件的目录。
每个正在运行的服务区段都有独立的文件。
log_dir ddns_logdir string no '/var/log/ddns' 设置用于存放 '*.log' 文件的目录。
如果 option use_logfile 设置为 '1'(启用),每个正在运行的服务区段都有独立的日志文件(见上文)。
log_lines ddns_loglines number no '250' 设置 .log 文件在自动截断前所保存的行数。
use_curl boolean no '0' 如果已安装 Wget 和 cURL 软件包,则默认使用 Wget 进行通信。
设置为 '1' 则改为使用 cURL。

:!: Wget 1.x 在使用多个 WAN 接口(如 mwan)时无法正常工作。 Issue 8277

原因: wget 1.x 无法绑定到接口,只能更改 IP 地址(bind-address)

解决方法: 使用 curl,通过设置 use_curl

(未经测试)wget2(截至 2021 年 3 月尚未发布)支持 bind-interface


:!: 从 2021 年 6 月起, OpenDNS 在使用 Wget 1.xuclient-fetch (the default for OpenWRT 21.02.0) 时会返回错误 “badauth

原因: 为了与 OpenDNS正常工作, Wget 1.x 需要在命令行中添加 --auth-no-challenge 选项

解决方法: 安装并使用 curl, 通过在 Global 段中设置 use_curl = 1

  • Last modified: 2025/12/19 07:57
  • by starsfall