DNS原理
现有的网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们很难记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。
DNS and BIND
什么是DNS?
DNS(Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,DNS基于C/S(Client/Server,客户机/服务器)模式,因而分为Client和Server两种角色。使用53/udp(现在正在使用), DNS: 53/tcp ;Client扮演询问的角色,也就是向Server询问一个Domain Name,而Server必须要回答此Domain Name所对应的真正IP地址。
BIND:BekerleyInternat Name Domain ;ISC (www.isc.org)
DNS
TCP: 面向连接的协议;
UDP: User Datagram Protocol,无连接协议
本地名称解析配置文件:hosts
/etc/hosts
%WINDOWS%/system32/drivers/etc/hosts
格式如下:
1.1.1.1www.magedu.com
1.2.2.2www.apple.com
DNS名称空间
Internet 上的DNS域名称采用层次结构,如同一棵倒置的树。
根域为,一个名为 InterNIC 的机构既负责划分全世界的IP地址范围,又负责分配Internet 上的域名称结构。根域DNS服务器只负责处理一些顶级域名DNS服务器的解析请求。
顶级域,常见的三类顶级域:1, 组织域(com,edu, mil, gov, net, org, int)、2, 国家域(.cn, .iq, .hk, .tw)、3, 反向域
二级域; 是在顶级域下划分的(用于公司或个人申请使用)
子域;子域下面可以继续划分子域,或者接主机。
DNS查询过程
如访问www.123.com
Dns查询类型
递归查询:一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;(客户端只需要发出一次查询请求就能得到最终答案的插叙)
迭代查询:一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求; (服务器在发出一个查询请求时,有可能得到一个最终答案;也有可能得到一个参考答案,通常得到一个结果需要多次发起的查询)
名称服务器:域内负责解析本域内的名称的主机;
dns解析类型:
正向解析: Name --> IP ;又主机名解析为IP地址
反向解析: IP --> Name : 又IP地址解析为主机名
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;
DNS服务器的类型:
主DNS服务器
辅助DNS服务器
缓存DNS服务器
转发器
主DNS服务器:维护所负责解析的域内解析库服务器,是该域的权威服务器;解析库由管理Y员维护;
从DNS服务器:从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库;
BIND的安装配置:
dns服务,程序包名bind,程序名named
1 . bind相关程序包:
bind: 提供域名服务的主程序和相关文件
bind-libs: 提供bind和bind-utils所需公共的共享库
bind-utils: 提供dns的测试工具 如:dig,host,nslookup
bind-chroot: 使bind可以在一个chroot的模式下运行.也就是说,bind运行时的/(根)目录,并不是系统真正的/
例如 : bind-chroot:/var/named/chroot/
2 . bind相关配置文件:
服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf,/etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE
注意:
(1)一台物理服务器可同时为多个区域提供解析;
(2) 必须要有根区域文件;named.ca
(3)应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;
rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;
默认使用 953/tcp ;/etc/rndc.key
用于连接主机的预共享密钥
3 . 安装bind
[[email protected] ~]# yum installbind –y
4 . 查询bind软件包版本
[[email protected] ~]# rpm -q bind
bind-9.8.2-0.30.rc1.el6.x86_64
5. . 主配置文件/etc/named.conf
全局配置:options{ }
日志子系统配置:logging{ }
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;
示例 : zone "ZONE_NAME" IN { }
注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上;
默认启动named 只会监听在tcp和udp的127.0.0.1的53端口
6. 启动named
[[email protected] ~]#/etc/init.d/named start
7. 查看bind监听的套接字 (默认情况下named会监听在127.0.0.1 的tcpupd 53端口)
[[email protected] ~]# ss -ltunp|grep 53
udp UNCONN 0 0 127.0.0.1:53 *:*
users:(("named",3444,512))
udp UNCONN 0 0 ::1:53 :::*
users:(("named",3444,513))
tcp LISTEN 0 3 ::1:53 :::*
users:(("named",3444,21))
tcp LISTEN 0 3 127.0.0.1:53 *:*
users:(("named",3444,20))
tcp LISTEN 0 128 ::1:953 :::*
users:(("named",3444,23))
tcp LISTEN 0 128 127.0.0.1:953 *:*
users:(("named",3444,22))