一般情况下,DNS记录类型里用的最多的是A记录、CNAME别名记录、MX邮件记录、PTR反向记录等类型。而且一般来说,DNS里存在的记录就能解析,不存在的记录就不能解析。但有些情况下,希望凡是无法匹配已存在的记录的请求,也能有一个有效的记录返回,即设定一个默认值。比如有一个DNS域usa.com,用户可能试图访问了blabla.usa.com,但这blabla不是系统里已经存在的记录,则一般情况下会DNS查询失败。

    但是如果设定了一个默认值,比如将所有已明确定义的记录意外的查询都转向一个IP或CNAME,那么不再有查询失败的错误。处理时可以直接将这类请求转向主站点。这样可以提高用户体验满意度。

   方法就是使用DNS通配符。不过由于通配符记录不是明确定义的行业标准,可能在不同的DNS系统上实施起来会有细微的区别。下面仅以BIND 9.5为例。

   1. A记录类型:

*    IN    A    10.10.10.10 



   所有对不存在的记录的查询会统一得到一个A记录IP地址的返回值。

   2. CNAME记录类型:

 

*   IN    CNAME  default.usa.com. 

 



   所有对不存在的记录的查询会统一得到一个CNAME记录的返回,即重定向到default.usa.com,从而获得后者的IP地址(当然也可能有多次CNAME的情况,这里略过)。

   通配符类型可以出现在记录项的头部,中部,或尾部。比如可以仅仅是一个*,也可以是*.abc,也可以是a.*.c或a.b.*。例如:

*.sanfrancisco.california   IN   CNAME   default.usa.com. 

    注意:通配符不会对本域做解析。要实现本域解析,可以添加以下记录:

usa.com.   IN   A   10.10.10.10  

    或通过先添加普通A记录再用CNAME的方式:

 

default   IN   A   10.10.10.10 

usa.com.   IN  CNAME default  

    下面略作利弊分析。

    :有利于提高用户体验,不会被DNS解析失败的问题而困扰;对web应用代码中可能出现的一些错误域名也能起到容错作用。

    :由于通配符并非像A记录等其他类型那样有严格明确的标准,可能在使用过程中(比如跨不同DNS系统的域文件传输/递归解析等)出现某些意料之外的问题。