如何将子域委托给Samba域控制器并配置统一DNS服务,同时解决BIND9的DNS格式错误问题
嘿,我看你现在搭了Samba服务器,想让局域网里所有客户端都用统一的BIND9 DNS,结果遇到了BIND日志里的格式错误和解析超时问题,咱们一步步来捋清楚解决办法。
你的当前环境与问题现象
先把你提供的信息整理一下,方便排查:
日志信息
NS1 日志
10-Mar-2024 10:27:35.502 DNS format error from 10.3.0.9#53 resolving _ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.wit.yooml.lan/SRV for 10.3.0.1#35268: non-improving referral
10-Mar-2024 10:27:35.502 FORMERR resolving '_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.wit.yooml.lan/SRV/IN': 10.3.0.9#53
NS2 日志
10-Mar-2024 10:26:42.653 all zones loaded
10-Mar-2024 10:26:42.653 running
10-Mar-2024 10:26:52.649 resolver priming query complete: timed out
10-Mar-2024 10:26:52.649 managed-keys-zone/internal: Unable to fetch DNSKEY set '.': timed out
现有配置片段
NS1 配置(internal视图)
view "internal" { match-clients { 192.168.0.0/...
问题分析与解决步骤
1. 先搞定NS2的根域解析超时问题
这个问题其实很常见,BIND9默认会尝试从全球根DNS服务器获取DNSKEY验证,但如果你的服务器没法访问外网,或者网络受限,就会超时卡住。咱们这么调整:
- 编辑NS2的
named.conf.options配置文件,添加转发器设置,让BIND用靠谱的公网DNS或者你内网的上级DNS来转发查询:
options { forwarders { 8.8.8.8; # Google DNS 1.1.1.1; # Cloudflare DNS # 要是有内网上级DNS,优先填这里的IP }; forward only; # 让BIND只走转发器,别自己去连根服务器了 };
- 如果你不需要DNSSEC验证的话,也可以在options里加一行禁用它,彻底避免这类超时:
dnssec-validation no;
改完之后重启BIND服务生效:sudo systemctl restart bind9
2. 解决NS1的FORMERR(DNS格式错误)问题
这个错误是说,NS1向10.3.0.9(应该是你的Samba域控制器吧?)查询AD需要的SRV记录时,收到了格式不对的响应,或者是 referral(也就是对方让NS1去别的服务器查,但这个流程出问题了)。分两种情况处理:
情况一:你想把_msdcs.wit.yooml.lan子域委托给Samba域控制器
这种情况下,得确保BIND的主域配置里正确添加了子域委托记录:
- 打开你的
wit.yooml.lan区域配置文件,添加以下记录,把_msdcs子域的解析权交给Samba DC:
_msdcs.wit.yooml.lan. IN NS dc01.wit.yooml.lan. dc01.wit.yooml.lan. IN A 10.3.0.9
- 同时要确认Samba DC自带的DNS服务已经正确配置了
_msdcs.wit.yooml.lan区域,包含所需的SRV记录。你可以在Samba服务器上跑个命令验证:host -t SRV _ldap._tcp.dc._msdcs.wit.yooml.lan,如果能返回类似_ldap._tcp.dc._msdcs.wit.yooml.lan has SRV record 0 100 389 dc01.wit.yooml.lan.的结果,说明Samba那边没问题。
情况二:你想让BIND直接处理所有AD相关的SRV记录
如果不想委托子域,那就在BIND的wit.yooml.lan区域文件里手动添加这些AD必需的SRV记录,比如:
_ldap._tcp.Default-First-Site-Name._sites.dc._msdcs.wit.yooml.lan. IN SRV 0 100 389 dc01.wit.yooml.lan. _ldap._tcp.dc._msdcs.wit.yooml.lan. IN SRV 0 100 389 dc01.wit.yooml.lan. _kerberos._tcp.dc._msdcs.wit.yooml.lan. IN SRV 0 100 88 dc01.wit.yooml.lan.
另外还要检查NS1的internal视图配置,确保match-clients包含了所有需要访问的客户端IP段(比如你的10.3.0.0/24和192.168.0.0/24这些),不然客户端可能被匹配到其他视图,导致解析出错。
3. 配置所有客户端使用统一DNS
这一步很简单,分两种客户端类型:
- DHCP客户端:在你的DHCP服务器(不管是路由器还是专门的DHCP服务)里,把DNS服务器地址设置为你的NS1和NS2的IP,这样客户端获取IP时会自动用上这两个DNS。
- 静态IP客户端:手动修改网卡配置,把DNS服务器字段改成NS1和NS2的IP就行。
- 别忘了让Samba服务器本身也用你的BIND DNS,避免出现DNS循环解析的问题。
验证步骤
改完之后咱们验证一下,确保没问题:
- 在客户端上跑
nslookup wit.yooml.lan,看能不能正确解析到你的服务器IP。 - 跑
nslookup -type=SRV _ldap._tcp.dc._msdcs.wit.yooml.lan,看能不能返回正确的SRV记录,没有格式错误提示。 - 查看NS1和NS2的日志(
journalctl -u bind9),确认没有新的FORMERR或者超时错误。
备注:内容来源于stack exchange,提问作者GaMMachiPo

