1月 082014
 

前段时间尝试用PostgreSQL 作为BIND9的后端数据存储玩玩,发现真不错,需要的Postgresql数据库表结构简单,查询效率高、及时生效。SOA记录也是一条语句,但发送邮件需要的TXT记录出现了问题,按照SPF格式写入了以下TXT记录:“v=spf1 ip4:60.166.118.xxx include:xuplus.com -all”,结果使用nslookup查询出来的情况竟然是这样的:

服务器: google-public-dns-a.google.com
Address: 8.8.8.8

非权威应答:
xuplus.com text =

“v=spf1”
“ip4:60.166.118.xxx”
“include:xuplus.com”
“-all”

这样的记录是没有办法使用的,使用SPF记录测试工具(http://www.openspf.org/Tools)是没有办法通过。查阅了一番资料发现无法解决这个问题,翻阅bind9 源代码发现在rdata.c文件的dns_rdata_tofmttext函数中使用了的linebreak就是空格字符,那么向spf这种需要包含空格的记录怎么办呢?经过尝试可以添加斜线(\)作为转义字符,由于数据库记录中斜线也需要转义,所以将记录对应的rdata字段值改成 ‘v=spf1\\ ip4:60.166.118.xxx\\ include:xuplus.com\\ -all’这样的即可,这样之后再次nslookup就可以发现结果正常了:

服务器: cache2.ahwhtel.net.cn
Address: 202.102.199.68

非权威应答:
xuplus.com text =

“v=spf1 ip4:60.166.118.xxx include:xuplus.com -all”

xuplus.com nameserver = dns2.xuplus.com
xuplus.com nameserver = dns1.xuplus.com
dns1.gi-rms.com internet address = 60.166.118.xxx
dns2.gi-rms.com internet address = 60.166.118.xxx

BIND 9也有转移字符:斜线(\)。

 回复

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>