在终端提示符下,输入以下命令安装 dns:
dnsutils 软件包是测试和解决 DNS 问题非常有用的。 这些工具通常已经安装,但是要检查或安装 dnsutils,请输入以下内容:
有许多方法可以配置BIND9。一些最常见的配置是缓存名称服务器,主服务器和辅助服务器。
DNS配置文件存储在 /etc/bind 目录中。主要配置文件是 /etc/bind/named.conf ,在软件包提供的布局中仅包括这些文件。
可以将同一服务器配置为缓存名称服务器,主要和辅助名称服务器:这都取决于它所服务的区域。服务器可以是一个区域的授权开始(SOA),同时为另一区域提供辅助服务。同时为本地LAN上的主机提供缓存服务。
默认配置充当缓存服务器。只需取消注释并编辑 /etc/bind/named.conf.options 即可设置ISP的DNS服务器的IP地址:
要启用新配置,请重新启动DNS服务器。在终端提示下:
在本节中,将BIND9配置为域的主服务器 example.com 。只需 example.com 用您的FQDN(完全合格的域名)替换即可。
要将DNS区域添加到BIND9,将BIND9变成主服务器,请首先编辑 /etc/bind/named.conf.local :
现在,使用现有的区域文件作为模板来创建 /etc/bind/db.example.com 文件:
编辑新的区域文件, /etc/bind/db.example.com 然后更改 localhost.为服务器的FQDN,.在末尾保留其他文件。更改 127.0.0.1 为名称服务器的IP地址和 root.localhost 有效的电子邮件地址,但用 . 代替通常的 @ 符号,并再次.在末尾保留。更改注释以指示此文件所针对的域。
为基本域创建 A 记录 example.com 。此外,创建一个 A 记录的 ns.example.com ,在这个例子中,域名服务器:
每次更改区域文件时,都必须增加序列号(Serial)。如果在重新启动BIND9之前进行了多次更改,只需增加一次串行。
现在,您可以将DNS记录添加到区域文件的底部。有关详细信息,请 参阅公共记录类型 。
对区域文件进行了更改之后,需要重新启动BIND9以使更改生效
现在已经设置了区域并将名称解析为IP地址,现在需要添加反向区域以允许DNS将地址解析为名称。
编辑 /etc/bind/named.conf.local 并添加以下内容:
现在创建 /etc/bind/db.192 文件:
接下来编辑 /etc/bind/db.192 ,更改与 /etc/bind/db.example.com 相同的选项:
每次更改时,“反向”区域中的序列号也需要增加。 对于您在 /etc/bind/db.example.com 中配置的每个A记录(即针对另一个地址),您需要在 /etc/bind/db.192 中创建一个PTR记录。
创建反向区域文件后,重新启动BIND9
一旦配置了主服务器,强烈建议使用辅助服务器,以在主服务器不可用时维持域的可用性。
首先,在主服务器上,需要允许区域传输。将 allow-transfer 选项添加到示例正向和反向区域定义中 /etc/bind/named.conf.local :
在主服务器上重新启动BIND9:
接下来,在辅助服务器上,以与主服务器相同的方式安装bind9软件包。然后编辑, /etc/bind/named.conf.local 并为正向和反向区域添加以下声明:
在辅助服务器上重新启动BIND9:
在其中, /var/log/syslog 您应该看到类似以下内容的内容(为了适应本文档的格式,对某些行进行了拆分):
测试BIND9的第一步是将名称服务器的IP地址添加到主机解析器。应该配置主要名称服务器以及另一个主机,以仔细检查。有关将名称服务器地址添加到网络客户端的详细信息,请参阅DNS客户端配置。最后,您的 nameserver 一行 /etc/resolv.conf 应指向, 127.0.0.53 并且您应该 search 为您的域指定一个参数。像这样:
要检查您的本地解析器正在使用哪个DNS服务器,请运行:
如果安装了dnsutils软件包,则可以使用DNS查找实用程序dig测试设置:
安装完BIND9之后,请对环回接口使用dig来确保它正在侦听端口53。从终端提示符下:
您应该在命令输出中看到类似于以下内容的行:
如果您已将BIND9配置为缓存名称服务器,则“挖掘”外部域以检查查询时间:
注意查询时间接近命令输出的末尾:
经过第二次挖掘后,应该有所改进:
现在演示应用程序如何使用DNS解析主机名,使用ping实用程序发送ICMP回显请求:
这测试名称服务器是否可以将名称解析为 ns.example.com IP 地址。 命令输出应类似于:
测试区域文件的一种好方法是使用 named-checkzone 与bind9软件包一起安装的实用程序。使用此实用程序,可以在重新启动BIND9并使更改生效之前确保配置正确。
要测试我们的示例正向区域文件,请从命令提示符处输入以下内容:
如果一切配置正确,您应该会看到类似以下的输出:
同样,要测试反向区域文件,请输入以下内容:
输出应类似于:
BIND9有多种可用的日志记录配置选项,但是两个主要的选项是 channel 和 category ,它们分别配置日志的去向和要记录的信息。
如果未配置任何日志记录选项,则默认配置为:
让我们将BIND9配置为将与DNS查询相关的调试消息发送到单独的文件。
我们需要配置一个通道以指定要将消息发送到的文件,以及一个category。在此示例中,类别将记录所有查询。编辑 /etc/bind/named.conf.local 并添加以下内容:
由于命名守护程序以绑定用户身份运行,因此 /var/log/named 必须创建目录并更改所有权:
现在重新启动BIND9,以使更改生效:
您应该看到文件中 /var/log/named/query.log 填充了查询信息。这是BIND9日志记录选项的简单示例。
众所周知,DNS解析是我们访问internet的“第一跳”,若域名解析失常那是一件很可怕的事情。所以这一步走的需要更快,更稳。现在业界普遍采用了智能DNS来实现,其原理就是根据自身所保存的表项的ip和用户的所在位置对应来就近分配服务器的主机记录给用户。智能DNS现在用途很广泛,如:在CDN网络中,根据智能DNS实现GSLB全局负载均衡,就近分发可请求的缓存服务器(也有可能是下级GSLB的site ip);在跨多数据中心组网,其也很好的实现异地多活。等等。但是智能DNS真的是完美,智能吗?在DNS解析中,帮我们出去向根递归的是LDNS,如果我们的LDNS和本地用户不在一个地理位置,那么用户则会得到一个LDNS所在位置最近的IP地址,例如我们很多人喜欢吧LDNS设置为8.8.8.8(google的公开DNS,稳定),这样我们智能DNS则会让用户得到一个美国服务器IP这显然是不合理的。
先将LDNS指定google的8.8.8.8,再将LDNS指定为学校的DNSserver
耗时201ms,解析结果为198.11.132.23,所在地美国,GeoIP: San Mateo, California, United States
耗时34ms,解析结果为106.11.62.61,所在地上海,GeoIP: Hangzhou, Zhejiang, China
面对这个情况,现在我知道的有以下两种解决方案:
PS:就小的看来HTTPDNS会越来越火,DNSPod也推出了相应的方案,听说现在已经集成到一部分app 的SDK里面了,做为正常DNS解析失常的备用方案。有时间研究下另开一篇胡说八道
edns-client-subnet(下简称ecs)其现在还没有正式被bind支持。需要对bind重新编译, ISC上有支持ecs authoritative的源码 ,git克隆到到本地编译即可。
完成的环境:
安装
设置bind的主配置文件,编辑/etc/named.conf:
如上,在ADNS上的bind上,写acl来匹配ecs对应的ip,来看其作用:
简单翻译下:即在ADNS上如果ECS地址包含在查询内,它将使用其代替源IP进行解析查询(在没有使用“geoip-use-ecs no的情况下”),并将ECS 的网段地址写进response报文中,回复给LDNS,表明采用了ecs解析。
查询过程是这样的:
在我写的规则中,ACL localnet只有120.0.0.1/24这个网段,只有在收到的query报文中有ecs段位且匹配到了这个ecs的网段,才能命中internal视图
通过 named 来开启bind进程,之后通过查看日志检查bind是否正常启动,以及端口是否开放正常
可以看到bind和rndc开放正常:
在本地用dig调试
用200.0.0.1/24作为用户所在的网段:
用120.0.0.1/24作为用户所在的网段
验证如上,匹配到ecs elements的查询替代了源172.16.130.1的解析结果
附带抓包结果,有兴趣看一下:
第一次解析
![]( http://occwxjjdz.bkt.clouddn.com/2016-07-25 01-03-31屏幕截图.png)
![]( http://occwxjjdz.bkt.clouddn.com/2016-07-25 01-06-06屏幕截图.png)
第二次解析
![]( http://occwxjjdz.bkt.clouddn.com/2016-07-25 01-09-48屏幕截图.png)
![]( http://occwxjjdz.bkt.clouddn.com/2016-07-25 01-10-49屏幕截图.png)
实验的时候可能会出现这样的回复:
![]( http://occwxjjdz.bkt.clouddn.com/2016-07-25 01-00-09屏幕截图.png)
原因是DNS server的防火墙策略将query REJECT,关闭iptables即可
现在很多智能DNS都做在了专业的应用交付设备上,常用的有三款:F5的GTM(广域网流量管理器),citrix的NetScaler,还有radware linkproof。
其中F5的BIG-IP系列的GTM独占鳌头。但是遗憾的是不支持edns-client-subnet,即当其收到带有ecs段位的报文,会将请求drop掉。
详细情况请看 sol16240: The BIG-IP system treats as malformed and drops DNS queries containing the EDNS Client subnet option
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)