前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下搭建DNS 服务器

Linux下搭建DNS 服务器

作者头像
保持热爱奔赴山海
发布2019-09-18 10:27:18
6.9K0
发布2019-09-18 10:27:18
举报
文章被收录于专栏:DevOps数据库相关

CentOS6.6下DNS服务器的搭建

Linux下的DNS的软件包为bind,有如下几个软件包:

         bind           #DNS服务的主程序

         bind-utils # 工具,包含dig,nslookup等网络诊断工具。

         bind-chroot      # 修改named 的root目录,这样named被***后,***也被限制在指定的目录下,不能切换到/,避免造成更大的破坏。【下面的演示中,为了简单起见就没安装该组件】

# 安装bind软件包

yuminstall bind bind-utils -y

# 查看bind 、bind-utils生成哪些文件(仅列出部分文件)

[root@Master ~]# rpm -ql bind  

/etc/named

/etc/named.conf                                  #主配置文件

/etc/named.rfc1912.zones               #事先定义好的区域文件

/etc/named.root.key                          # 实现事物签名的秘钥文件

/var/named                                           # 默认DNS解析记录的数据文件

/var/named/slaves                              # 从DNS的配置文件目录

[root@Master ~]# rpm -ql bind-utils

/usr/bin/dig      # 域信息搜索器

/usr/bin/host

/usr/bin/nslookup

说明:dig(DNS lookup utility)域信息搜索器命令。

dig的常用命令格式:

         dig –t 资源记录类型名称@server-ip

         dig –x IP @DNS_IP      反向解析

         dig –t axfr zone            验证完全区域传送

         dig –t ixfr zone     验证增量区域传输(通常需要指定序列号)

named-checkconf工具

格式:named-checkconf [主配置文件]

例如:named-checkconf /var/named/named.conf

named-checkzone工具

格式:named-checkzone <域名> <区域数据文件>

例如:named-checkzone /var/named/student.com

实验一:本地搭建DNS服务器,实现指定域名的解析

vi/etc/named,conf 内容如下:

代码语言:javascript
复制
options {
         listen-onport 53 { 192.168.2.7; };             # 在本机192.168.2.7的53端口监听
//      listen-on-v6 port 53 {::1; };
         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     { 192.168.2.0/24; };
         #any表示允许所有,这样会导致网络结构泄露。一般不建议这样设置
         #192.168.2.0/24表示网段,192.168.2.112表示指定IP
         recursion yes;                    #是否允许为客户机进行递归查询
 
         dnssec-enable yes;
         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";
                severitydynamic;
        };
};
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com." IN {                    #区域名称为stu13.com,后面的配置中就是用@代替这个区域的
         typemaster;
         file"stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typemaster;
         file"2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

# 编写名称解析数据文件

cd/var/named/

touch  stu13.com.zone 2.168.192.arpa

chownroot:named /var/named/2.168.192.arpa

chownroot:named /var/named/stu13.com.zone

chmod644 /var/named/2.168.192.arpa

chmod644 /var/named/stu13.com.zone

注意:

必须要修改解析库文件的属组为named

vistu13.com.zone ,正向解析的文件内容如下:

代码语言:javascript
复制
$TTL 1D
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092010
                                     1M
                                     5M
                                     1H
                                     1D)
 
                   IN NS                  ns1.stu13.com.
                   IN MX  10       mail
ns1            IN A                    192.168.2.7
mail          IN A                    192.168.2.7
www         IN A                    192.168.2.7
www         IN A                    192.168.2.9
ftp             IN CNAME        192.168.2.8
www0      IN CNAME        www
www1      IN CNAME        www

# 说明:上面的www 有2条A记录,DNS解析到192.168.2.7和192.168.2.9,可以达到负载均衡的效果。

正向解析的文件格式如下:

$TTL 1D    ;定义TTL为1天

; 必须首先定义一个SOA记录,@代表相应的区域,每个区域数据文件只能有一个SOA。SOA后面跟的是这个区域的授权主机名称,和管理者的邮箱。

@ IN  SOA  demo.com. Admin.demo.com. (  # 注意区域地址、管理员邮箱地址 的 点号不能忘掉

               20150914027  ; 序列号,该序号不更新的话,任何所做的更改都不会同步到其他DNS服务器上【不超过10位】

                1M  ; 定义辅助DNS每隔多久检查一次主DNS服务器的版本号

               5M  ; 同步失败后,再次重试需要的间隔时间

               1H  ; 过期时间(超过该时间主DNS还没有响应,辅助DNS也停止工作)

              1D) ; 否定答案的缓存时长

说明: M分钟、H小时、D天、W周。默认是秒

vi2.168.192.in-addr.arpa,反向解析的文件内容如下:

代码语言:javascript
复制
$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032312
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS           ns1.stu13.com.
7       IN     PTR           www.stu13.com.
9       IN     PTR           www.stu13.com.
7       IN     PTR           www0.stu13.com.
8       IN     PTR           ftp.stu13.com.
7       IN     PTR           mail.stu13.com.
7       IN     PTR           www1.stu13.com.

说明

反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。

PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后几行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如13对应的是192.168.2.13

service named start        #启动dns服务器

# dig命令进行访问测试

1.正向解析:

dig -t a www1.stu13.com @192.168.2.7

dig -t a ftp.stu13.com @192.168.2.7

2.反向解析

DNS服务器本机上测试

windows7 上测试:

实验二:构建主从DNS服务器,实现指定域名的解析

在实验1的基础上,

修改Master服务器的/etc/named.conf文件,

代码语言:javascript
复制
options {
         listen-onport 53 { 192.168.2.7; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;          
 
........
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com" IN {
         typemaster;
         allow-transfer{ 192.168.2.12;};
         file"stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typemaster;
         allow-transfer{ 192.168.2.12;};
         file"2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

vi /var/named/stu13.com.zone内容如下:

代码语言:javascript
复制
$TTL 1D
@  IN  SOA  stu13.com.  admin.stu13.com.  (
                                     2015092010
                                     1M
                                     5M
                                     1H
                                     1D)
 
          IN   NS                ns1.stu13.com.
          IN   NS                ns2.stu13.com.     ;Slave也要在这里配置个NS记录
          IN   MX  10            mail
ns1       IN    A                192.168.2.7
ns2       IN    A                192.168.2.12        ; Slave也要在这里配个A记录
mail      IN    A                192.168.2.7
www       IN    A                192.168.2.7
www       IN    A                192.168.2.9
ftp       IN CNAME               192.168.2.8
www0      IN CNAME               www
www1      IN CNAME               www

编辑/var/named/2.168.192.arpa ,内容如下:

代码语言:javascript
复制
$TTL 1D
@   IN  SOA    stu13.com.  admin.stu13.com.  (
                2015032315
                1M
                5M
                1H
                1D )
 
    IN  NS     ns1.stu13.com.
    IN  NS     ns2.stu13.com.
7   IN  PTR    www.stu13.com.
7   IN  PTR    ns1.stu13.com.                                                           
12  IN  PTR    ns2.stu13.com.
9   IN  PTR    www.stu13.com.
7   IN  PTR    www0.stu13.com.
7   IN  PTR    www1.stu13.com.
8   IN  PTR    ftp.stu13.com.
7   IN  PTR    mail.stu13.com.

# 配置SlaveDNS服务器

vi/etc/named.conf

代码语言:javascript
复制
options {
         listen-onport 53 { 192.168.2.12; };          # 本机地址
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;
 
         dnssec-enable yes;
         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";
                severitydynamic;
        };
};
 
zone "." IN {
         type hint;
         file"named.ca";
};
 
zone "stu13.com." IN {
         typeslave;
         masters{ 192.168.2.7; };
         file"slaves/stu13.com.zone";
};
 
zone "2.168.192.in-addr.arpa" IN {
         typeslave;
         masters{ 192.168.2.7; };
         file"slaves/2.168.192.arpa";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

servicenamed restart     # 重启named服务即可

ls/var/named/slaves       # 查看目录下是否同步到了dns数据库文件,正常同步后,目录下应该有类似下图的2个文件生成。

# 如果无法正常工作,请tail查看日志 :tail -n 50 /var/log/messages | grep named

补充:

         Slave端DNS服务首次启动,可以先执行一次dig axfrstu13.com @192.168.2.7,完全区域传输一下解析文件。

# 然后在slave上执行dig命令测试

# 修改主配置,查看从能同步

修改下Master的解析库文件(修改主的解析条目的时候,必须一并将serial改大些,否则Slave检测到serial数值未变大,不会更新)

然后再在Slave上执行rndc reload,发现Slave的解析库文件内容也同步了,说明主从同步实验成功。

# 还可以将Master的服务暂时停掉,测试slave能否工作:

dig -t a www1.stu13.com @192.168.2.12

如下图,dig命令仍然返回结果,说明我们的slave在工作中:

实验三:缓存DNS服务器的搭建

缓存服务器的构建,比较简单,就是在最原始的配置文件中修改:

listen-onport 53 { ***.***.***.***; };

allow-query   { ** };

然后在options {};容器里面加入forwarders { IP(这是主域名服务器的ip地址);};

例如:

代码语言:javascript
复制
options {
         listen-on port 53 {***.***.***.***; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { **; };
         recursion yes;
         forwarders{192.168.2.7;192.168.2.12; };                #格式: forwarders{ IP(这是主域名服务器的ip地址);};
         ....下面都是最原始的文件named.conf ......
}

然后执行service named start即可。

实验四:单台DNS构建分离解析

# 配置过程中主从+分离解析一直出现问题。因此这里先以单台DNS构建分离解析。

Client_1:192.168.2.10/24

Client_2:192.168.2.11/24

DNS_Server:192.168.2.7/24

具体操作如下:

vi /etc/named.conf 编辑内容如下:

代码语言:javascript
复制
options {
         listen-on port 53 {192.168.2.7; };
         directory          "/var/named";
         dump-file         "/var/named/data/cache_dump.db";
         allow-query     { 192.168.2.0/24; };
         recursion yes;
 
         dnssec-enable yes;
         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";
                severitydynamic;
        };
};
 
view "local" {
match-clients {192.168.2.10; };                 # 客户端地址是192.168.2.10的匹配local规则
 
zone "." IN {
         type hint;
         file "named.ca";
};
zone "stu13.com." IN {
         type master;
         file"stu13.com.zone.local";
};
zone "2.168.192.in-addr.arpa" IN {
         type master;
         file"2.168.192.arpa.local";
};
 
};
 
view "others" {
match-clients { any; };                                  # 客户端地址非192.168.2.10的匹配others规则
 
zone "." IN {
         type hint;
         file"named.ca";
};
zone "stu13.com." IN {
         type master;
         file"stu13.com.zone.others";
};
zone "2.168.192.in-addr.arpa" IN {
zone "2.168.192.in-addr.arpa" IN {
         type master;
         file"2.168.192.arpa.others";
};
};
 
# include "/etc/named.rfc1912.zones";           # 注释掉这一行
include "/etc/named.root.key";

# 配置区域解析文件

cd/var/named/

# 简单起见,我先只配置了最基本的www解析

# 配置匹配local的解析文件:

vistu13.com.zone.local

代码语言:javascript
复制
$TTL 86400
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092019
                                     1M
                                     5M
                                     1H
                                     1D)
 
                     IN    NS                       ns1.stu13.com.
ns1                  IN     A                       192.168.2.7
www                  IN     A                       192.168.2.9

vi2.168.192.arpa.local

代码语言:javascript
复制
$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032315
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS           ns1.stu13.com.
7       IN     PTR           ns1.stu13.com.
9       IN     PTR           www.stu13.com.

# 配置匹配others的解析文件:

vistu13.com.zone.others

代码语言:javascript
复制
$TTL 86400
@ IN SOA stu13.com. admin.stu13.com. (
                                     2015092019
                                     1M
                                     5M
                                     1H
                                     1D)
 
             IN      NS                       ns1.stu13.com.
ns1          IN      A                        192.168.2.7
www          IN      A                        192.168.2.3

vi2.168.192.arpa.others

代码语言:javascript
复制
$TTL 1D
@     IN     SOA           stu13.com.       admin.stu13.com. (
                                     2015032315
                                     1M
                                     5M
                                     1H
                                     1D)
 
         IN     NS              ns1.stu13.com.
7       IN     PTR              ns1.stu13.com.
3       IN     PTR              www.stu13.com.

chownroot:named 2.168.192.arpa* stu13.com.zone*          #修改数据文件的属组

named-checkconf    # 检查下语法

rndcreload       # 重启named服务

# 在不同的客户端进行访问测试

在Client1和Client2上执行dig -t A www.stu13.com @192.168.2.7

结果如下图,可以看到不同IP访问相同的域名,会自动转到不同的IP上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/09/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档