一個錯誤的CNAME讓DNS跪了
故障現象:
1,通過DNS管理平臺新增或者更新的DNS記錄,使用rndc reload顯示執行成功,但不能生效。
2,BIND程序重啟後,無法提供服務。
3,日誌報錯:
15-Feb-2017 12:04:38.604 general: error:dns_master_load: sdo.com/zone_beijing_CMCC:198: sdo.com: CNAME and other data
15-Feb-2017 12:04:38.604 general: error:zone sdo.com/IN/view_beijing_CMCC: loading from master filesdo.com/zone_beijing_CMCC failed: CNAME and other data
15-Feb-2017 12:04:38.604 general: error:zone sdo.com/IN/view_beijing_CMCC: not loaded due to errors.
注意這一行“15-Feb-2017 12:04:38.604 general: error: dns_master_load:sdo.com/zone_beijing_CMCC:198: sdo.com: CNAME and other data”裡面提示198行的錯誤
經過仔細分析,其實可以看到在194行,它定義了一個CNAME的RR(resource record),這導致了和198行的產生了衝突。
解決方法:
把194行的CNAME去掉,或者用A記錄來把訪問sdo.com指向到某伺服器組。
總結:
在BIND中,對於一個資源記錄(RR)指定了CNAME後,不能再指定其他型別的RR。
請參考RFC1034
https://tools.ietf.org/html/rfc1034
注意以下重點段落:
A CNAME RR identifies its owner name as an alias, and
specifies the corresponding canonical name in the RDATA section of the
RR. If a CNAME RR is present at a node, no other data should be
present; this ensures that the data for a canonical name and its aliases
cannot be different. This rule also insures that a cached CNAME can be
used without checking with an authoritative server for other RR types.
原文來自微信公眾號:運維技術實踐;作者:胥峰