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
使用默认设置时,最小配置如下:
IPv4 地址
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"
IPv6 地址
从 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"
配置说明
"service"
每个 DDNS 提供商和主机都需要定义一个 “service”
如果你希望向 DDNS 提供商更新 IPv4 和 IPv6 地址,也需要分别定义 (从 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-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:' 更多详细信息请参考 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' 值 |
|
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.sh 和 Get IP from modem scripts collection (*)若 option ip_source 值为 'script' 时为必填项 |
|
check_interval | number | no | '10' | 设置检查本地 IP 是否变化的时间间隔。 允许单位值: 'seconds'(秒) 'minutes'(分钟) 'hours'(小时)。 |
|
check_unit | string | no | 'minutes' | ||
force_interval | number | no | '72' | 当未检测到 IP 变化时,强制向服务提供商发送一次更新。如果你的 DDNS 记录未更新,请查阅 DDNS 提供商的文档。 允许单位值: 'minutes'(分钟) 'hours'(小时) 'days'(天) 自 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)脚本在发生通信错误时终止执行前的重试次数。 |
|
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 |
|
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,请启用此选项。 |
|
proxy | string | no | (none) | 自 CC 15.05 起 如果访问 WEB 上的 HTTP/HTTPS 页面需要代理(Proxy),也可以在此处配置,用于向 DDNS 提供商发送更新。 如果你在上方配置了 option use_https '1',则需要在此处设置 HTTPS 代理;否则设置 HTTP 代理。option ip_source 'web'),因为该请求也会通过所配置的代理发送。语法: [user:password@]proxy:port IPv6 地址必须放在方括号 '[...]' 中。 |
|
force_ipversion | boolean | no | '0' | 自 CC 15.05 起 通过 disable(0) / enable(1) 控制此选项。 通常系统会根据多种设置(大多在软件编译时决定)来选择更偏好使用 IPv4 或 IPv6 进行通信。一些 DDNS 提供商会根据你发送更新请求时所使用的 IP 地址来更新其 DDNS 记录。 因此,你可能需要强制使用你希望更新的 IP 版本,或者根据你的环境出于其他原因强制指定 IP 版本。 |
|
bind_network | string | no | (none) | 自 CC 15.05 起 指定在检测 IP 和发送更新时用于通信的网络。 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 服务器。 |
"ddns部分"
从 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。 |
问题与已知 Bug
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.x 或 uclient-fetch (the default for OpenWRT 21.02.0) 时会返回错误 “badauth”
原因: 为了与 OpenDNS正常工作, Wget 1.x 需要在命令行中添加 --auth-no-challenge 选项
解决方法: 安装并使用 curl, 通过在 Global 段中设置 use_curl = 1