Skip to content

DNS

源码 packages/dn42_schemas/dn42_schemas/dns.py

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


DnsSpec

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

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


DnsZoneSpec

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

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


DnsRecordSpec

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

DnsForwardSpec

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