有时候需要在内网搭建DNS服务器,实现内网域名的解析功能,今天就来聊聊内网DNS服务器的搭建和使用。

    DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析:

工作形式上又分主服务器、从服务器和缓存服务器。

      DNS其实是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS 划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。(注:DNS 域名空间中,树的最大深度不得超过127层,树中每个节点最长可以存储63个字符。)

工作原理

工作原理

1)域和域名

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

域名空间的每个域的名字,通过域名进行表示。

域名:通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS 域树根的位置,也就是节点到DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS 域google 来说,其完全正式域名(FQDN)为google.com。

例如,google为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示。

注意:通常,FQDN 有严格的命名限制,长度不能超过256 字节,只允许使用字符a-z,0-9,A-Z和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者FQDN 的结尾使用。

域名不区分大小。由最顶层到下层,可以分成:根域、顶级域、二级域、子域。

Internet 域名空间的最顶层是根域(root),其记录着Internet 的重要DNS 信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet 的各个组织。

“.”全球有13个根(root)服务器,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。可以看到我们国家是没有一台根域服务器的~~

DNS 根域下面是顶级域,也由Internet 域名注册授权机构管理。共有3种类型的顶级域。

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

地址域:采用两个字符的国家或地区代号。如cn 为中国,kr 为韩国,us 为美国。

反向域:这是个特殊域,名字为in-addr.arpa,用于将IP 地址映射到名字(反向查询)。

对于顶级域的下级域,Internet 域名注册授权机构授权给Internet 的各种组织。当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配的域中主机名与IP 地址的映射信息。

2)区(Zone),资源记录

区是DNS 名称空间的一部分,其包含了一组存储在DNS 服务器上的资源记录。使用区的概念,DNS 服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器。

3)主域名服务器与辅助域名服务器

当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变。如果改变了,它就启动一次数据更新传输。每个区必须有主服务器,另外每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃了,就无法解析该区的名称。

辅助服务器的优点:

(1)容错能力

配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称。一般把区的主服务器和区的辅助服务器安装在不同子网上,这样如果到一个子网的连接中断,DNS 客户机还能直接查询另一个子网上的名称服务器。

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

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

(3)减轻主服务器的负载

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

DNS相关概念

1)DNS 服务器

运行DNS 服务器程序的计算机,储存DNS 数据库信息。DNS 服务器会尝试解析客户机的查询请求。在解答查询时,如果DNS 服务器能提供所请求的信息,就直接回应解析结果,如果该DNS 服务器没有相应的域名信息,则为客户机提供另一个能帮助解析查询的服务器地址,如果以上两种方法均失败,则回应客户机没有所请求的信息或请求的信息不存在。

2)DNS 缓存

DNS 服务器在解析客户机请求时,如果本地没有该DNS 信息,则可以会询问其他DNS 服务器,当

其他域名服务器返回查询结果时,该DNS 服务器会将结果记录在本地的缓存中,成为DNS 缓存。当下一次客户机提交相同请求时,DNS 服务器能够直接使用缓存中的DNS 信息进行解析。

3)DNS查询方式:递归查询和迭代查询

看一个DNS查询过程:通过8个步骤的解析过程就使得客户端可以顺利访问www.163.com 这个域名,但实际应用中,通常这个过程是非常迅速的

DNS相关概念

<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。

<2> 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS 信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。

<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。

<4> 本地服务器再向返回的域名服务器发送请求。

<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。

<6> 本地域名服务器将查询请求发送给返回的DNS 服务器。

<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。

<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。

3)两种查询方式

(1)递归查询

递归查询是一种DNS 服务器的查询模式,在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。

(2)迭代查询

DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。

总结:一般情况下,从客户端到本地DNS服务器是属于递归查询。而DNS服务器之间就是的交互查询就是迭代查询。

4)正向解析与反向解析

(1)正向解析

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

(2)反向解析

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

5) DNS资源记录

(1)SOA 资源记录

每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA 记录。SOA 定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA 记录。

(2)NS 资源记录

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。每个区在区根处至少包含一个NS 记录。

(3)A 资源记录

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

(4)PTR 资源记录

相对于A 资源记录,指针(PTR)记录把IP地址映射到FQDN。用于反向查询,通过IP地址,找到域名。

(5)CNAME 资源记录

别名记录(CNAME)资源记录创建特定FQDN 的别名。用户可以使用CNAME 记录来隐藏用户网络的实现细节,使连接的客户机无法知道真正的域名。

例:ping百度时,解析到了百度的别名服务器,百度有个cname=www.a.shifen.com.的别名

关于bind服务

(6)MX 资源记录

邮件交换(MX)资源记录,为DNS 域名指定邮件交换服务器。邮件交换服务器是为DNS 域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发/邮件指把邮件发送到最终目的服务器,用简单邮件传输协议SMTP 把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。

关于bind服务

      BIND全称为Berkeley Internet Name Domain(伯克利因特网名称域系统),是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。BIND主要有三个版本:BIND4、BIND8、BIND9。BIND8融合了许多提高效率、稳定性和安全性的技术,而BIND9增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等。

     BIND的官方网址为:http://www.isc.org/software/bind

    模式 C/S 模式

    端口:

    tcp/53   udp/53    #用于客户端查询

    tcp/953  udp/953  #用于DNS主从同步

    

部署内网DNS服务器

1、关闭防火墙和selinux

# systemctl disable firewalld

# systemctl stop firewalld

# sed -i ‘s/SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config

# setenforce 0

2、安装bind

# yum install bind bind-utils bind-chroot -y

bind: DNS 服务的主程序包。

bind-utils: 客户端工具

bind-chroot:bind-chroot使bind可以在一个chroot 的模式下运行.也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已。这样做的目的是为了提高安全性.因为在这个chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中.这个是rhel6才有的,rhel5以下是没有的。在rhel6中开启named服务后,会自动挂载,调用chroot功能切换根,可通过mount查看文件挂载:

3、启动服务

# systemctl restart named

# systemctl status named

# systemctl enable named

4、检查服务

# ls /var/named/chroot

# ps -ef|grep named

# netstat -tnlp|grep 53

5、配置bind

配置文件位置:/etc/named.conf

1)授权DNS 服务器管理wuqingyan.top区域,并把该区域的区域文件命名为wuqingyan.top.zone,修改配置文件:

# named-checkconf  //检查配置文件的语法和完整性

2)添加wuqingyan.top.zone正向解析域配置

# cp -p /var/named/named.empty /var/named/wuqingyan.top.zone

# vim /var/named/wuqingyan.top.zone

$TTL 1D
wuqingyan.top. IN SOA wuqingyan.top. root.wuqingyan.top. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
wuqingyan.top. IN NS dns.wuqingyan.top.
dns.wuqingyan.top. IN A 192.168.0.152
www.wuqingyan.top. IN A 192.168.0.153
www.wuqingyan.top. IN A 192.168.0.154
@ IN MX 10 mail.wuqingyan.top.
mail.wuqingyan.top. IN A 192.168.20.152
www1.wuqingyan.top. CNAME www.wuqingyan.top.

一个域名对应多个A记录,代表可以轮询

另外一种写法:

{10}

3)、添加192.168.0.zone反向域解析配置

# cp -p /var/named/named.empty /var/named/192.168.0.zone

# vim 192.168.0.zone

$TTL 3H
@ IN SOA 0.168.192.in-addr.arpa. wuqingyan (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.wuqingyan.top.
152 IN PTR dns.wuqingyan.top.
153 IN PTR www.wuqigyan.top.
154 IN PTR www.wuqingyan.top.

{11}

3)检查配置文件

named-checkzone检查区域解析库文件的语法和完整性

用法:named-checkzone zonename filename

# named-checkzone wuqingyan.top /var/named/wuqingyan.top.zone

# named-checkzone wuqingyan.top /var/named/192.168.168.zone

{12}

4)修改权限

# chown root:named /var/named/wuqingyan.top.zone

# chown root:named /var/192.168.168.zone

# chmod 640 /var/named/wuqingyan.top.zone

# chmod 640 /var/named/192.168.168.zone

5)重启named服务

# systemctl restart named

# systemctl status named

{13}

6)配置客户端

在客户端配置好DNS服务器地址。

# vim /etc/resolv.conf

nameserver 192.168.0.152

# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DNS1=192.168.0.152

# systemctl restart network

7)测试

# ping www.wuqingyan.top

{14}

# ping www1.wuqingyan.top

{15}

# dig wuiqngyan.top @192.168.0.152

{16}

其他:

# dig -t A www.wuqingyan.top @192.168.0.152   //检查A记录

# dig -t NS www.wuqingyan.top @192.168.0.152  //检查NS记录

# dig -x 192.168.0.153 @192.168.0.152  //检查反向查询

搭建DNS主从服务器

做运维的同学都喜欢系统高可用,不希望半夜三点爬起来处理故障,别慌,DNS当然也有高可用方案。

1、搭建一个主DNS服务器A

# vim /etc/named.conf

zone “wuqingyan.top” IN {

type master;

file “wuqingyan.top.zone”;

allow-transfer { 192.168.168.0/24; }; #指定允许哪个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认为所有

};

{17}

# named-checkconf

# named-checkzone wuqingyan.top /var/named/wuqingyan.top.zone

# named-checkzone wuqingyan.top /var/named/192.168.168.zone

# systemctl restart named

2、搭建一个从DNS服务器B

# vim /etc/named.conf

zone “wuqingyan.top” IN {

type slave;

file “slaves/wuqingyan.top.zone.file”;  //这是一个目录

masters { 192.168.168.100; }; //你得告诉他谁是主DNS服务器

};

{18}

slaves目录是专门用来做从同步数据的,现在是空的,当从能从主上同步数据的时候,这里就会有一个文件,那个名字就是我们写在从里的文件。

# named-checkconf

# systemctl restart named

# ls /var/named/slaves

{19}

注:这样从DNS服务器就可以从主DNS服务器上获取DNS解析记录信息了,重启从DNS服务器在:/var/named/chroot/var/named/slaves文件夹下自动创建一个文件wuqingyan.top.zone.file 这个文件是从DNS服务器从主DNS服务器上获取的数据.主DNS记录中应该有两NS记录,一条是主DNS的NS记录,一条是从DNS服务器的域名记录。

3、测试

重启之后看到wuqingyan.top.zone.file这个文件,就说明成功了.

当主DNS服务器修改改完配置文件后,测试从DNS服务器有没有立即同步,发现此文件内容没有变,因为从服务器需要1D以后,才能再次更新。

4、手动更新

# rm -rf /var/named/slaves/wuqingyan.top.zone.file

# systemctl restart named

再次查看:

# cat /var/named/slaves/wuqingyan.top.zone.file

发现已经更新了。

搭建web管理工具webmin

    如果觉得命令行手动加配置改配置麻烦,这里推荐一个web端的管理工具叫webmin。Webmin是目前功能强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。目前 Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以外还包括:AIX、HPUX、Solaris、Unixware、Irix 和FreeBSD等。

    Webmin 让您能够在远程使用支持 HTTPS (SSL 上的 HTTP)协议的 Web 浏览器通过 Web 界面管理您的主机。这在保证了安全性的前提下提供了简单深入的远程管理。这使得 Webmin 对系统管理员非常理想,因为所有主流平台都有满足甚至超出上述需求的 Web 浏览器。而且,Webmin 有其自己的“Web 服务器”,因此不需要运行第三方软件(比如 Web服务器)。万事具备。Webmin 的模块化架构允许您在需要时编写您自己的配置模块。除了在此介绍的模块之外,Webmin 还包括许多模块。尽管目前我们将主要关注网络服务,但是您会看到,几乎您系统的每一部分都能够通过 Webmin 来配置和管理。与任何能为你提供这么强功能的应用程序一样,你要花时间确保其安全。使用多因子验证   SSL、SELinux和VPN,还要谨慎行事,因为Webmin为你提供了对所有内容的root级访问权。请记住,功能越强,威力越大。

    Webmin的官方网址为:http://www.webmin.com/

一、部署

1、通过yum安装bind

# yum install -y bind* caching-nameserver*

2、下载并安装Webmin

# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.962.tar.gz

# tar -zxvf webmin-1.962.tar.gz

# mv webmin-1.962 /usr/local/webmin

# cd /usr/local/webmin

# ./setup.sh

{20}

一路默认配置即可,注意最后要输入管理的账号密码,默认端口为10000,安装后管理地址为http://ip:端口。

二、管理

打开http://ip:端口,看到一个登陆页,输入刚才设定的账号和密码:

{21}

首页面:

{22}

如果不习惯英文的同学可以在Webmin->Change Language and Theme中切换为简体中文,不过我还是比较建议大家用英文版,毕竟我们还是和字母和数字打交道比较多。

{23}

{24}

点击Servers可以看到目前服务器已经安装的一些服务,其中就有我们刚才安装的”BIND DNS Server”,我们今天要管理的就是它了,其它的大家再自行研究。

{25}

第一次进入BIND DNS Server时会让你设定DNS类型,第一个内网用,后2个是公网用的,我们先选择内网来测试。

{26}

1、建立一个主控域(master zone)

{27}

{28}

第一个是要解析的域名,第二个是本机的主机名,第三个是邮箱。

2、增加A记录
在Address中增加几个A记录,如:

{29}

{30}

通过添加几个相同的A记录来实现DNS轮询。添加完重启named服务。

# systemctl restart named

测试

测试机配置好DNS服务器IP

# ping www.wuqingyan.com

{31}

内网DNS服务器的搭建和使用就到这里了,如果今后可能用到的同学建议mark下。

END


文章TAG: