简介
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
一 DNS and BIND
DNS: Domain Name Service,协议(C/S, 53/udp, 53/tcp);应用层协议;
BIND:Bekerley Internat Name Domain, ISC (www.isc.org)
DNS查询类型:
递归查询
迭代查询
DNS资源记录:
DNS服务器中域名与IP地址相互转换的映射信息以文本形式存储在其区域解析中,每一行表示一对对应关系,称之为资源记(RR Resource Record),每一条资源记录都包含域名、IP地址和其它属性信息。
资源记录定义的格式:
语法:name[TTL]IN rr_type value
name:资源记录引用的域对象名,可以是单台主机或者整个域,字段值: "."是根域 "@"是默认域,即当前域
TTL: 生存时间字段,以秒为单位定义该资源记录的信息存放在DNS缓存中的时间长度。此字段缺省采用SOA记录中的最小TTL值(即1小时)
IN : 固定关键字
rr_type:资源记录类型
(1)SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录而必须为解析库的第一条记录;
(2)A:internet Address,作用,A记录,成为主机记录,DNS名称到IP地址的映射,用于正向解析
(3)AAAA: FQDN –> IPv6地址主机记录
(4)PTR: PoinTeR,IP –> IP地址到DNS名称的映射,用于反向解析
(5)NS: Name Server,专用于标明当前区域的DNS服务器
(6)CNAME:Canonical Name,别名记录
(7)MX: Mail eXchanger,邮件交换器,用于告知邮件服务器进程将邮件发往指定的另一台邮件服务器
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 录前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
(3) (主从服务协调属性的定义以及否定的答案的统一的TTL)
二 BIND的安装配置
dns服务,程序包名bind,程序名named
程序包:
bind#提供服务
bind-libs#提供库文件
bind-utils#测试工具
系统安装环境:centos 6.7
关闭SELINUX:setenforce 0 #立即生效 (实际是宽容模式)
配置防火墙:iptables -F(清除防火墙规则)或者是关闭iptables
域名:test.com
主DNS的IP:192.168.1.7
从DNS的IP:192.168.1.5
1.bind 的安装
yum -y install bind #依赖关系会自动解决安装
查看一下bind生成的文件和路径信息
rpm -ql bind
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #主配置文件的辅助区域配置文件
/etc/rc.d/init.d/named #服务启动脚本
/etc/rndc.conf #域名服务远程控制工具
/etc/rndc.key #rndc的消息完整性验证key
/usr/sbin/named #主运行程序
/usr/sbin/named-checkconf #配置文件测试工具,测试语法错误
/usr/sbin/named-checkzone #区域解析库文件测试工具
/usr/sbin/rndc #域名服务远程控制工具
/usr/sbin/rndc-confgen #密钥生成工具
/var/named #区域解析文件存放位置
/var/named/slaves #从服务器由主服务器同步过来区域文件的存放位置
/var/run/named #服务启动后产生的进程
/var/named/named.ca #DNS根服务器信息
注意:
(1) 一台物理服务器可同时为多个区域提供解析;
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;
主配置文件格式:
全局配置:options {}
日志子系统配置:logging {}
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;
zone "ZONE_NAME" IN {}
注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上;
缓存名称服务器的配置:
监听外部地址即可;
2.配置主配置文件:/etc/named.conf
注意这里面不需要的用//注释掉就可以了啊
options { listen-on port 53 { 192.168.1.7; 127.0.0.1; }; #定义监听的端口以及监听ip地址 // listen-on-v6 port 53 { ::1; }; #ipv6地址和端口的配置 directory "/var/named"; #定义bind的工作目录 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; }; #允许那些客户端来查询,默认localhost为内置acl recursion yes; #允许递归 // dnssec-enable yes; #这几行是跟DNS安全相关的,建议关闭此功能 // 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"; }; include "/etc/named.rfc1912.zones"; #配置文件包含这个文件的内容 include "/etc/named.root.key"; #配置文件包含这个文件的内容
3.定义区域解析库文件:/etc/named.rfc1912.zones
zone "localhost.localdomain" IN { #域名,IN为固定格式 type master; #类型,master|slave|hint|forward 这几种 file "named.localhost"; #区域解析配置文件,在options定义的工作目录下 allow-update { none; }; #动态数据更新,默认是不接受 }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { #反向域 type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "test.com" IN { type master; file "test.com.zone"; allow-update { none;}; }; zone "1.168.192.in-addr.arpa" { type master; file "192.168.1.zone"; };
4.创建区域解析库文件:/var/named/test.com.zone
$TTL 86400 $ORIGIN test.com. @ IN SOA ns1.test.com. admin.test.com ( #定义SOA记录 2016030701 #序列号 1H #版本号刷新时间 5M #重试时间 7D #过期时长 1D ) #否定答案的TTL值 IN NS ns1 IN NS ns2 IN MX 10 mx1 #MX记录以及优先级 IN MX 20 mx2 ns1 IN A 192.168.1.7 ns2 IN A 192.168.1.5 mx1 IN A 192.168.1.13 mx2 IN A 192.168.1.14 www IN A 192.168.1.7 www IN A 192.168.1.5 pop IN CNAME WWW #别名记录
5.创建反向区域解析库文件:/var/named/192.168.1.zone
$TTL 86400 $ORIGIN 1.168.192.in-addr.arpa. @ IN SOA ns1.test.com. admin.test.com ( 2016030701 1H 5M 7D 1D ) IN NS ns1.test.com. IN NS ns2.test.com. 7 IN PTR ns1.test.com. #将A记录全改成PTR记录,提供反向解析 7 IN PTR www.test.com. 13 IN PTR mx1.test.com. 5 IN PTR ns2.test.com. 5 IN PTR www.test.com. 14 IN PTR mx2.test.com.
6.由于默认named服务有named用户身份运行,因此修改解析库文件的属组为named,权限改为640
cd /var/named/
chmod 640 test.com.zone
chmod 640 1.168.192.zone
chown :named test.com.zone
7.检查zone配置文件是否有错误
named-checkzone "test.com" /var/named/test.com.zone
named-checkzone "1.168.192.in-addr.arpa" /var/named/1.168.192.zone
named-checkconf
8.测试命令
(1)host [-t type] name [SERVER]
例子:host -t A www.test.com 192.168.1.7
(2)dig [-t type] name [@SERVER] [query options]
dig用于测试dns系统,因此,不会查询hosts文件进行解析
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
例如:dig -t axfr test.com @192.168.1.7
(3)nslookup命令:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME: 要查询的名称;
9.启动DNS服务并进行正向解析测试
service named start #如果你已经启动过服务的话直接 service named reload
dig -t A www.test.com @192.168.1.7
dig -t MX mail.test.com @192.168.1.7
10.进行逆向解析测试
dig -x 192.168.1.5 @192.168.1.7
三 主从复制(根据以上继续配置从服务器)
1.配置从服务器的主配置文件:/etc/named.conf
2.启动named服务
service named start
netstat -nlp | grep :53
3.定义区域解析库文件:/etc/named.rfc1912.zones
在文件最后的部分添加这几行
4.重载主配置文件和区域解析库文件并查看从主服务器同步过来的文件
rndc reload
主从复制:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低;
DNS 子域授权和高级应用
http://www.178linux.com/12542
原创文章,作者:liangkai,如若转载,请注明出处:http://www.178linux.com/12395