#ip-address #dns-server #client-server #zone #home #dynamic #nsd

程序+库 dynnsd

用于将家用服务器的 IP 地址添加到 nsd 的动态 DNS 工具

1 个不稳定版本

0.2.3 2021 年 9 月 26 日

#40 in #home

每月 25 下载

GPL-3.0-only

63KB
775

dynnsd

动态 DNS 条目的客户端和服务器。

  • 给你的家用路由器分配 DNS 名称的能力。

dynnsd 设计用来替代 dyndns,该软件被 Oracle 收购,随后将其域名注册业务卖给了第三方。

考虑到虚拟服务器的低廉价格以及 NLnetLabs 的出色工作,可以以每月约 5 美元的价格运行一对工业级强度的 DNS 服务器。

dynnsd 提供服务的动态 DNS 部分,即为主路由器提供有效的互联网 DNS 地址。

位于 NAT 路由器后面的服务器运行客户端,指示其 IP 地址,dynnsd 服务器代码写入包含 A 记录的区域文件,并要求 nsd 重新读取其配置。

dynnsd-client 分别将 IP 发送到 nsd 的实例,因此不需要区域传输。实例可能不同步,也可能两个都没有正确的 IP。

动态 DNS 协议

协议由客户端和服务器之间的 4 条消息组成。客户端运行在家用网络上,服务器与 nsd 服务器在同一个主机上。

dynnsd-client 发送一个 ip_request 消息,它尚不知道自己的 IP 地址,dynnsd-client 可能位于 NAT 路由器后面,其源 IP 地址和端口可能已更改。

dynnsd 服务器收到一个 ip_request 时,它发送一个包含客户端源 IP 地址的 ip_reply

dynnsd-client 接收到 ip_reply 时,它向一个或多个 dynnsd 服务器发送一个 ip_confirm 请求,以指示它们应在 DNS 中添加 IP 地址。

dynnsd 服务器收到一个包含与源 IP 地址匹配的 IP 地址的 ip_confirm 时,它创建一个 DNS A 记录。

; ddns
homesrv      5m  IN  A     23.24.25.26

并向 nsd 发送 HUP。

区域更改协议

dynnsd 还支持一个区域更改消息,该消息可以更改主区域文件,并向 nsd 发送 HUP。

例如,将区域故障转移到备用数据中心或将区域置于维护模式。动态主机被复制到新的区域。

您还可以向 nsd 发送 ZONE_HUP,例如在 rsync 静态区域文件更改之后。

消息

消息是包含固定长度字段的72字节UDP消息。

IP_REQUEST

  • 4字节 - 23.1.0.0 - 头部,魔数,消息类型,0,0
  • 4字节 - 0.0.0.0
  • 32字节 - 随机数
  • 32字节 - sha256哈希

IP_RESPONSE

  • 4字节 - 23.2.0.0
  • 4字节 - 源IP地址(人类可读字节序)
  • 32字节 - 随机数据
  • 32字节 - sha256哈希

IP_CONFIRM

  • 4字节 - 23.3.0.0
  • 4字节 - 源IP地址
  • 1字节 - 主机索引,每个dynnsd服务器支持多达256个客户端
  • 23字节 - 随机数
  • 8字节 - Unix纪元的分钟(纪元 / 60)
  • 32字节 - sha256哈希

IP_CREATED

  • 4字节 - 23.4.0.0
  • 4字节 - 主机索引,0,0,0
  • 32字节 - 随机数
  • 32字节 - sha256哈希

ZONE_CHANGE

  • 4字节 - 23.5.0.0 - 头部,魔数,消息类型,0,0
  • 4字节 - 区域索引.0.0.0
  • 32字节 - 随机数
  • 32字节 - sha256哈希

ZONE_CHANGED

  • 4字节 - 23.6.0.0 - 头部,魔数,消息类型,0,0
  • 4字节 - 区域索引.0.0.0
  • 32字节 - 随机数
  • 32字节 - sha256哈希

ZONE_HUP

  • 4字节 - 23.7.0.0 - 头部,魔数,消息类型,0,0
  • 4字节 - 区域索引.0.0.0
  • 32字节 - 随机数
  • 32字节 - sha256哈希

依赖项

~2.3–3MB
~63K SLoC