DNS(Domain Name System,域名系统),在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务,简单的说,域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。但是实际上是通过ip去访问的!通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

DNS功能

互联网上(或者局域网)的每一台主机需要互相访问通讯,都必须有一个IP地址,或者IPV4,或者IPV6,而每一个IP都可以有一个主机名(或者域名),主机名可以是一个或多个字符串,方便我们的记忆,字符串可以有小数点隔开。而每一台主机的IP地址相当累赘,那么有了DNS域名解析,我们就可以很方便的只记忆我们的字符串!

拓展:主机到IP的映射有两种:

1)静态映射,每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用,也就是我们常说的hosts文件;

2)动态映射,建立一套域名解析系统(DNS),只在专门的DNS服务器上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址。

通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。在解析域名时,可以首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法。可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。

HOSTS等相关配置文件

在引入DNS之前,网络中的主机是将容易记忆的域名映射到IP地址并将它保存在一个共享的静态文件/etc/hosts中,再有hosts文件来实现网络中域名的管理。

hosts是一个没有扩展名的系统文件,其作用是将一些常用的网络域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从/etc/hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址解析。

若想要优先选取DNS解析,可以修改/etc/nsswitch.conf文件。

hosts:     files dns myhostname

文件解析优先级高于DNS,把files与dns调换位置,dns的优先级高于hosts文件。

/etc/resolv.conf :是 ISP 的 DNS 服务器 IP 记录处;尽量不要设定超过 3 部以上的 DNS IP 在 /etc/resolv.conf 中,因为如果是你的区网出问题,导致无法联机到 DNS 服务器,那么你的主机还是会向每部 DNS 服务器发出联机要求,每次联机都有timeout 时间的等待。

域名空间

DNS是一个分布式的数据库,命名系统采用层次的逻辑结构,如同一个倒置的树,这个逻辑的属性结构称之为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息!

DNS域名空间中,最大层次不能超过127层,每个节点最长可以存储63个字符!

名空间如下图:

DNS树的每一个节点代表一个域,通过这些节点,对整个域名空间进行划分,称为一个层次结构,域名空间的每个域的名字,通过域名来表示。

它允许对整个数据库的各个部分进行本地控制;同时整个网络也能通过客户-服务器方式访问每个部分的数据,借助备份和缓存机制,DNS将更强壮和足够的性能。

域名又称网域:是由一串用点分隔的名字组成的Internet上某台计算机或者计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)

域名有一个FQDN(Full Qualified Domain Name完全合格域名)标示,实际上指的是主机名的全路径。FQDN能够准确表示出相对DNS域树根的位置,也是就是当前节点到DNS树根的完整表达式。从节点到树根,将每个节点采用.分割,最有一个.代表根域。对于DNS域baidu来说,她的完全合格域名是baidu.com.,通常我们会省略根域.

举例:baidu为com域的子域,表示方法为baidu.com,www是baidu域中的子域。可以使用www.baidu.com

通常我们FQDN有严格的命名限制:长度不能超过256个字节,只允许使用字符0-9,a-z,-号,而我们的点好只能用来隔开域名标志之间或者在FQDN结尾使用,通常省略!

层次域

从根域开始,由上往下,可以分为:根域 ,顶级域,二级域,子域,然后才是主机!

Internet域名空间最高层是根域,记录了Internet上DNS重要信息,有Internet域名注册授权机构管理,该机构把域名空间各部分分配给连接到Internet的各个组织!

根域,全世界13个根域(root)服务器,10台在美国,英国,瑞士,日本各一台 。

Linux 根域存放路径:

[root@node63 ~]# cat /var/named/named.ca

a.root-servers.net.     3600000 IN      A       198.41.0.4

b.root-servers.net.     3600000 IN      A       192.228.79.201

c.root-servers.net.     3600000 IN      A       192.33.4.12

d.root-servers.net.     3600000 IN      A       199.7.91.13

e.root-servers.net.     3600000 IN      A       192.203.230.10

f.root-servers.net.     3600000 IN      A       192.5.5.241

g.root-servers.net.     3600000 IN      A       192.112.36.4

h.root-servers.net.     3600000 IN      A       198.97.190.53

i.root-servers.net.     3600000 IN      A       192.36.148.17

j.root-servers.net.     3600000 IN      A       192.58.128.30

k.root-servers.net.     3600000 IN      A       193.0.14.129

l.root-servers.net.     3600000 IN      A       199.7.83.42

m.root-servers.net.     3600000 IN      A       202.12.27.33

a.root-servers.net.     3600000 IN      AAAA    2001:503:ba3e::2:30

b.root-servers.net.     3600000 IN      AAAA    2001:500:84::b

c.root-servers.net.     3600000 IN      AAAA    2001:500:2::c

d.root-servers.net.     3600000 IN      AAAA    2001:500:2d::d

e.root-servers.net.     3600000 IN      AAAA    2001:500:a8::e

f.root-servers.net.     3600000 IN      AAAA    2001:500:2f::f

g.root-servers.net.     3600000 IN      AAAA    2001:500:12::d0d

h.root-servers.net.     3600000 IN      AAAA    2001:500:1::53

i.root-servers.net.     3600000 IN      AAAA    2001:7fe::53

j.root-servers.net.     3600000 IN      AAAA    2001:503:c27::2:30

k.root-servers.net.     3600000 IN      AAAA    2001:7fd::1

l.root-servers.net.     3600000 IN      AAAA    2001:500:9f::42

m.root-servers.net.     3600000 IN      AAAA    2001:dc3::35

域名分类

组织域:采用三个字符号,表示DNS域中所包含组织的主要功能或活动,包括 com:商业机构   edu:教育组织   gov:政府组织   mil:军事机构   net:网络机构组织   org:非盈利机构组织   int:国际机构组织

地址域:cn 中国,kr 韩国,us 美国,jp 日本,hk 香港,一般使用两个字符代表国家或者地区的代号

反向域:名字为in-addr.arpa,用于将IP地址映射到名字,反向查询,ip映射到域名

区(zone),资源记录

资源记录,DNS名称空间的一部分,其包含了一组存储在DNS服务器上的资源记录。

DNS服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。

资源记录参数说明

SOA:起始授权记录,Start of Authority Record; 每个区的开始处都包含起始授权记录,SOA定义了域的全局参数,进行整个域的管理,一个区有且仅有一个SOA记录。

NS:Name Server 域名服务记录;指定该域名由那个DNS服务器来解析,每个区在区根处至少包含一条NS记录。

Aaddress记录,把FQDN映射到IP地址,因为有此记录,所以DNS服务器能够解析FQDN域名对应的IP地址。

PTR:指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名,反A记录,指针PRT记录把IP映射到FQDN,用于反向查询,通过IP地址,找到域名。

CNAME:别名记录,记录创建特定FQDN的别名,用户可以使用CNAME记录来隐藏网络用户的实现细节,使连接的客户机无法知道真正的域名。例:ping百度时,解析到了百度的别名服务器。百度有个cname=www.a.shifen.com.的别名

MX:邮件交换记录,为DNS指定邮件交换服务器

主域名服务器与辅助域名服务器(主从)

辅助服务器启动的时候,他与该区主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通讯,查看区数据是否改变,如果改变了,他就进行一次数据更新传输。

每个区必须有主服务器,每个区至少应有一台辅助服务器,否则主服务器崩溃,就服务解析该区名称。

辅助服务器的优点:

1)容错

在主服务器崩溃的情况下,辅助服务器可以继续解析该名称,一般把区的主服务器和区的辅助服务器安装载不同的子网上,如果一个子网连接中断,DNS客户机还能直接查询另外一个子网上的名称服务器

2)减少广域网链路的通信量

某个区域有大量客户机,用户就可以远程添加该区的辅助服务器,并把远程的客户机配置成优选查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS解析。

3)减轻主服务器的负载

辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的次数。

DNS服务器:运行DNS服务器程序的计算机,存储DNS数据库信息,DNS服务器会尝试解析客户端的查询请求。

DNS缓存:DNS服务器在解析客户机的请求时,如果本地没有DNS信息,就会问其他DNS服务器,当其他域名服务器返回查询结果的时候,该DNS服务器会将结果记录在本地缓存中,成为DNS缓存。下一次客户机提交相同请求时,DNS服务器能够直接使用缓存里面的数据进行解析。记忆在 cache 当中的数据,其实是有时间性的,当过了 DNS 设定记忆的时间 (通常可能是 24 小时),那么该记录就会被释放喔!

DNS工作原理

DNS的查询过程包括递归查询和迭代查询:

递归查询:

客户机向DNS服务器发送请求,DNS服务器会使用一个准备的查询结果回复给客户端,如果DNS服务器本地没有储存查询的DNS信息,那么他会查询其他的DNS服务器,并将查询结果提交给客户机。对于客户机来讲只发出一次请求。

迭代查询:

客户端向DNS服务器发送请求,如果该服务器本地没有储存查询的DNS信息,那么他会告诉客户端另一台DNS服务器的地址,客户机在向这台DNS服务器查询DNS信息,依次查询直到返回结果。

PC-本地DNS是递归,DNS服务器之间的是迭代查询

正反向解析

1)正向解析

正向解析是指域名到IP 地址的解析过程。

域名----IP

nslookup  域名

dig  域名

2)反向解析

反向解析是从IP 地址到域名的解析过程。反向解析的作用为服务器的身份验证。

IP----域名

nslookup IP地址

dig -x IP地址

工作模式和端口

端口:TCP/53,UDP/53   //用户客户端查询,递归查询

TCP/953,UDP/953     //DNS主从同步

工作模式:C/S模式

安装软件包

bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm                      //DNS服务主程序包,Berkeley Internet Name Domain 伯克利英特网名称域系统,有BIND4.8.9三个版本BIND8融合了许多提高效率和安全性的技术,BIND9支持IPv6,密钥加密,多处理器支持,线程安全操作,增量区传送等。

bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm            //使bind运行时的/目录不是系统真正的/,而是系统的一个子目录而已,这样提高了系统的安全性。Bind访问的范围仅限于这个子目录的范围内,无法进一步提成,进入系统其它目录中。该包在3.x以上的内核版本,默认不安装。

bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm               //包含客户端工具。默认安装,用于搜索域名指令。

bind-dyndb-ldap-2.3-5.el6.x86_64.rpm                      //LDAP的插件,提供主机名IP动态更新(非必装)。

bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm                //一些库文件。

[root@node63 ~]# yum install -y bind bind-chroot bind-utils bind-libs  //软件包安装

DNS服务启动及配置文件

DNS的核心配置文件位置:/etc/named.conf,这里只有最基本的配置,不包括区域数据和记录这个/var/named/目录是DNS的工作目录,但是对于由于安全性,启动DNS服务器之后,这个目录会挂载到我们的/:下面,然后用这个对外服务,而却这个目录是囚牢的,在对外的同时会认为这就是一个根目录(/var/named/chroot),保证了DNSServer的安全性!

[root@node63 ~]# systemctl restart named              //启动服务

[root@node63 ~]# systemctl enable named

核心配置文件

[root@node63 ~]# vim /etc/named.conf

options {                                            #全局设置,整体有效

listen-on port 53 { any; };                 #侦听端口和IP,这里所有使用any

listen-on-v6 port 53 { ::1; };                         #IPv6的端口和地址

directory       "/var/named";                         #dns工作的目录

dump-file       "/var/named/data/cache_dump.db"; #cache,缓存信息保存地址

statistics-file "/var/named/data/named_stats.txt";         #服务器的数据信息

memstatistics-file "/var/named/data/named_mem_stats.txt";    #以记录日志相关

allow-query     { any; };                                  #允许谁来查

recursion yes;                             #允许递归查询,如果构建授权的DNS服务器,请不要开启递归,如果构建递归(缓存)的DNS服务器,请开启递归。

dnssec-enable yes;                                 #dnssec都是安全相关,如果没有做秘钥认证,需要将这两行注释。

dnssec-validation yes;

/* Path to ISC DLV key */

bindkeys-file "/etc/named.iscdlv.key";                          #key文件

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

pid-file "/run/named/named.pid";

session-keyfile "/run/named/session.key";

};

logging {

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

zone "." IN {                                    #13个根服务器地址

type hint;                               #type类型,hint为根

file "named.ca";

};

include "/etc/named.rfc1912.zones";                #include中的文件也是主配置文件

include "/etc/named.root.key";

DNS服务类型分为:hint(根)、master(主)、forward(转发)、slave(从);Slave 必须要与 Master 相互搭配。

include配置文件

[root@node63 ~]# vim /etc/named.rfc1912.zones

通过添加一个实例,来说明每个字段的含义(几乎这个文件的字段含义都是如此)

zone "example.cn" IN {                           #域名

type master;                            #type类型,master

file "example.cn.zone";             #区域文件保存位置.zone文件位置,用实例来说明买个字段的意思

allow-update { none; };           #是否允许动态更新(DNS和DHCP结合是使用)

};

最后一个zone的{}后没有分号。

#这一部分当然也可以集成到/var/named/chroot/etc/named.conf里面去,没有问题

配置正反向解析

正向解析文件格式:

zone "DNS域名" IN {

type hint;

file "解析文件名";

allow-update { none; };

};

反向解析文件格式:

zone "IP地址网段反写.in-addr.arpa" IN {

type master;

file "解析文件名";

allow-update { none; };

};

核心配置文件的修改

[root@node63 ~]# vim /etc/named.conf

options {

listen-on port 53 { any; };                 #这里修改

listen-on-v6 port 53 { ::1; };              #没有启用IPV6,不改

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     { any; };                       #允许谁来查询,修改

recursion yes;

……

正向解析配置zone文件指定

[root@node63 ~]# vim /etc/named.rfc1912.zones     //介绍的时候已经建立了,我们利用起来

zone "example.cn" IN {                           #域名

type master;                            #type类型,master

file "example.cn.zone";             #区域文件保存位置.zone文件位置,用实例来说明买个字段的意思

allow-update { none; };       #是否允许动态更新(DNS和DHCP结合是使用)

};

建立zone文件记录文件

[root@node63 ~]# cd /var/named/            //这个是区域记录文件位置

[root@node63 named]# vim example.cn.zone

$TTL 1D #设置有效地址解析记录的默认缓存时间,最大生存时间,1D就是1天,缓存声明周期 time to live

#@代表区域名,引用主配置文件定义的域,这里就是代表example.cn.,可以改写为example.cn

#IN Internet Name

#SOA 权威结构,起始授权记录。后面的dns.就是其实授权记录,有且仅有一条SOA

#主机名,DNS名称

#代表DNS管理员的邮箱地址,有什么问题通知谁,@用.代替@有其他含义

@       IN SOA  dns.example.cn.  root.example.cn. (

0                  ; serial    #序列号,手工改,同步用

1D             ; refresh    #1天更新,多长时间请求更新

1H             ; retry      #一天联系上,过一个小时再试

1W     ; expire     #1周时间过期,一直联系不上时

3H )    ; minimum    #最短的有效期,3小时,不需要更新

#下面这里没有写@符号,代表继承了上层

NS   dns.example.cn. #最好和上面同步,如果要写完整,可以写dns.example.cn.后面的.一定要带上

#主机头,这里填写主机头,注意要对我们上面的NS记录做一条主机记录

dns    A       192.168.1.63

ftp    A       192.168.122.122

www1    CNAME   ftp.example.cn.

#没有启用IPV6,就把最后一行删除,否则在CNAME或者其他的情况会出现错误

[root@node63 named]# chown root:named example.cn.zone

[root@node63 named]# named-checkzone  "example.cn" /var/named/example.cn.zone //测试配置文件是否有问题

zone example.cn/IN: loaded serial 0

OK

[root@node63 named]# systemctl restart named

[root@node63 named]# named-checkconf

测试

[root@node63 named]# cd

[root@node63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0            //修改DNS地址为本机自己

DNS1=192.168.1.63

[root@node63 ~]# systemctl restart network

[root@node63 ~]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 192.168.1.63

[root@node63 ~]# ping dns.example.cn                   //测试ping命令

PING dns.example.cn (192.168.1.63) 56(84) bytes of data.

64 bytes from example63 (192.168.1.63): icmp_seq=1 ttl=64 time=0.042 ms

64 bytes from example63 (192.168.1.63): icmp_seq=2 ttl=64 time=0.053 ms

……

[root@node63 ~]# dig ftp.example.cn @localhost                   //使用dig命令测试DNS解析

dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便,不用象nslookup总是set不停。

由于一些原因,希望从指定的 DNS 服务器上进行查询(从默认的 DNS 服务器上获得的结果可能不准确)。指定 DNS 服务器的方式为使用 @ 符号:

dig是domain information groper的缩写,域名信息查询

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> ftp.example.cn @localhost

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20983

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;ftp.example.cn.         IN  A

;; ANSWER SECTION:

ftp.example.cn.      86400   IN  A   192.168.122.122

;; AUTHORITY SECTION:

example.cn.      86400   IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: ::1#53(::1)

;; WHEN: Thu Oct 15 14:35:48 2015

;; MSG SIZE  rcvd: 81

在这个范例当中,我们可以看到整个显示出的讯息包括有几个部分:

  QUESTION(问题):显示所要查询的内容,因为我们是查询ftp.example.cn.的 IP,所以这里显示 A (Address);

ANSWER(回答):依据刚刚的 QUESTION 去查询所得到的结果,答案就是回答IP 啊!

AUTHORITY(验证):由这里我们可以知道ftp.example.cn. 是由哪部 DNS服务器所提供的答案! 结果是dns.example.cn.主机管理的。另外,那个 86400 是啥?是允许查询者能够保留这笔记录多久的意思 ,在dns.example.cn.的设定中,预设可以保留 600 秒。

[root@node63 ~]# dig www1.example.cn @localhost                     //查询别名相关信息

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> www1.example.cn @localhost

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65198

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;www1.example.cn.            IN  A

;; ANSWER SECTION:

www1.example.cn.     86400   IN  CNAME   ftp.example.cn.

ftp.example.cn.      86400   IN  A   192.168.122.122

;; AUTHORITY SECTION:

example.cn.      86400   IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: ::1#53(::1)

;; WHEN: Thu Oct 15 14:37:40 2015

;; MSG SIZE  rcvd: 100

正向解析的步骤:

1、修改named.conf

2、修改include  named.rfc1912.zones  添加资源记录

3、修改区域记录example.cn.zone

4、检测文件错误  named-checkconf   、named-checkzone

5、重启服务

6、dig解析测试

反向解析

[root@node63 ~]# vim /etc/named.rfc1912.zones

zone "111.168.192.in-addr.arpa" IN {

type master;

file "example.cn.rev";

allow-update { none; };

};

[root@node63 ~]# cd /var/named/

[root@node63 named]# cp -p example.cn.zone example.cn.rev        //记录文件创建

[root@node63 named]# vim example.cn.rev

$TTL 1D

@       IN SOA  dns.example.cn. root.example.cn. (

0       ; serial

1D      ; refresh

1H      ; retry

1W      ; expire

3H )    ; minimum

NS      dns.example.cn.

123     IN PTR  abc.example.cn.

122     IN PTR  bcd.example.cn.          #PTR指针,反向解析记录

[root@node63 named]# named-checkzone "111.168.192.in-addr,arpa" /var/named/example.cn.rev

111.168.192.in-addr,arpa/IN: loaded serial 0

OK

重启服务

[root@node63 named]# systemctl restart named

[root@node63 named]# dig -x 192.168.111.123 @localhost        //-x后面应该直接跟IP即可

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 192.168.111.123 @localhost

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31102

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;123.111.168.192.in-addr.arpa.  IN  PTR

;; ANSWER SECTION:

123.111.168.192.in-addr.arpa. 86400 IN  PTR abc.example.cn.

;; AUTHORITY SECTION:

111.168.192.in-addr.arpa. 86400 IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: ::1#53(::1)

;; WHEN: Thu Oct 15 14:47:25 2015

;; MSG SIZE  rcvd: 107

配置递归查询

[root@node63 ~]# vim /etc/named.conf

……

recursion yes;                   #默认就是支持递归查询,但是我们需要把下面关于三条加密的内容注销,实验环境客户端才能进行DNS递归查询,其他内容不用管,同时,关闭了加密通讯功能,才可以和根服务器进行迭代查询

#       dnssec-enable yes;

#       dnssec-validation yes;

#       dnssec-lookaside auto;

……

[root@node63 ~]# systemctl  reload named                   //重新读取配置文件

测试:

DNS修改为本机的DNS,如果没有配置DNS,我们是没有办法解析外面的服务器,那么现在测试

[root@node63 ~]# ping www.baidu.com

PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.

64 bytes from 180.97.33.108: icmp_seq=1 ttl=52 time=31.4 ms

64 bytes from 180.97.33.108: icmp_seq=2 ttl=52 time=31.5 ms

64 bytes from 180.97.33.108: icmp_seq=3 ttl=52 time=30.6 ms

配置DNS转发

典型应用场景:家用路由器

我们再配置一台DNS服务器node64

[root@node64 ~]# yum install -y bind bind-chroot bind-utils

[root@node64 ~]# systemctl restart named

[root@node64 ~]# vim /etc/named.conf

options {

listen-on port 53 { any; };         #修改

listen-on-v6 port 53 { any; };

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     { any; };           #修改

recursion yes;

#idnssec-enable yes;                #三行注释

#dnssec-validation yes;

#dnssec-lookaside auto;

forward only;       #only,仅仅转发,first,先查找再转发,实验效果,仅仅转发

forwarders { 192.168.1.63; };   #指定转发查询请求的DNS服务器列表

……

测试

[root@node64 ~]# dig @localhost ftp.example.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> @localhost ftp.example.cn

; (2 servers found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58841

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;ftp.example.cn.         IN  A

;; ANSWER SECTION:

ftp.example.cn.      86400   IN  A   192.168.122.122

;; Query time: 950 msec

;; SERVER: ::1#53(::1)

;; WHEN: Thu Oct 15 15:10:02 2015

;; MSG SIZE  rcvd: 47

主从服务器配置

主服务器配置文件

[root@node63 ~]# vim /etc/named.rfc1912.zones

zone "example.com" IN {

type master;

file "example.com.zone";

allow-transfer { 10.10.0.0/24; };  #将allow-update { none; };修改为allow-transfer { IP网段; };,允许10.10.0.0/24网段的从服务器同步example.com区域的配置。

# 允许那个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认所有。

从服务器配置文件

Slave 必须要与 Master 相互搭配。

Master / Slave 的查询优先权?

另外,既然我的所有 DNS 服务器是需要同时提供 internet 上面的领域名解析的服务, 所以不论是 Master 还是 Slave 服务器,他都必须要可以同时提供 DNS 的服务才好! 因为在 DNS 系统当中,领域名的查询是『先抢先赢』的状态,我们不会晓得哪一部主机的数据会先被查询到的! 为了提供良好的 DNS 服务,每部 DNS 主机都要能正常工作才好啊!而且,每一部 DNS 服务器的数据库内容需要完全一致,否则就会造成客户端找到的 IP 是错误的!

[root@node64 ~]# vim /var/named/chroot/etc/named.conf

options {

listen-on port 53 { any; };         #修改监控地址

listen-on-v6 port 53 { any; };      #修改监控地址

● ● ● ● ● ●

allow-query     { any; };           #允许所有来查询

recursion yes;

masterfile-format text;    #麒麟OS需要加上该参数,否则,从服务器上的同步文件显示乱码

● ● ● ● ● ●

#dnssec-enable yes;                 #注释这三行

#dnssec-validation yes;

#dnssec-lookaside auto;

● ● ● ● ● ●

[root@node64 ~]# vim /etc/named.rfc1912.zones

zone "example.cn" IN {

type slave;                             #更改类型为从服务器

file "slaves/example.cn.zone.slave";     #从主服务器上获取的zone文件存放位置

masters { 192.168.1.63; };             #主服务器地址,可能是很多台,所以用masters

};

#通过这一段配置,从DNS服务器就可以从主服务器上获取解析记录文件,这里需要注意的是slave和slaves以及masters的单词,有的有s,有的没有。配置好之后,重启服务就会在指定的//var/named/chroot/var/named/slaves/example.cn.zone.slavec创建该文件,这个文而建是从DNS主服务器上获取的数据

[root@node64 ~]# systemctl restart named

[root@node64 ~]# ll /var/named/slaves/example.cn.zone.slave//查看文件产生与否

-rw-r--r-- 1 named named 352 Oct 15 15:59 /var/named/slaves/example.cn.zone.slave

[root@node64 ~]# vim /var/named/chroot/var/named/slaves/example.cn.zone.slave

$ORIGIN .

$TTL 86400      ; 1 day

example.cn               IN SOA  dns.example.cn. root.example.cn. (

0          ; serial

86400      ; refresh (1 day)

3600       ; retry (1 hour)

604800     ; expire (1 week)

10800      ; minimum (3 hours)

)

NS      dns.example.cn.

$ORIGIN example.cn.

dns                     A       192.168.1.63

ftp                     A       192.168.111.111

www

主从秘钥认证

配置主从秘钥认证,保证主从同步的时候数据的安全性

时间同步

主从都做

[root@node63 ~]# ntpdate 0.rhel.pool.ntp.org

[root@node64 ~]# ntpdate 0.rhel.pool.ntp.org

准备秘钥

主服务器上准备秘钥。

[root@node63 ~]# cd /var/named/chroot/

[root@node63 chroot]# dnssec-keygen -a hmac-md5 -b 128 -n HOST densec

-a,algorithm 算法的意思,这里采用Hmac-MD5的加散发

-b,keysize 生成密钥的长度  128位

-n,nametype 密钥类型,主机类型 HOST,常用的:ZONE,HOST,ENTITY,USER,OTHER  默认认证是ZONE类型

dnssec,生成密钥的名字

[root@node63 chroot]# ll Kdensec.+157+13812.*                    //查看密钥对

-rw------- 1 root root  50 Oct 15 16:19 Kdensec.+157+13812.key

-rw------- 1 root root 165 Oct 15 16:19 Kdensec.+157+13812.private

[root@node63 chroot]# cat Kdensec.+157+13812.key                    //查看密钥

densec. IN KEY 512 3 157 uWmHZ/J20tcZSLsXDiBHtw==

修改主DNS支持秘钥认证

[root@node63 chroot]# cd ; vim /var/named/chroot/etc/named.conf

options {

listen-on port 53 { any; };

listen-on-v6 port 53 { ::1; };

……

allow-query     { any; };

recursion yes;

dnssec-enable yes;                  #这三项注释取消

dnssec-validation yes;

dnssec-lookaside auto;

……

key dnsseckey {                #先定义我们传输过程使用的秘钥名字,这几行要添加

algorithm  hmac-md5;            #加密算法

secret "uWmHZ/J20tcZSLsXDiBHtw==";      #密钥

};

配置zone使用秘钥传输

[root@node63 ~]# vim /var/named/chroot/etc/named.rfc1912.zones

zone "example.cn" IN {

type master;

file "example.cn.zone";

allow-transfer { key dnsseckey; };          #修改这儿允许使用秘钥传输,采用密钥同步,将网段修改为key dnsseckey

};

example.cn.zone记录文件就用以前的

修改从DNS支持秘钥认证

[root@node64 ~]# vim /etc/named.conf

options {

listen-on port 53 { any; };

listen-on-v6 port 53 { ::1; };

……

allow-query     { any; };

recursion yes;

dnssec-enable yes;                  #这三项注释取消

dnssec-validation yes;

dnssec-lookaside auto;

……

key dnsseckey {                             #先定义我们传输过程使用的秘钥名字,这几行要添加

algorithm  hmac-md5;            #加密算法

secret "uWmHZ/J20tcZSLsXDiBHtw==";      #密钥

};

[root@node64 ~]# vim /var/named/chroot/etc/named.rfc1912.zones

zone "example.cn" IN {

type slave;

file "slaves/example.cn.zone.sec";               #修改存储文件,换一个

masters { 192.168.1.63 key dnsseckey; };    #制定Master,使用的密钥

};

测试

[root@node63 ~]# systemctl restart named

[root@node64 ~]# systemctl restart named

[root@node64 ~]# ll /var/named/slaves/example.cn.zone.sec

-rw-r--r-- 1 named named 412 Oct 15 16:48 /var/named/slaves/example.cn.zone.sec

[root@node64 ~]# dig @localhost ftp.example.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> @localhost ftp.example.cn

; (2 servers found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46123

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;ftp.example.cn.         IN  A

;; ANSWER SECTION:

ftp.example.cn.      86400   IN  A   192.168.111.111

;; AUTHORITY SECTION:

example.cn.      86400   IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: ::1#53(::1)

;; WHEN: Thu Oct 15 16:49:26 2015

;; MSG SIZE  rcvd: 81

配置DNS负载均衡

在主上的配置:

[root@node63 ~]# vim /var/named/example.cn.zone

TTL 1D

@       IN SOA  dns.example.cn. root.example.cn. (

0       ; serial

1D      ; refresh

1H      ; retry

1W      ; expire

3H )    ; minimum

NS      dns.example.cn.

dns     A       192.168.1.63

www.example.cn. 1        A       192.168.122.122   #1 :表示此记录保存1秒

www.example.cn. 1        A       192.168.122.127

www.example.cn. 1        A       192.168.122.129

example.cn.     MX   10   mail.example.cn.   #添加邮件记录

mail.example.cn.    A            192.168.1.63

ftp     A       192.168.111.111

[root@node63 ~]# systemctl restart named

测试:

[root@node63 ~]# ping www.example.cn -c 1             #每ping一次,都会发现IP地址不一样

PING www.example.cn (192.168.122.127) 56(84) bytes of data.

[root@node63 ~]# ping www.example.cn -c 1

PING www.example.cn (192.168.122.129) 56(84) bytes of data.

[root@node63 ~]# ping www.example.cn -c 1

PING www.example.cn (192.168.122.122) 56(84) bytes of data.

智能DNS

根据不同的区域,解析出不同的IP地址

核心配置文件view控制

[root@node63 ~]# vim /etc/named.conf

acl local { 127/8; };                                      #最前面添加

acl network { 192.168.1/24; };

……

#zone "." IN {              #这一段要注销,写到我们的include的zone文件中

#       type hint;

#      file "named.ca";

#};

view local {                                    #对于上面定义的acl进行区定义,名字可以不一样

match-clients {local;};                 #正式定义,名字要和acl中的相同

recursion yes;

include "/etc/named.local";       #这里定义我们的配置文件的另外块儿

};

view network {

match-clients {network;};

recursion yes;

include "/etc/named.network";

};

#include "/etc/named.rfc1912.zones";         #上面按已经包含了,那么我们就把这行include去掉

include文件创建 

[root@node63 ~]# cd /var/named/chroot/etc/

[root@node63 etc]# cp -a named.rfc1912.zones named.local

[root@node63 etc]# cp -a named.rfc1912.zones named.network

[root@node63 etc]# vim named.local

zone "." IN {

type hint;

file "named.ca";

};

zone "example.cn" IN {

type master;

file "example.cn.local";

allow-update { none; };

};

[root@node63 etc]# vim named.network

zone "." IN {

type hint;

file "named.ca";

};

zone "example.cn" IN {

type master;

file "example.cn.network";

allow-update { none; };

};

Zone记录文件创建

[root@node63 named]# cp -a example.cn.zone example.cn.local                    //注意权限

[root@node63 named]# cp -a example.cn.zone example.cn.network

[root@node63 named]# vim /var/named/chroot/var/named/example.cn.local

$TTL 1D

@       IN SOA  dns.example.cn. root.example.cn. (

0       ; serial

1D      ; refresh

1H      ; retry

1W      ; expire

3H )    ; minimum

NS      dns.example.cn.

dns     A       192.168.1.63

www     A       192.168.111.111

[root@node63 named]# vim /var/named/chroot/var/named/example.cn.network

$TTL 1D

@       IN SOA  dns.example.cn. root.example.cn. (

0       ; serial

1D      ; refresh

1H      ; retry

1W      ; expire

3H )    ; minimum

NS      dns.example.cn.

dns     A       192.168.1.63

www     A       192.168.111.222

[root@node63 etc]# service named restart

测试

[root@node63 named]# dig @127.0.0.1 www.example.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @127.0.0.1 www.example.cn

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33315

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;www.example.cn.         IN  A

;; ANSWER SECTION:

www.example.cn.      86400   IN  A   192.168.111.111

;; AUTHORITY SECTION:

example.cn.      86400   IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; WHEN: Thu Oct 15 17:18:23 2015

;; MSG SIZE  rcvd: 81

[root@node63 named]# dig @192.168.1.63 www.example.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.63 www.example.cn

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36607

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;www.example.cn.         IN  A

;; ANSWER SECTION:

www.example.cn.      86400   IN  A   192.168.111.222

;; AUTHORITY SECTION:

example.cn.      86400   IN  NS  dns.example.cn.

;; ADDITIONAL SECTION:

dns.example.cn.      86400   IN  A   192.168.1.63

;; Query time: 0 msec

;; SERVER: 192.168.1.63#53(192.168.1.63)

;; WHEN: Thu Oct 15 17:19:09 2015

;; MSG SIZE  rcvd: 81

DNS泛解析

在解析文件中使用关键词$GENERATE

1、正向解析的泛解析

$GENERATE 10-20 www$ IN A 192.168.0.$

把www10-www20的主机解析为192.168.0.10-20

2、反向解析的泛解析

$GENERATE 10-20 $ PTR www$.example.com

把所有网段下的10-20的地址解析为www(10-20).example.com

$引用$GENERATE定义的范围。

linux服务篇-DNS服务相关推荐

  1. Linux服务篇--openssh服务

    Linux高级篇–SSH服务 一. SSH ssh: secure shell, protocol, 22/tcp, 安全的远程登录 具体的软件实现:   OpenSSH: ssh协议的开源实现,Ce ...

  2. 【Linux】循序渐进学运维-服务篇-FTP服务配置文件详解

    大家好,我是互联网老辛,本文是Linux运维-循序渐进学运维-服务篇的第14篇文章 文章目录 前言 ftp配置文件详解 1. 常见默认配置参数 2. 常见参数的含义 配置文件使用举例 1. 创建本地用 ...

  3. linux防火墙允许dns服务,Linux防火墙设置-DNS服务器篇

    亲测可用,对于刚刚搭建了DNS服务器,需要开启防火墙但又不知道该怎么设置的朋友,可以参考下面的内容,或者直接使用我下面给出的脚本程序. 如果服务器是作为DNS服务器使用的,针对绝大多数的情况,为了开启 ...

  4. Linux网络服务之DNS服务

    一.DNS简介 1.1DNS名词介绍 域名管理系统DNS(Domain Name System)是域名解析服务器的意思,应用层协议,是互联网的一项服务.它在互联网的作用是:把域名转换成网络可以识别的i ...

  5. linux服务篇-Xinetd服务

    Xinetd=eXtended InterNET services daemon(扩展互联网服务守护进程=超级互联网守护进程=超级服务),xinetd是新一代的网络守护进程服务程序,又叫超级Inter ...

  6. Linux下配置DNS服务

    一.DNS服务简介 DNS服务器,也称为域名解析服务器,是用来将互联网上的域名解析为IP地址的一类服务器,在世界上有成百上千台DNS服务器.对于有些公司来说,对于同一个域名可能有多个DNS服务器,这样 ...

  7. linux服务篇-DHCP服务

    DHCP服务概述: 名称:DHCP  - Dynamic Host Configuration Protocol  动态主机配置协议 功能:DHCP(Dynamic Host Configuratio ...

  8. 【Linux】循序渐进学运维-服务篇-ssh服务入门

    大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-服务篇的第3篇文章 文章目录 前言 1. 什么是SSH? 2. ssh的连接原理 3. ssh服务的安装 1) OpenSSH的构成 2) 安 ...

  9. linux dns服务配置,在Linux上配置DNS服务

    一.DNS服务简介 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所 ...

最新文章

  1. 浏览器常见兼容性问题汇总
  2. slf4j+log4j打印日志,控制台无日志输出
  3. [转载]深入理解JavaScript闭包(closure)
  4. SpringBoot中自定义Banner(启动图案)
  5. 【arduino】亲测MAC上arduino安装ESP32 SPIFFS插件
  6. JAVA I/O操作那些事之标准I/0
  7. Linux 系统之软件管理
  8. lightoj 1004 dp:数字三角形
  9. Python官方文档学习心得(第三篇)
  10. Linux下java web服务器搭建(JDK1.6、MySQL5.1、Apache2.2+2...
  11. 数据结构预算法(六) 数组和矩阵(1)
  12. Bootstrap 3.2.0 源码试读 2014/08/14
  13. (原创)创建windows域---深入理解域概念
  14. python的质量控制模块_11. 语言学数据管理 - 2.2 质量控制 - 《Python 自然语言处理 第二版》 - 书栈网 · BookStack...
  15. 关于计算机方面英语ppt模板,经典ppt模板--计算机软件.ppt
  16. webpack ——css兼容性处理
  17. 大规模手机定位采集系统设计
  18. 最后一周 | 微生物组-宏基因组分析(线上/线下同时开课,2021.1)
  19. 最新系统MacOs13 Ventura(M1/M2芯片) + Parallels Desktop 18(PD18史上最强虚拟机)永久使用攻略
  20. 机房动环监控系统应用意义

热门文章

  1. GPS基础知识(七)、GPS卫星位置解算
  2. 2021年「资料员」-通用基础及岗位技能(资料员)考试资料
  3. Windows权限设置
  4. 波士顿大学计算机科学的就业,波士顿大学计算机科学(计算机网络)介绍_就业方向和前景-小站留学...
  5. ameya:什么是连接器 连接器采购平台有哪些
  6. 毕业设计 深度学习大数据物流平台 python
  7. 2008服务器系统只有回收站,win2008系统中彻底清空回收站的教程
  8. 三相光伏并网逆变器设计,原理图,PCB,以及源代码
  9. MySQL学习笔记(三)查询
  10. 外贸公司申请E-mark认证有什么要求?