排除常见DNS错误配置错误
使用互联网的大多数人可能不知道DNS(域名系统),但它是真正的看不见的力量驱动互联网,而每个人都不会看到数字和IP。 域名的全部含义就是因为DNS而存在。
介绍
一行解释DNS的最简单的方式是将域名映射到IP地址。 我不知道有多少人会知道,当有人在IE / firefox中输入域名时,浏览器会从ISP(ISP Provider)的解析器转发DNS请求,询问IP地址,并且解析程序与根服务器联系,然后系统地检索IP地址在几毫秒内。
了解DNS及其工作是最困难的计算机工程学科之一,但是大多数有经验的网络管理员在涉及DNS区域文件写入时都对此主题感到困扰。
在我继续阅读本文之前,以下是您应该记住的最重要的几点,否则你不会明白。
要记住的
1. A记录必须始终包含IP地址(映射到IP的主机)
每当指定A记录时,它必须包含右侧的IP地址。 A记录在DNS中非常重要,如果将主机名映射到IP将意味着荒谬。 所以记住这个!
2. CNAME(别名)必须包含主机名。 这里没有IP
NS的MX记录必须包含主机名。 不允许IP。
每当在DNS区域文件中指定域名时,最后使用DOT。 这个DOT是如此重要,如果你忘记了这个,你将会遇到恶梦的dns配置。
例如
example.com。
IN NS ns1.example.com。
为什么DOT? 只是因为它指示从根服务器启动查询(用点表示)
MX记录(邮件服务器)应包含主机名NOT IP。
常见的DNS术语及其含义
(i)胶水记录
胶片记录是与NS记录相关联的A记录,以向NS记录Nameservers提供“引导”信息。 (见RFC 1912第2.3节 )
domain.com。
IN NS ns1.domain.com。
domain.com。
IN NS ns2.domain.com。
ns1 IN A 11.33.55.77
ns2 IN A 22.44.66.88
在上面的例子中,我们将每个NS记录映射到IP地址(A记录),从而将Nameservers绑定到IP(即粘贴它们)。
(ii)LAMENameservers委托
给出非权威答案的Nameservers通常称为“LAME” 。 每个域必须至少有2个Nameservers,如果我要求每个域名服务器,并且如果他们有域区域信息,我将获得权威的答案。 如果不是,这是一个“跛脚的代表团”。 参见RFC 1912 2.8节 。
跛脚代表团的一个例子是
domain.com IN NS ns1.domain.com
domain.com IN NS ns2.example-server.net
ns1.domain.com配置为具有有关域的区域信息,但ns2.exserver.net未正确配置,并且没有关于域的任何信息。 所以ns1将会回覆权威的ns2将不会是“跛脚”,直到它被正确设置。
为了获得更深入的了解,我们来为example.com使用挖掘工具。
首先我们找到example.com的Nameservers:
dig example.com NS
;;
解答部分:
example.com。
158240 IN NS a.iana-servers.net。
example.com。
158240 IN NS b.iana-servers.net。
2.由于我们收到了2个域名服务器,所以我们问每个人是否给出了权威的答案。 如果标题中的权威性“aa”标志将被设置在接收到的答案中(“aa”是权威的答案)。
> dig @ b.iana-servers.net example.com NS
> dig @ a.iana-servers.net example.com NS
;;
得到答案:
;;
- >> HEADER << - 操作码:QUERY,状态:NOERROR,id:60896
;;
国旗:qr aa rd;
QUERY:1,ANSWER:2,AUTHORITY:0,ADDITIONAL:0
;;
问题部分:
; example.com。
IN NS
;;
解答部分:
example.com。
172800 IN NS a.iana-servers.net。
example.com。
172800 IN NS b.iana-servers.net。
看看旗子。
国旗:qr aa rd
由于'aa'设置在答案中,所以example.com的Nameservers都提供了权威的答案。 如果是跛脚代表团,您将无法获得权威的答案。
警告:
您不应该与NS记录一起使用CNAME(别名),并且常常会导致大多数解析器导致循环,并且经常导致“跛脚”委派。
domain.com。
IN NS ns1.domain.com。
domain.com。
IN NS ns2.domain.com。
domain.com。
在CNAME ns9.example-server.net
所以从来没有使用CNAME和NS记录。
(iii)隐形Nameservers
隐形Nameservers(或隐藏Nameservers)是不匹配/冲突的Nameservers,它们存在于域级别的域级别的根级别。
为了说明这一点,当我询问父服务器关于你的域的NS记录在根级别我得到
ns0.domain.com
ns2.domain.com
ns3.domain.com
但是当我查询域名服务器的NS记录是不一样的,就像
ns0.domain.com
ns2.domain.com
ns.example-dns.net
由于ns.example-dns.net和ns3.domain.com都被隐藏,所以都是一个“隐形Nameservers”。 虽然没有任何错误,但建议您不要在root级别和您的dns服务器中使用任何隐身Nameservers。
您可以使用dig命令在根服务器级别查找NS记录。
dig +trace @K.root-servers.net example.com NS
并要求域名的域名服务商之一。
dig @ns0.domain.com example.com NS
查找两个查询之间的任何NS不匹配。 如果在根级别缺少Nameservers,请将缺少的Nameservers添加到您的域名注册商。 如果域级别中缺少域名服务器,请将域名服务器添加到域的区域文件,并更新所有辅助Nameservers。
(iv)打开DNS服务器
运行dns服务器'open'是一个很大的安全风险,因为它从网络内部和外部回答递归查询。 这意味着任何人都可以查询您的服务器的IP地址,您的dns服务器将会回答。
为了说明这一点,我们有两个域名服务器为域example.com运行绑定。
ns1.example.com
ns2.example.com
我们要求ns1.example解决google.com外部域名,如果我们在答案部分获得IP地址(A记录),那么这意味着它是一个'开放dns服务器'。
dig @ns1.example.com google.com
dig @ns2.example.com google.com
;;
全局选项:printcmd
;;
得到答案:
;;
- >> HEADER << - 操作码:QUERY,状态:SERVFAIL,id:12107
;;
标志:qr rd;
QUERY:1,ANSWER:0,AUTHORITY:0,ADDITIONAL:0
;;
问题部分:
; google.com。
在一个
;;
查询时间:32毫秒
由于没有ANSWER部分或IP地址,因此Nameservers不构成公开的dns服务器。
如果碰巧运行bind8或更高版本,那么您所要做的就是在选项中设置“递归否”,以禁用dns服务器回答递归查询。
选项{
....
递归否
}
(v)区域转移(AXFR请求)
区域传输由辅助Nameservers完成,以从主或主Nameservers检索域的最新和更新的区域信息。 只能向二级域名服务器提供区域传输,而不是向开放的世界提供区域传输,因为它具有很大的安全隐患,并可能会将网络的内部部件暴露给攻击者。
要请求example.com的区域传输,我们需要首先询问主域名服务器。 用dig看下面的例子。
dig @ns1.example.com example.com
如果您看到带有完整区域文件的输出,则必须禁用区域传输。 在大多数情况下,您将看到连接失败或REFUSED,这意味着不允许区域传输,这是一件好事。
区域文件写入中的常见DNS错误
1.没有CNAME指向NS记录
domain.com。
IN NS ns1.domain.com。
domain.com。
IN NS ns2.domain.com。
domain.com。
在CNAME ns9.example-server.net ----->错误
将CNAME与NS一起放置,所有的namserver都将失败,并导致跛脚授权。 不要这样做
2.避免在同一子网(/ 24)或同一服务器上的IP上运行DNS服务器。
DNS的全部目的是为了将Nameservers分散在不同的地理位置,以便如果一个dns失败,另一个将工作。 尽管在相同的服务器或子网上运行这两个Nameservers是非常常见的做法,但它不会提供容错。 如果服务器失败,您的Nameservers将失败,您的站点不会加载。
ns1 IN A 75.33.22.xx ----->同一子网/ 24
ns2 IN A 75.33.22.xx ----->同一子网/ 24
正确的GLUE
始终使用A记录将粘贴到您的NS记录到IP地址,否则您的某个Nameservers将失败。
domain.com。
IN NS ns1.domain.com。
domain.com。
IN NS ns2.domain.com。
ns1 IN A 1.2.3.4 -----> GLUE
ns2 IN A 2.4.6.9 -----> GLUE
参见RFC1912 。
4.没有重复的MX记录
domain.com。
IN MX mail.domain.com。
domain.com。
IN MX mail.domain.com ----> DUPLICATE
5.允许端口53用于UDP和TCP连接
如果使用防火墙,请确保不阻止端口53用于DNS tcp和udp请求。 默认情况下,dns查找使用UDP协议,而区域传输和通知使用端口53的TCP协议。
端口53 UDP = Dns请求
端口53 TCP =区域传输
CNAME不能与MX主机共同使用。
不要指定指向MX记录的CNAME或别名。
domain.com。
IN MX 10 mail.domain.com。
邮件IN CNAME domain.com。
---------->错误
而是使用A记录直接映射到IP地址。
mail IN A 11.33.55.77 ---> CORRECT
参见RFC1912 。
MX记录不应包含IP地址
domain.com。
IN 10 MX mail.domain.com。
---->正确
domain.com。
IN 20 MX 11.22.33.44 ----->错误
正确的方法是将mx主机粘贴到A记录。
domain.com。
IN MX 10 mail.domain.com。
----->正确
mail IN A 11.33.55.77 ----------> CORRECT
NS记录不应包含IP地址
始终使用NS记录为您的域指定Nameservers。 它应该是一个名字而不是ip地址。
domain.com。
IN NS dns0.domain.com。
----->正确
domain.com。
IN NS 75.xx.xx.xx ----------->错误
反向DNS用于邮件传递
为了正确的邮件传递,以下反垃圾邮件地址对于确保将电子邮件传递到用户收件箱是非常重要的。 大多数公共电子邮件服务提供商yahoo,hotmail和gmail都使用这些参数来标识邮件是垃圾邮件还是垃圾邮件。
(i)使用DNS中的PTR为您的邮件服务器设置反向IP(需要专用IP)
(ii)在您的DNS中设置SPF记录
(iii)设置域密钥
如果您使用共享托管计划,我多次看到,大多数电子邮件都会在用户收件箱中的垃圾邮件/批量文件夹中放置。 所以使用专用的服务器。
为Mailserver IP设置反向IP
为了设置反向IP,首先您需要向主机提供商(因为他们拥有Ip地址)提出请求,并要求他们向您的邮件服务器设置反向IP。 一旦完成,您必须使用PTR在您的域区域文件中放置一行。
要测试反向ip查找:
host <ip-address>
将显示反向dns的输出。
设置SPF记录
您的dns区域文件中使用TXT记录设置SPF记录。 它看起来像下面所示。 有关设置和配置的更多信息,请访问http://openspf.org。
domain.com。
IN TXT“v = spf1 a mx ip4:11.33.55.77 -all”
使用dig查询SPF记录:
dig domain.com TXT
域密钥
它基本上包含2个记录(有和没有选择器)放置在TXT下使用下划线以及生成的公钥。
'sel'是一个选择器,可以是选择器名称。
如何使用BIND9为您的域设置DNSNameservers
只需到你的linux控制台并键入以下命令。
yum install bind
为您的域创建一个新的区域文件并插入样本区域文件 (见下文)。 您必须更改domain.com,serial和email参数。
nano /var/named/domain.com.db
打开/etc/named.conf
并放置以下行:
区域“domain.com”{
类型主人
文件“/var/named/domain.com.com.db”;
};
保存对文件的更改并重新启动绑定。
service named restart
BIND的DNS区域文件示例
使用此文件在BIND9中设置您的域名和域名服务器:
; =============================================== ================
; SAMPLE BIND DNS区域FILE
;对于任何域(只需更改domain.com到您的网站)
; =============================================== ===============
;
在您开始之前,请勿忘记输入和输入
$ TTL 14400
$ ORIGIN domain.com。
;
SOA记录
;
指定主Nameserversns1.domain.com
;
Serial应该增加每个更新
@ 14400 IN SOA ns1.domain.com。
webmaster.domain.com。
(
2009092902;
串行在YYYYMMDDXX(XX是增量)
10800;
刷新秒
3600;
重试
604800;
到期
38400;
最低
);
;
A记录中指定的网站IP地址
IN A xx.xx.xx.xx
;
最少2个DNSNameservers名称
IN NS ns1.domain.com。
IN NS ns2.domain.com。
;
映射所有Nameservers及其对应的IP(GLUE)
ns1 IN A xx.xx.xx.xx
ns2 IN A xx.xx.xx.xx
;
使用CNAME记录指定任何子域和www条目
www IN CNAME domain.com。
ftp IN CNAME domain.com。
服务器IN CNAME domain.com。
网络邮箱IN CNAME domain.com。
;
设置MX记录(优先邮件交换器)
domain.com。
IN MX 10 mail.domain.com。
;
设置邮件记录
mail in A xx.xx.xx.xx
; ==================================
关于作者
Balakrishnan先生是互联网企业家和Linux管理员,对PHP编程和Linux应用程序感兴趣。 他可以在他的博客网站corpocrat.com或他的Twitter页面中访问 。