DNS详解--转

DNS

转自–http://blog.csdn.net/chen1152/article/details/51115214
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

DNS功能
每个IP地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台IP设备的IP地址,只要记住相对直观有意义的主机名就行了。这就是DNS协议所要完成的功能。
主机名到IP地址的映射有两种方式:
1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用;
2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。[1]
通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。

DNS冗余
为保证服务的高可用性,DNS要求使用多台名称服务器冗余支持每个区域。
这里写图片描述
某个区域的资源记录通过手动或自动方式更新到单个主名称服务器(称为主 DNS服务器)上,主 DNS 服务器可以是一个或几个区域的权威名称服务器。

———————————————————————————————————————
Linux运维实战之DNS(bind)服务器的安装与配置

一、BIND服务器简介:
Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。
【什么是“服务”及服务的特性】
1、什么是套接字:
套接字socket,简单来说就是IP:port(IP地址端口对)。以电话系统为例,电话的通话双方相当于相互通信的两个进程,区号是它的IP地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要使用一部电话,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方的区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接收连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话相当于关闭socket,撤销连接。
端口:
TCP:0~65535
UDP:0~65535
小于1024的端口为知名端口;Linux系统中0~1023的端口只有root用户有开放关闭的权利(服务都是以root用户身份启动,之后以一个系统用户的身份运行。)
例如:DNS服务监听在tcp的53号端口(DNS区域传送)和udp的53号端口,Web服务监听在TCP的80端口。
2、服务的特性:
运行于后台,处于监听(listen)状态
监听的原理:
这里写图片描述
如上图所示,
(1)当DNS服务端程序安装并启动之后,它首先通过socket()系统调用向内核注册使用一个套接字,并调用bind()系统调用将本地socket地址(包括本地主机地址和本地端口)与所创建的socket号联系起来。一旦注册成功,守护进程named就处于监听状态(即named进程处于阻塞状态,等待客户端的连接)。注意,服务器必须首先启动,直到它执行完socket()调用进入等待状态后,方能接受客户请求,假如客户机先启动,则connect()将返回出错代码,连接不成功。
(2)之后,DNS的请求报文发送到DNS的服务器的网卡上,而网卡是硬件,能够与硬件打交道的只有内核。内核内部的TCP/IP协议栈将请求报文解包查看其IP首部和TCP首部(即检查请求报文中的套接字是什么)。
(3)内核查看文件句柄fd(file deiscriptor)数据库以确认是否有相关的应用程序进程注册了该套接字。如果有,则将请求报文发送给该进程。
Tips:以上是我对监听过程的简单理解,难免有错误之处,如发现错误还望指正哈!
3、DNS服务器类型:
缓存服务器:不负责解析,仅为加速,不需要注册
主DNS服务器:负责解析本地客户端请求
辅助DNS服务器:辅助服务器的区域数据都是从主服务器复制而来,其数据都是只读的

4、bind详解:
包名:bind
进程:named
协议:dns
使用端口:53(tcp,udp)
相关包:
bind-chroot:将named进程的活动范围限定在chroot目录,保证安全性。
bind-devel:与开发相关的头文件和库文件(编译安装bind时所需)
bind-libs:bind服务器端和客户端都使用到的公共库文件
bind-utils : bind客户端工具
程序文件:/usr/sbin/named
bind权限相关:
安装完named会自动创建用户named系统用户
Tips:早期linux服务都是以root权限启动和运行的,随着技术的发展,各种服务变得越来越复杂,导致BUG和漏洞越来越多。黑客利用服务的漏洞入侵系统,能获得root级别的权限,从而控制整个系统。为了减缓这种攻击所带来的负面影响,现在服务器软件通常设计为以root权限启动,然后服务器进程自行放弃root,再以某个低权限的系统账号(named)来运行进程。这种方式的好处在于该服务被攻击者利用漏洞入侵时,由于进程权限很低,攻击者得到的访问权限又是基于这个较低权限。
【配置文件】:
[root@CentOS01 ~]# rpm -qc bind
/etc/logrotate.d/named/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #区域配置文件(用include指令包含在主配置文件)
/etc/named.root.key #根区域的key文件以实现事务签名;
/etc/rndc.conf #rndc(远程名称服务器控制器)配置文件
/etc/rndc.key #rndc加密密钥
/etc/sysconfig/named
/var/named/named.ca #13个根服务器存放文件/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
重点只需要关心主配置文件:
主配置文件:named.conf,每个语句都要使用分号结尾;其功能如下:
定义区域
定义各区域的全局配置
定义视图
定义日志
【bind客户端工具】
[root@Centos ~]# rpm -ql bind-utils
/usr/bin/dig #最常用的DNS服务器测试工具
/usr/bin/host #一款轻量级DNS测试工具
/usr/bin/nslookup #DNS查询工具,在众多平台上都有实现(windows上也有)
/usr/bin/nsupdate #更新工具
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz
dig命令:
语法:dig -t 资源记录类型 名称 @server-ip
工作机制:
不加”@server-ip”:根据/etc/resolv.conf配置的解析文件来查询
例如:
这里写图片描述
说明:
(1)加”@server-ip”:根据指定的DNS服务器来解析,绕过了本地解析库中设置的DNS服务器。
(2)注意标志位:
这里写图片描述
注:dig命令不会查缓存,而是直接查服务器
例如:
这里写图片描述
常用选项:
dig -x IP @server-ip:查询反向解析
这里写图片描述
dig - t 资源记录类型 名称 +trace:追踪解析过程
[root@CentOS01 ~]# dig -t A www.baidu.com +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> -t A www.baidu.com +trace
;; global options: +cmd

首先找根

. 480984 IN NS g.root-servers.net.
. 480984 IN NS j.root-servers.net.
. 480984 IN NS d.root-servers.net.
. 480984 IN NS k.root-servers.net.
. 480984 IN NS c.root-servers.net.
. 480984 IN NS h.root-servers.net.
. 480984 IN NS b.root-servers.net.
. 480984 IN NS l.root-servers.net.
. 480984 IN NS e.root-servers.net.
. 480984 IN NS m.root-servers.net.
. 480984 IN NS a.root-servers.net.
. 480984 IN NS i.root-servers.net.
. 480984 IN NS f.root-servers.net.
;; Received 496 bytes from 218.2.135.1#53(218.2.135.1) in 1654 ms

然后找.com

com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 491 bytes from 128.63.2.53#53(128.63.2.53) in 921 ms

然后找baidu.com.

baidu.com. 172800 IN NS dns.baidu.com.
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
;; Received 201 bytes from 192.55.83.30#53(192.55.83.30) in 402 ms

最后找到最终结果

www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
;; Received 228 bytes from 61.135.165.235#53(61.135.165.235) in 81 ms
dig -t axfr zone :验证完全区域传送
host命令:
语法:host -t 资源记录类型 名称
例如:
这里写图片描述
二、DNS(bind)服务器的配置:
经过上面关于bind服务的介绍后,下面我们就来具体配置bind服务哈。我们的配置分四个:
配置正向解析的bind
配置反向解析的bind
配置辅助bind
实现主辅DNS之间的区域传送
【实验环境规划】
VMware station 10
BIND服务器:两台CentOS 6.4虚拟机做主辅DNS
一台windows server2008 R2 做辅助DNS
一台windows 7做客户端
Domain Name:test.com. 192.168.1.0/24
主DNS:LinuxMaster.test.com. 192.168.1.58
辅助DNS:LinuxSlave.test.com. 192.168.1.59
Win2008Slave.test.com. 192.168.80.3 (在windows 2008 R2上实现 )
web主机:www.test.com. 192.168.1.58 192.168.1.59 192.168.80.3
ftp主机:ftp.test.com. CNAME www.test.com.
mx邮件服务器:mx.test.com. 192.168.1.58
1、配置正向解析
【将一台主机配置成可正向解析的DNS之步骤】
第一步:使用YUM安装DNS所使用的软件包(BIND)
第二步:创建或修改主配置文件(/etc/named.conf)
第三步:创建区域数据文件(/var/named/*.zone)
第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误
第五步:确保主配置文件和各区域解析库文件的权限为640,属主为root,属组为named;
第六步:重启服务或重新加载配置文件
第七步:更改iptables和selinux的设置(如果不了解此两项可以暂时关闭它们)
第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录
具体配置过程如下:
第一步:通过yum安装bind:
[root@Centos ~]# yum install -y bind
第二步:自己创建或修改主配置文件(/etc/named.conf)
首先我们来看看主配置文件的内容哈:
[root@CentOS02 ~]# cat /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory “/var/named”; //指明存放区域文件根目录,下面给出的相对路径都是相对此目录
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
allow-query { localhost; }; //允许哪些主机查询
recursion yes; //是否允许递归查询

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

};

logging { //定义日志
channel default_debug {
file “data/named.run”;
severity dynamic;
};
};

zone “.” IN { //定义根区域文件名称
type hint;
file “named.ca”; //使用的是相对路径,默认存放在/var/named/named.ca
};
//把另外两个文件也包含进来,作为主配置文件的一部分
include “/etc/named.rfc1912.zones”; //定义区域配置文件
include “/etc/named.root.key”; //根区域的key文件,与事务签名相关
注释如下三行:
//listen-on port 53 { 127.0.0.1; };
//listen-on-v6 port 53 { ::1; };
//allow-query { localhost; };
这里写图片描述
启动named服务:
service named start
验证named服务是否已经启动:
natstat -luntp | grep “53”
配置开机启动:
chkconfig –list named
至此,一台缓存DNS服务器就配置好了!
【编辑区域配置文件/etc/named.rfc1912.zones】
在里面新建一个区域,格式如下:
zone “区域名称” IN {
type master|slave|forward; //注意每个语句要以分号结尾
file “ZONE_NAME.zone”;
}; //注意要以分号结尾
我们这里新建的区域如下:
这里写图片描述
第三步:创建区域数据文件(/var/named/*.zone)
在/var/named下建立“ZONE_NAME.zone”文件,通常只包含宏定义和资源记录,且第一个记录必须是SOA记录(格式如下);
$TTL 600;
name [TTL] IN RR_Type value

(1)一个FQDN可对应同多个IP;(负载均衡)
(2)多个FQDN可对应一个IP:(一台主机有多个名称,且可以用CNAME定义)
这里写图片描述
第四步:使用相关命令(named-checkconf、named-checkzone)测试配置文件及区域文件是否存在语法错误
这里写图片描述
第五步:确保主配置文件和各区域解析库文件的权限为640,属主为root,属组为named;
(1)检查主配置文件的权限:
这里写图片描述
(2)检查区域解析库文件/var/named/test.com.zone的权限:
这里写图片描述
第六步:重新启动服务或重新加载配置文件:
service named restart
第七步:更改iptables和selinux的设置(如果不了解此两项可以暂时关闭它们)
service iptables stop
setenforce 0
第八步:分别使用(dig/nslookup)在Linux/Windows主机进行查询DNS相关资源记录
(1)使用dig命令在Linux主机上进行DNS资源查询:
这里写图片描述
(2)使用nslookup命令在Windows系统平台下测试DNS相关资源记录:
这里写图片描述
至此,一台能够正向解析的bind服务器就配置好了哈!


DNS服务器的基本配置就这么多哈,下面来简单总结下:
1、每个DNS服务器必须要有一个对应的NS资源记录;
2、创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 IP地址 ;
3、可以使用dig -t axfr test.com @server_IP 从主DNS服务器拉取所有解析库资源记录;
4、主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,这些区域文件是从主DNS同步过来的,一般为只读,不建议更改slave的zone文件;
5、在主DNS上修改区域文件时,必须将SOA记录的serial加1 因为slave是通过serial值来进行判断更新的(windows系统上是自动完成的);
6、DNS的日志默认全部保存在/var/log/messege 文件中;
7、DNS的解析依赖于解析库,所以就算是所配置的内容是完全不存在的也可以解析(且正向解析和反向解析的解析库是各自独立的)。需要注意,正向解析里没有PTR记录,而反向解析库里不需要A记录、MX记录和CNAME记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值