1. 程式人生 > >一個錯誤的CNAME讓DNS跪了

一個錯誤的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.

原文來自微信公眾號:運維技術實踐;作者:胥峰