Linux DNS教程(1)使用bind部署DNS服务
一、DNS服务器的基本概念
在线上工作的DNS服务器通常都是主辅结构。辅DNS用于分担查询请求,它的数据都是从主DNS同步,工作过程大概如下:
1、辅DNS根据配置文件中所设置的刷新间隔(refresh)来定期向主DNS进行数据同步
2、辅DNS根据主服务器上序列号(serial)作为标准决定是否需要执行同步
3、如果辅DNS无法连接主DNS,会根据设置的重试时间(retry)来重新与主DNS进行连接
4、如果重新连接了多次还是无法成功,那么达过过期时长(expire)的限制后辅DNS就会放弃获取数据,辅DNS也不会升级成主DNS,而是下线不再提供服务(因为辅DNS是没有办法写入新数据的)
下面先看一个配置各种时长的设置示例
linuxe.cn 86400 IN SOA linuxe.cn {
2017010801 ;serial序列号,标识是第几个版本
2H ;refresh刷新时间
10M ;retry重试时间
1W ;expire过期时间
1D ;否定回答时间
}
二、DNS的查询方式
一个是客户端向服务器提交查询,服务器直接做最终回应,这个是递归查询(只发出一次请求,最终得到结果);另一个是DNS服务器接收到客户端请求后,由于本地没有该解析记录,会将请求转给其他DNS服务器进行查询,这个叫做迭代查询(需要发出多次请求,最终获得正确的结果)
三、DNS常用记录类型
区域解析库文件:每个域名都有一个自己的区域解析库文件(zone文件),由一条条资源记录来定义具体指向
SOA记录:起始授权记录,一个区域解析库只能有一个SOA记录,而且必须为第一条。打个比方,建了个海岛,需要对外宣布世界上多了一个海岛,这个事情就是SOA在做
NS记录:域名服务记录,一个区域解析库可以有多个NS记录,其中一个为主服务器。结合上面的例子,NS记录可以理解为用来宣布岛主是谁
A记录:地址记录,从域名解析为IP的记录
AAAA:IPv6的地址记录
PRT:反向解析记录,从IP解析为域名
MX:邮件交换记录。我们平时发邮件都是直接发到qq.com、163.com等域名上,但是这些域名肯定是有多台服务器的,MX记录就是指明了哪个服务器会负责邮件。MX服务可以存在多个,由优先级来区分先后,0-99,数字越小优先级越高
CNAME记录:给一个地址设置一个别名
四、资源记录的定义语法
在DNS服务器中每个域都要通过zone文件保存信息,首先在区域解析库zone文件的开头定义SOA记录,定义格式
linuxe.cn 86400 IN SOA linuxe.cn { 2018051301 ; #serial序列号,标识是第几个版本 2H ; #refresh刷新时间 10M ; #retry重试时间 1W ; #expire过期时间 1D ; #否定回答时间 }
定义当前区域的NS记录,定义格式示例
linuxe.cn 86400 IN NS ns1.linuxe.cn
linuxe.cn 86400 IN NS ns2.linuxe.cn
MX记录定义格式示例(多了一个优先级):
linuxe.cn IN MX 10 mx1.linuxe.cn
linuxe.cn IN MX 20 mx1.linuxe.cn
A记录记录定义格式示例:
www.linuxe.cn IN A 192.168.1.100
bbs.linuxe.cn IN A 192.168.1.110
PTR(IP反过来写,加特定后缀):
100.1.168.192.in-addr.arpa IN PTR www.linuxe.cn.
CNAME记录定义格式示例:
web.linuxe.cn IN CNAME www.linuxe.cn
注意事项:
1、TTL可以从全局继承,不用每个记录都定义具体的TTL
2、@符号可以表示当前区域的名称,所以真需要写@的时候由.来代替。如最后一行“www IN A 192.168.1.1” 代表www.linuxe.cn 是解析到192.168.1.1这个地址的
3、相邻的两个记录,如果NAME相同那么后面一条的NAME可以省略,如:
www.linuxe.cn IN A 192.1681.100
IN A 192.1681.110 #没写name
bbs.linuxe.cn IN A 192.1681.100
4、对于正向区域来说,如果MX、NS等类型的记录VALUE为一个FQDN,那么此FQDN应该有一个A记录
五、DNS服务器的安装
1、如今使用最广泛的DNS服务器软件是BIND,在Linux和Windows平台都是支持的。只需要直接用yum安装即可
yum install bind bind-utils bind-devel bind-libs bind-chroot -y
systemctl start named
systemctl enable named
#BIND相关软件包介绍如下
#bind DNS主程序包
#bind-utils DNS客户端程序包,如nslookup,dig
#bind-devel DNS开发包,也可以叫做支持包
#bind-libs 被bind和bind-utils共同用到的库文件
#bind-chroot chroot牢笼,伪装根目录,选装
2、bind服务配置文件主要分为主配置文件和区域配置文件。
/etc/named.conf是主配置文件,用于配置全局选项以及创建查找区域。比如要创建一个linuxe.cn的查找区域就需要在该配置文件中完成。为避免主配置文件过于臃肿,还有一个/etc/named.rfc1912.zones文件被包含进主配置文件,所以要新增查找区域的话推荐在该文件中配置。
/var/named/:存放区域配置文件的目录,每个域的zone文件(就是详细的解析信息文件)默认否存放于此。
3、bind服务主程序是/usr/sbin/named,服务默认监听在UDP、TCP协议的53端口,TCP的53端口是主从复制时使用,UDP的53端口是客户查询时使用;还有一个DNS远程控制工具rndc,也可以进行数据的更新、服务的启动等工作,其监听在本地的953端口
rndc reload
六、bind正式配置,以创建linuxe.cn域名的正向解析为例(反向解析的话也要建立一个区域数据文件)
1、在主配置文件/etc/named.conf中修改监听的网卡地址啊
options {
...
listen-on port 53 { 192.168.100.10; }; #修改为网卡的实际地址或者写为any,但端口一定别改
directory "/var/named"; #zone文件存放路径
allow-query { 192.168.100.0/24; }; #只对该网段内的IP提供DNS服务,也可以用any
#forward only; #让该DNS成为转发器
#forward { 8.8.8.8; }; #转发到的服务器地址
recursion yes; #允许递归查询
...
}
2、修改主配置文件或辅助配置文件/etc/named.rfc1912.zones(推荐使用辅助文件,该文件中定义了许多域名的zone文件),增加一个域名的定义,仅需4行即可:
zone "linuxe.cn" IN {
type master; #master代表是该域的主服务器
file "linuxe.cn.zone"; #定义zone文件,存放路径由主配置文件directory决定
};
3、建立区域数据zone文件(推荐复制named.local作为模板文件进行修改)注意修改文件权限为640,属主root,属组named
touch /etc/var/named/linuxe.cn.zone #这里用了绝对路径便于理解 $TTL 3600 #第一条记录必须是SOA记录 #用@表示当前区域,也就是linuxe.cn,IN为固定格式,SOA是记录类型,后面是DNS服务器和管理员邮箱,邮箱里的@用.表示 @ IN SOA ns1.linuxe.cn. 13841276.qq.com. { 2018051401 1H 10M 3D 1D } #A记录和其他记录 IN NS ns1.linuxe.cn #和上一条名称一样的话可以省略不写区域 ns1 IN A 192.168.1.100 www IN A 192.168.1.110 web IN CNAME www bbs IN A 192.168.1.120
4、重启服务前可以使用named-checkconf、named-checkzone命令进行语法检查(仅仅是配置文件语法检测,而非逻辑检测),如果没有问题的话用rndc reload重新加载服务即可。
5、重启后可以将DNS客户端指向到这台测试DNS服务器,然后进行测试
七、DNS测试工具
1、dig工具,专门的DNS检测工具,不会走缓存查询。用-t选项指定解析类型,如A记录、MX记录,然后就可以看到完整具体的解析流程,QUESTION区显示了需要查询的域名、ANSWER显示了解析结果、AUTHORITY显示了进行查询的DNS服务器、ADDITIONAL显示了DNS服务器的地址
2、nslookup工具,会进入交互模式,不输入server的话默认是本机。然后设置需要查询的类型,如set type=a代表查看A记录,然后跟上需要查询的域名就可以看到完整的解析流程了
nslookup www.linuxe.cn #查看linuxe.cn解析情况
3、traceroute。路由追踪根据,会显示达到目标IP时每给路由节点的情况,最多30跳。
traceroute 192.168.1.100
评论