Skip to content

DNS ​

源码 packages/dn42_schemas/dn42_schemas/dns.py。

DesiredState.dns 为 None 等价于不部署 DNS;enabled=False 则保留配置但不输出 Corefile。控制面侧的三级共享模型(组 → zone → 记录)如何组装成本对象,见 共享 DNS。


DnsSpec ​

字段类型必填说明
enabledbool否(默认 True)是否部署 DNS
bind_addresseslist[str]是DNS 任播与服务地址的唯一真源;逐项走 validate_ip_address
cache_ttl_secondsint(ge=0)否(默认 300)缓存 TTL
zoneslist[DnsZoneSpec]否(默认 [])本地接管的 zone
forwardslist[DnsForwardSpec]否(默认 [])转发规则

bind_addresses 驱动 _normalize_dns_anycast 合成 dns-anycast 接口与任播前缀,见 normalize 钩子。这是全项目最干净的单一真相源实现:改一处地址,接口、内核路由、BGP 宣告全部自动跟随。


DnsZoneSpec ​

字段类型必填说明
zonestr是zone 名。允许单 label,允许含 /(RFC 2317 反向委派);走 validate_domain_name(require_multi_label=False, allow_slash=True)
records_refstr是外部 record 集的逻辑引用(如 zone://example.dn42)
primary_nsstr | None否SOA 主 NS FQDN;有内联 records 时必填
admin_emailstr | None否SOA 管理邮箱的 zone 写法;有内联 records 时必填
soa_refreshint(ge=0)否(默认 86400)SOA refresh(秒)
soa_retryint(ge=0)否(默认 7200)SOA retry(秒)
soa_expireint(ge=0)否(默认 3600000)SOA expire(秒)
soa_minimumint(ge=0)否(默认 3600)SOA minimum(秒)
default_ttlint(ge=0)否(默认 3600)zone 的 $TTL,单条记录未给 TTL 时使用
recordslist[DnsRecordSpec]否(默认 [])内联记录;非空即触发 zone 文件渲染

模型级校验:有内联 records 时 primary_ns 与 admin_email 必须同时提供(用于构造 SOA)。


DnsRecordSpec ​

字段类型必填说明
namestr是记录名:相对 owner、@(apex)或 FQDN
typestr是限 A / AAAA / CNAME / NS / PTR / TXT / MX / SRV / CAA,归一化为大写
valuestr是rdata;语义由调用方保证
ttlint | None(ge=0)否单条 TTL;省略则回落 zone 的 default_ttl

DnsForwardSpec ​

字段类型必填说明
zonestr是转发 zone;允许单 label
upstreamslist[str]是上游 resolver;逐项走 validate_ip_address