前言
DNS(Domain Name System),网域名称系统,是互联网上基础性的服务。DNS 将域名和网络服务器的 IP 地址相互映射,并将这些数据保存至 DNS 服务器。两台主机通信事实上是依赖于IP地址,而不能识别域名,因为 IP 地址非常不方便于记忆,所以域名的产生,极大的方便了访问互联网。例如,有一台服务器的IP为 115.159.221.170,当我们访问这台服务器的资源时,更多的时候是通过输入域名来访问的,当输入(www.huxiaoqi.com)域名后,DNS服务器自动将域名"翻译"成 IP 地址,然后访问网络的服务器。DNS 是一个域名和 IP 地址相互映射关系的分布式数据库。在浏览器中输入 www.huxiaoqi.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
本篇博客将会介绍DNS服务的相关内容,同时介绍目前互联网上使用最为广泛的DNS服务器软件BIND。
基本原理
DNS域名称
根域
一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
二级域名
三级域名
最多127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全 球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶 级域名(ccTLD)系统的管理、以及根服务器系统的管理
DNS服务
DNS:Domain Name Service 应用层协议
C/S,服务端口:53/udp, 53/tcp
BIND:Bekerley Internat Name Domain
ISC (www.isc.org)
本地名称解析配置文件:hosts
/etc/hosts
%WINDIR%/system32/drivers/etc/hosts
122.10.117.2 www.huxiaoqi.com
93.46.8.89 www.google.com
DNS服务器类型
DNS服务器的类型:
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
“通知”机制:主服务器解析库发生变化时,会主动通知从服务
区域传输
区域传输:
完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容
Domain: Fully Qualified Domain Name 简称FQDN,完全合格域名/全称域名
正向解析:FQDN --> IP
反向解析: IP --> FQDN
负责本地域名的正向和反向解析库 正向区域 反向区域
DNS解析
一次完整的查询请求经过的流程:
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
解析答案:
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:
非权威答案
BIND
相关介绍
BIND(Berkeley Internet Name Daemon),是现今互联网上最常使用的DNS服务器软件。
BIND软件的包名为bind
服务名:
/etc/rc.d/init.d/named #CentOS6
/usr/lib/systemd/system/named.service #CentOS7
相关包:
bind-chroot:将named进程的活动范围限定在chroot (/var/named/chroot/)目录,保证安全性。
bind-devel:与开发相关的头文件和库文件(编译安装bind时所需)
bind-libs:bind服务器端和客户端都使用到的公共库-文件
bind-utils:bind客户端工具
安装:
[root@CentOS7 ~]#yum -y install bind
Installed:
bind.x86_64 32:9.9.4-50.el7
Dependency Updated:
bind-libs.x86_64 32:9.9.4-50.el7
bind-libs-lite.x86_64 32:9.9.4-50.el7
bind-license.noarch 32:9.9.4-50.el7
bind-utils.x86_64 32:9.9.4-50.el7
Completet
配置文件功能
[root@CentOS6 ~]#rpm -ql bind
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #区域配置文件
/etc/rndc.conf #rndc(远程名称服务器控制器)配置文件
/etc/rndc.key #rndc加密密钥
/etc/sysconfig/named
/var/named/named.ca #13个根服务器存放文件
/etc/rc.d/init.d/named #服务脚本
/var/named #解析库文件存放目录
/var/named/ZONE_NAME.ZONE #解析库文件
rndc命令
rndc:
rndc --> rndc (953/tcp)
rndc COMMAND
COMMAND:
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别 trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
开启服务
[root@CentOS6 ~]#service named start
[root@CentOS7 ~]#systemctl start named
Generating /etc/rndc.key: [ OK ]
Starting named: [ OK ]
查看端口
[root@CentOS7 ~]#ss -nutlp
Netid State Recv-Q Send-Q Local Address:Port
udp UNCONN 0 0 *:5353 *:*
users:(("avahi-daemon",pid=560,fd=12))
udp UNCONN 0 0 127.0.0.1:53 *:*
users:(("named",pid=7540,fd=513),("named",pid=7540,fd=512))
udp UNCONN 0 0 192.168.122.1:53 *:*
users:(("dnsmasq",pid=2189,fd=5))
udp UNCONN 0 0 ::1:53 :::*
users:(("named",pid=7540,fd=515),("named",pid=7540,fd=514))
tcp LISTEN 0 10 127.0.0.1:53 *:*
users:(("named",pid=7540,fd=21))
tcp LISTEN 0 5 192.168.122.1:53 *:*
users:(("dnsmasq",pid=2189,fd=6))
tcp LISTEN 0 10 ::1:53 :::*
users:(("named",pid=7540,fd=22))
DNS服务使用UDP和TCP协议的53端口,观察开启服务后的53端口状态,发现53端口只监听本机的回还网址127.0.0.1而本机的回还网址,只能本机访问,其他机器不能访问到DNS服务监听的端口。所以,DNS服务安装服务包之后,直接开启服务并不能做到为其他机器提供DNS服务。
tcp协议53端口负责主从同步
udp协议53端口负责主从同步以及客户端查询
注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost 和本地回环地址的解析库
rndc: remote name domain controller, 默认与bind安装在同一主机,且只能通过127.0.0.1连接 named进程
提供辅助性的管理功能;953/tcp
备份配置文件
配置服务配置文件之前,养成良好习惯做备份
[root@CentOS6 ~]#cp /etc/named.conf /etc/named.conf.bak
[root@CentOS6 ~]#ll /etc/named.conf*
-rw-r----- 1 root named 984 Nov 20 2015 /etc/named.conf
-rw-r----- 1 root root 984 Sep 20 17:04 /etc/named.conf.bak
[root@CentOS6 ~]#getent passwd named
named:x:25:25:Named:/var/named:/sbin/nologin
备份配置文件要注意文件的权限,以及所有者所属组。如上,主配置文件对于other是没有任何权限的,但是文件属于named组,bind包安装的时候会创建named用户,服务运行将会以named的身份运行用户named属于named组所以对配置文件有读权限。如果备份的配置文件不属于named组那么程序以named身份运行就拿不到配置文件的读权限,程序自然也就不能正常运行了。
[root@CentOS6 ~]#chgrp named /etc/named.conf.bak
[root@CentOS6 ~]#ll /etc/named.conf.bak
-rw-r----- 1 root named 984 Sep 20 17:04 /etc/named.conf.bak
接下来就可以放心更改主配置文件了
/etc/named.conf
主配置文件
[root@CentOS6 ~]#vim /etc/named.conf
options {
#options全局配置
listen-on port 53 { localhost; };
#监听端口默认只监听本机回还网址不提供外界服务
#可以修改添加本机能与外部主机通信的IP地址来位外界服务
#或者将53端口绑定在本机所有IP写法为{ localhost; };
#或者加注释,或者删除该行,默认监听所有本机所有IP地址
listen-on-v6 port 53 { ::1; };
#IPV6地址监听情况可以写法与IPV4类似
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;
/* 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.rfc1912.zones";
include "/etc/named.root.key";
/etc/named.rfc1912.zones
区域信息配置文件
主DNS名称服务器:
(1) 在主配置文件中定义区域
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
(2) 定义区域解析库文件
出现的内容
宏定义
资源记录
主配置文件语法检查: named-checkconf
[root@CentOS6 ~]#vim /etc/named.rfc1912.zones
zone "huxiaoqi.com" IN {
#表示huxiaoqi.com这个域的DNS服务器
#IN表示inter类型,可以省略不写
type master;
#一个域通常要有多个DNS服务器,保证主DNS服务器出现故障时要有其他
#DNS服务器顶替主DNS服务器的工作。一个域只有一个主DNS服务器,type
#类型为master,其他的DNS服务器则为slave从服务器
file "huxiaoqi.com.zone";
#表示区域数据库文件名,路径在/var/named下
};
(3)允许更新:
指定的zone语句块中:Allow-update {any;};
[root@CentOS6 ~]#vim /etc/named.rfc1912.zones
zone "huxiaoqi.com" IN {
type master;
file "huxiaoqi.com.zone";
allow-update { 172.18.45.7; };
};
#指定IP为172.18.45.7的主机可以动态更新解析库文件
其他主机通过命令动态更新解析库文件之后更新的内容会立即生效,但是不会立即写入解析库文件,而是先以named这个系统用户在/var/named/这个目录下创建一个日志文件,隔一段时间才会更新真正的解析库文件。
所以,要实现授权其他主机可以动态更新解析库文件,前提是named这个系统用户对/var/named这个目录有读写执行权限,默认只有读执行权限。
更改权限:
[root@CentOS6 ~]#ll -d /var/named
drwxr-x--- 5 root named 4096 Sep 23 20:44 /var/named
[root@CentOS6 ~]#chmod g+w /var/named/
[root@CentOS6 ~]#ll -d /var/named/
drwxrwx--- 5 root named 4096 Sep 23 20:44 /var/named/
setsebool -P named_write_master_zones on 设置selinux策略
动态更新:
[root@CentOS7 ~]#nsupdate
> server 172.18.45.6 #指定要更新的DNSsrv
> zone huxiaoqi.com #指定要更新的库
> update add dbsrv.huxiaoqi.com 68400 IN A 8.8.8.8
#更新内容:添加一条A记录
#对应的删除该条记录就是update delete dbsrv.huxiaoqi.com A
> send
自动生成的日志文件:
-rw-r--r-- 1 named named 726 Sep 23 22:16 huxiaoqi.com.zone.jnl
测试:
[root@Centos6 ~]#dig dbsrv.huxiaoqi.com
;; ANSWER SECTION:
dbsrv.huxiaoqi.com. 68400 IN A 8.8.8.8
区域数据库文件
区域数据库文件简介
区域数据库文件的文件名要与之前区域配置文件中指定的文件名严格一致,存放位置在/var/named目录下
区域数据库文件要手工创建,格式较为复杂,可以参考系统已经存在的文件按照需求适当修改。
[root@CentOS6 ~]#ls /var/named/
data dynamic named.ca named.empty named.localhost named.loopback slaves
#named.localhost 参考该文件的格式
[root@CentOS6 ~]#cp -p /var/named/named.localhost /var/named/huxiaoqi.com.zone
#复制同样要注意权限问题 -p 保留源文件的属性信息
DNS服务器数据库中每一个条目都是一个资源记录(Resource Record,RR)。
常见的正解文件 RR 相关信息
[domain] IN [[RR type] [RR data]](值)
主机名. IN A IPv4 的 IP 地址
主机名. IN AAAA IPv6 的 IP 地址
领域名. IN NS 管理这个领域名的服务器主机名字.
领域名. IN SOA 管理这个领域名的七个重要参数
领域名. IN MX 顺序数字 接收邮件的服务器主机名字
主机别名. IN CNAME 实际代表这个主机别名的主机名字.
格式:任何类型的记录都会有五条内容
1NAME 2TTL 3IN 4RRType 5VALUE
NAME:拥有资源记录的DNS域名
TTL:以时间为单位,表示记录的缓存有效期,一般所有记录的缓存有效期都会一样。所以TTL可以提前定义变量,全局有效,不用每条记录都写。当然如果有特殊的记录与其他纪录的缓存有效期不同,也可以单独定义,单独定义的TTL的优先级高于提前定义的变量。
IN:internet类型一般照抄就行
VALUE:值,不同类型记录的值不同
RRType,记录类型包括:A, AAAA, PTR, SOA, NS, CNAME, MX
注意:
(1) TTL可从全局继承
(2) @可用于引用当前区域的名字
(3) 同一个名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
常用记录类型:
- A:
A记录也称为主机记录。将DNS域名指向一个IPv4的IP地址。一个域名可以创建多个不同的IPv4地址。
示例:www.huxiaoqi.com. IN A 172.18.45.6
FQDN(完全合格域名/全称域名)可以使用相对名称
**泛域名解析:*.huxiaoqi.com. IN A 5.5.5.5 **当用户输入错误的域名是跳转到指定的IP,例如输入wwwwww.huxiaoqi.com 这个域名那么跳转到5.5.5.5Z这个IP
$GENERATE 1-254 HOST$ A 1.2.3.$表示在某个个域中有HOST{1,254}这么多子域对应的域名是1.2.3.{1,254} - AAAA:
将DNS域名指向一个IPv6的IP地址。
CNAME:FQDN --> FQDN ,别名记录 - MX:
Mail eXchanger,邮件交换器
(Mail exchanger),区域名称 --> FQDN - NS:
域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析
NAME:区域名称,可以简写为@符号
VALUE:DNS服务器的FQDN,(可以使用相对名称)可以有多条 - SOA:Start of Authority
NS记录说明了有多台服务器在进行解析,但哪一个才是主服务器呢,NS并没有说明,这个就要看SOA记录了,SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器
$TTL 1D #提前定义所有记录的缓存有效期为一天,后续记录省略该项
@ IN SOA DNS1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
#NAME:@ SOA的NAME就是本域的域名可以用@表示,也可以写成本域的域名既对应的区域配置文件中定义的域的域名,之前配置文件定义的域是huxiaoqi.com,所以这里的本域域名应叫huxiaoqi.com.注意,com之后的.不能省略。简易直接使用@表示。
#TTL:省略,因为提前定义了
#IN:照抄的关键字
#RRType:SOA资源记录类型
#VALURE:SOA记录的值有七项,从DNS1到记录末尾都是SOA记录的值
#第一项:主DNSsrv的标识,表示谁提供了本域的主要解析服务,只起到表标识作用,配合一条A记录指明主DNSsev的IP地址例如:
#DNS1 A 172.18.45.6
#第二项:主DNSsev的管理员的邮箱地址,邮箱中的@以.替换末尾以.结束
#第三项:0 ; serial表示该区域数据库的版本号,可以从任何数字开始,最多十位。每次更改主数据库内容时都要增大版本号,从数据库根据版本号来判断主数据库的数据是否发生变化。
#第四项:1D ; refresh表示从DNSsrv主动去主DNSsrv拉取数据的周期。
#第五项:1H ; retry表示从DNSsrv主动去主DNSsrv拉取数据失败后再次尝试的时间间隔。
#第六项:1W ; expire表示从DNSsrv如果一周时间还不能成功的从主DNSsrv拉取数据,那么从DNSsrv数据失效
#第七项:3H ; minimum表示解析失败记录缓存有效期
- PTR
反向解析记录
PoinTeR,IP --> FQDN - CNAME:
Canonical Name,别名记录
DNS正向解析
基于之前配置的主配置文件,以及区域配置文件。然后配置解析数据库文件,达到DNS服务的初步正向解析。
解析库文件语法检查:
named-checkzone "huxiaoqi" /var/named/huxiaoqi.com.zone
rndc status|reload 服务状态|重读配置文件
service named reload 重读配置文件
配置解析数据库文件:
[root@CentOS6 ~]#vim /var/named/huxiaoqi.com.zone
$TTL 1D
@ IN SOA dns1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 172.18.45.6
websrv A 172.18.45.7
www CNAME websrv
#主DNSsrv为dns1
#一条A记录域名为websrv的主机的IP地址为172.18.45.7
#一条CNAME别名记录,表明www为websrv的别名
检查配置文件语法:
[root@CentOS6 ~]#named-checkzone huxiaoqi.com /var/named/huxiaoqi.com.zone
zone huxiaoqi.com/IN: loaded serial 0
OK
#命令之后跟域名再跟解析数据库文件的路径
重读配置文件:
[root@CentOS6 ~]#rndc reload
server reload successful
测试:
使用其他机器测试的时候要求修改主配置文件/etc/named.conf中options栏下的allow-query { 172.18.45.61; };项,指定允许查询的主机IP,如果该DNSsrv提供外界服务那么可以写成allow-query { any; };表示所有主机都能查询。
[root@CentOS6 ~]#dig www.huxiaoqi.com @172.18.45.6
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.huxiaoqi.com @172.18.45.6
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; ANSWER SECTION:
www.huxiaoqi.com. 86400 IN CNAME websrv.huxiaoqi.com.
websrv.huxiaoqi.com. 86400 IN A 172.18.45.7
#只摘取了部分信息
#flags: qr aa 表示查询的域名在这台DNS服务器的解析数据库中有记录,是权威数据。
DNS反向解析
反向区域:
区域名称:网络地址反写.in-addr.arpa. 172.16.100. --> 100.16.172.in-addr.arpa.
(1) 定义区域
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone"
};
(2) 定义区域解析库文件
注意:不需要MX,以PTR记录为主
基于之前主配置文件/etc/named.conf的配置,配置区域信息配置文件,建立反向解析数据库,实现DNSsrv反响解析:
区域信息配置文件写法示例:
zone "45.18.172.in-addr.arpa"{
type master;
file "172.18.45.zone"; #指定反向解析数据库文件名
};
[root@CentOS6 ~]#named-checkconf
#语法检查
反向解析数据库文件写法:
[root@CentOS6 ~]#vim /var/named/172.18.45.zone
$TTL 1D
@ IN SOA dns1.huxiaoqi.com. admin.hxq.com. (
1
10m
2m
1h
3h )
NS dns1.huxiaoqi.com.
7 PTR websrv.huxiaoqi.com.
6 PTR mailsrv.huxiaoqi.com.
#SOA记录指定dns1.huxiaoqi.com.这个主机是该域的反向解析的主DNSsrv.
#两条PTR记录分别表示IP为172.18.45.7对应的FQDN是dns1.huxiaoqi.com.,IP为172.18.45.6的这个主机对应的FQDN是mailsrv.huxiaoqi.com.
语法检查:
[root@CentOS6 named]#named-checkzone "45.18.172.in-addr.arpa" 172.18.45.zone
zone 45.18.172.in-addr.arpa/IN: loaded serial 1
OK
````
检测:
```shell
[root@Centos6 ~]#dig -x 172.18.45.7
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> -x 172.18.45.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41806
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; ANSWER SECTION:
7.45.18.172.in-addr.arpa. 86400 IN PTR websrv.huxiaoqi.com.
拿到域名,完成反向解析
实现主从服务器
1、应该为一台独立的名称服务器
2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文 件应该放置于/var/named/slaves/目录中
4、主服务器得允许从服务器作区域传送
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低
定义从区域的方法:
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
zone "huxiaoqi.com" IN {
type slave;
masters { 172.18.45.6; };
file "slaves/huxiaoqi.com.slave.zone";
};
#类型为slave,指定主DNSsrv是172.18.45.6
#解析库文件位置在/var/named/slaves/目录下
#解析库文件名为huxiaoqi.com.slave.zone
从DNSsrv的解析库文件,不需要手动去创建,系统自动从指定的主DNServ上抓取数据然后保存在/var/named/slaves目录下。
主DNSsrv的解析库文件如果修改数据的话,一定要把版本号serial调大,从DNSsrv只根据主DNSsrv的解析库文件的版本好来判断解析库文件是否发生变化。
默认情况下,其他主机可以轻易的通过命令抓取DNSsrv的解析库文件的数据,存在安全风险,所以主DNSsrv应设置只允许自己的从DNSsrv从自己的解析库文件抓取数据。而从DNSsrv则应设置不允许任何人抓取解析库文件。
在/etc/named.conf中添加一行:allow-transfer {none|IP;};
子域
实现子域父域在同一台DNSsrv
假设huxiaoqi.com这个域有一个子域zhengzhou,平时访问量不大,没有单独配置DNSsrv的意义,就考虑在一台DNSsrv配置。
方法就是将zhengzhou.huxiaoqi.com这个域独立成一个域,也就是独立创建一个zone。此时事实上这两个域相互独立没有关系,仅从域名来说存在父子关系。
实现主DNSsrv委派子域给其他DNSsrv:
例如zhengzhou这个域是huxiaoqi.com 的一个子域,因为访问量太大,一台服务器那一负载。所以考虑将该子域委派给其他DNSsrv。
在huxiaoqi.com这个域的解析库文件中添加一条NS记录:
zhengzhou NS 172.18.45.7
#指定郑州这个域由IP为172.18.45.7这台主机提供名字解析服务
在IP为172.18.45.7这台主机上创建zhenghzou.huxiaoqi.com这个域
[root@CentOS7 ~]#vim /etc/named.rfc1912.zones
zone "zhengzhou.huxiaoqi.com" IN {
type master;
file "zhengzhou.huxiaoqi.com.zone";
};
创建该域的解析库文件:
[root@CentOS7 ~]#cat /var/named/zhengzhou.huxiaoqi.com.zone
$TTL 86400 ; 1 day
@ IN SOA dns1 rname.invalid. (
1
86400
3600
604800
10800
)
NS dns1
dns1 A 172.18.45.7
dbsrv A 8.8.8.8
测试:
[root@Centos6 ~]#dig dnsrv.zhengzhou.huxiaoqi.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> dnsrv.zhengzhou.huxiaoqi.com
;; global options: +cmd
;; Got answer:
;; ANSWER SECTION:
dnsrv.zhengzhou.huxiaoqi.com. 86400 IN A 8.8.8.8
成功
转发服务器
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
/etc/named.com
Options {
forward first|only;
forwarders { ip;};
};
#两种转发规则:
#first:自己解析不了的域名先转发给指定的DNSsrv,如果目标DNSsrv也不能解析就继续转发给根。
#only:自己解析不了的域名只转发给指定的DNSsrv,无论有么有得到答案都不再继续转发。
(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
注意:关闭dnssec(安全检测)功能:
dnssec-enable no;
dnssec-validation no;
bind中ACL
bind中基础的安全相关的配置: acl: 把一个或多个地址归并为一个集合,并通过一个统一的名 称调用
格式:
acl acl_name {
ip;
net/prelen;
……
};
bind有四个内置的acl:
none: 没有一个主机
any: 任意主机
localhost: 本机
localnet: 本机的IP同掩码运算后得到的网络地址
注意:只能先定义,后使用;因此一般定义在配置文件中, 处于options的前面
访问控制
访问控制的指令:
allow-query {}: 允许查询的主机;白名单
allow-transfer {}:允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机,建议全局使用
allow-update {}: 允许更新区域数据库中的内容
测试命令
dig:
dig [-t type] name [@SERVER] [query options]
dig只用于测试dns系统,不会查询hosts文件进行解析
查询选项:
+[no]trace:跟踪解析过程 : dig +trace huxiaoqi.com
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP = dig –t ptr reverseip.in-addr.arpa
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
dig -t axfr magedu.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
dig -t NS . @114.114.114.114 #查询根的NS记录,也就是根的13个DNSsrv
dig -t NS . @a.root-servers.net
host:
语法:
host [-t type] name [SERVER]
host –t NS huxiaoqi.com 172.16.0.1
host –t soa huxiaoqi.com
host –t mx huxiaoqi.com
host –t axfr huxiaoqi.com
host 1.2.3.4
nslookup:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
智能DNS
服务器与客户端之间的距离也会影响连接速度,DNS可以利用视图的原理实现智能DNS,既实现当来自不同地区的客户访问同一台客户端的时候,DNS服务器自动识别客户端的地区,然后返回一个与客户端相对距离较近的服务器的IP地址。
view:视图,一个bind服务器可定义多个view,每个view中可 定义一个或多个zone
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
格式:
view VIEW_NAME {
match-clients { testacl; };
zone “huxiaoqi.com” {
type master;
file “huxiaoqi.com.zone”;
};
include “/etc/named.rfc1912.zones”;
};
事实上DNSsrv的搭建是比较困难的,对于一般的中小型公司可以选择购买CDN服务。
CDN: Content Delivery Network 服务商:蓝汛,网宿,帝联等
智能DNS: dnspod dns.la
关于DNS的相关知识就介绍到这儿了,如果有疑问,或者发现错误请留言吧。