bind9.8搭建dns服务器

简介:

系统:Centos6.7 64位

内核:2.6.32-573.el6.x86_64

软件:

    bind-9.8.2-0.47.rc1.el6_8.2.x86_64

    bind-utils-9.8.2-0.47.rc1.el6_8.2.x86_64

    bind-libs-9.8.2-0.47.rc1.el6_8.2.x86_64

参考:bind9手册

软件简单介绍:

    bind(Berkeley Internet Name Domain)是一种dns协议的实现。bind软件包含3个部分:dns server、解析库和检测dns服务是否正常工作的工具(namd-checkconf,rndc等)。它是dns服务的具体实现,也是bind最核心的软件

    bind-utils包含一些更dns服务有关的辅助工具(dig、nslookup、host等),有助于我们学习dns

    bind-libs这是bind server和utis依赖的库文件

    

    软件安装:yum install bind bind-utils bind-libs -y


利用bind搭建一个最简单的dns服务器:

    bind这个软件最核心的配置文件是/etc/下的namd.conf,所以下面我们简单介绍一下它。

    首先man 5 named.conf 可以看到对它的描述:


        named.conf is the configuration file for named. Statements are enclosed

       in braces and terminated with a semi-colon. Clauses in the statements

       are also semi-colon terminated. The usual comment styles are supported:

       C style: /* */

       C++ style: // to end of line

       Unix style: # to end of line


大意是说这个配置文件的语法可以分为以下3点:

    (1)每个条件语句写在{}里面,并且{}后面必须跟;也就是说 {xxx};这种形式

    (2)条件语句自身也需要以;结尾,也就是{xxx;};这种形式

    (3)注释可以有3种风格,c、c++、unix风格,分别对应/* */ // #特殊符号注释


    一个bind9的配置包括语句和注释,语句和注释是唯一不需要{}括起来的内容,{}的语句我们称为子语句,它需要{}括起来(官方说法)

或者我们可以可以把语句看成一个个功能选项,而把子语句看成这个功能选项的参数和值(我的理解..下面全按我的理解来,我把 语句-->功能,子语句-->参数:值),大部分格式类似如下:

    功能选项 [..] {

    参数:值;

    ....

    };


bind可以使用的功能选项有:

    acl:定义一个ip地址列表,用来做访问控制或者其他

    controls:宣告rnde utility使用的控制通道

    include:包含某些个文件

    key:设置密钥信息,它应用在通过TSIG进行授权和认证的配置中

    logging:设置日志服务器和日志信息的发送地

    options:全局配置选项和为其他语句配置默认值

    server:在一个单服务器基础上设置特定的配置选项

    trusted-keys:定义新人的dnssed密钥

    view:定义一个视图

    zone:定义一个域


    bind的每个功能选项都有很多参数可以使用,比如options有 recursion、directory等参数,logging有channel等参数,因为太多加上本人很懒,所以下面只解释比较常用到和自己认为有必要解释的参数,(当然,鬼才知道有没有人看..自己忽悠自己玩^^)

    

    首先我们来定义一个最简单的dns服务,什么样的服务最简单呢,当然是缓存服务器,一个最简单的缓存服务器需要以下三点:

    (1)服务要监听在外网地址

    (2)根的位置

    (3)允许递归

    所以一个简单的缓存dns服务器的配置如下:

1
2
3
4
5
6
7
8
9
10
options{
         listen-on {192.168.1.201;};  #监听的地址,不能使用0.0.0.0,bind9不识别,我的实测..不加这条默认监听在所有网卡地址
         directory  "/var/named" ;         #区域数据库文件目录,所有的zone数据库文件都放在这里
         recursion  yes ;              #是否允许递归,默认yes
};
 
zone  "."  IN {                         #根域的配置  ,格式zone string optional_class {...;};
         type  hint;                  #域的类型,可选的有hint|master|slave|forward等,hint表示根域类型
         file  "named.ca" ;            #根的数据库文件,具体的路径就是结合上面的目录/var/named/named.ca
};

    因为这些参数都有默认值,listen默认监听所有网卡,递归默认开的,bind的默认配置就是一个缓存服务器的配置,所以其实一个最简单的dns配置就是没有配置,可以把named.conf这个文件清空,然后/etc/init.d/named start启动服务,你会发现可以启动成功,并且没有错误信息,而且可以通过它转发dns请求。


增加一个正向解析域:

    vi /etc/named.conf

1
2
3
4
5
6
7
8
9
10
11
12
options {
     directory  "/var/named" ;
     listen-on {192.168.1.201;};
};
zone  "."  IN {
     type  hint;
     file  "named.ca" ;
};
zone  "linzb.com"  IN {
     type  master;
     file  "linzb.com.zone" ;
};


编辑正向解析域的数据库文件:

1
2
3
4
5
6
7
8
9
10
11
$TTL 600
@  IN     SOA ns1.linzb.com.     admin.linzb.com. (
                        
                         1H
                        2W
                        3D
                        600 )
     IN  NS  ns1
ns1 IN  A   192.168.1.207
www IN  A   192.168.1.4
test     IN  CNAME   www


注意:

    (1)“@”在bind的配置文件中具有特殊意义,在named.conf里面定义,这里是linzb.com.

    (2)在区域文件中的记录可以只写主机名,bind会根据$ORIGIN的内容自动补齐,比如这里ns1=ns1.linzb.com.  注意,ns1不能跟.,否则就不是主机,而是一个fqdn。 

    (3)$ORIGIN是bind的内置变量,可以多次定义,比如说,上述正向区域文件可以改写成这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ORIGIN .
$TTL 600   ; 10 minutes
linzb.com       IN SOA ns1.linzb.com. admin.linzb.com. (
                 2          ; serial
                 3600       ; refresh (1 hour)
                 1209600    ; retry (2 weeks)
                 259200     ; expire (3 days)
                 600        ; minimum (10 minutes)
                 )
             NS  ns1.linzb.com.
$ORIGIN linzb.com.
ns1         A   192.168.1.207
test             CNAME   www
www         A   192.168.1.4


    named-checkconf #检查named.conf是否语法错误

    named-checkzone  linzb.com /var/named/linzb.com.zone#检查linzb.com.zone是否语法错误,它的使用格式是:

    named-checkzone zonename filename


测试命令:dig

语法:dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m]

           [-p port#] [-q name] [-t type] [-x addr] [-y [hmac:]name:key] [-4]

           [-6] [name] [type] [class] [queryopt...]

    -t:指定查询类型,类型有A,SOA等,比较特殊的两个类型:

        axfr:完全区域传送

        ixfr=n:增量区域传送,n表示序列号,表示传送自n序列号以后的更新

    -x:反向解析

    @:指定解析的dns服务器

例子:

    dig  -t A www.linzb.com @192.168.1.201

wKioL1hIL4nTdPmuAAMNPwnCavk344.png


增加一个反向解析域:

    vi /etc/named.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
options {
     directory  "/var/named" ;
     listen-on {192.168.1.201;};
};
zone  "."  IN {
     type  hint;
     file  "named.ca" ;
};
zone  "linzb.com"  IN {
     type  master;
     file  "linzb.com.zone" ;
};
zone  "1.168.192.in-addr.arpa"  IN {
     type  master;
     file  "192.168.1.zone" ;
};

编辑反向区域文件:

    vi /var/named/192.168.1.zone

1
2
3
4
5
6
7
8
9
10
$TTL 600
@   IN  SOA ns1.linzb.com. admin.linzb.com (                
                        
                         1H
                        2W
                        3D
                        600 )
     IN  NS  ns1.linzb.com.
201 IN  PTR ns1.linzb.com.
4   IN  PTR www.linzb.com.

    反向区域文件的ip顺序是倒过来写的加上in-addr.arpa. 结尾,剩下的就是把正向区域文件的name和value的值反过来写。

    named-checkconf

    named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.zone

    /etc/init.d/named restart

测试:

wKioL1hIL2zQkHkRAAMsCnGQp0Q586.png


dns的主从配置:

    主:192.168.1.201

    从:192.168.1.202

主服务器的named.conf配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
options {
     directory  "/var/named" ;
     listen-on {192.168.1.201;};
};
zone  "."  IN {
     type  hint;
     file  "named.ca" ;
};
zone  "linzb.com"  IN {
     type  master;
     file  "linzb.com.zone" ;
     allow-transfer {192.168.1.202;};
};
zone  "1.168.192.in-addr.arpa"  IN {
     type  master;
     file  "192.168.1.zone" ;
     allow-transfer {192.168.1.202;};
};

    增加了allow-transfer参数,这个参数代表允许哪些主机传输区域文件,可以单独加个某个zone,也可以加在options里面代表默认。不加的话默认是允许所有的主机,这很不安全

正向区域数据文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
$TTL 600
@  IN     SOA ns1.linzb.com.     admin.linzb.com. (
                        
                         1H
                        2W
                        3D
                        600 )
     IN  NS  ns1
     IN  NS  ns2
ns1 IN  A   192.168.1.207
ns2 IN  A   192.168.1.202
www IN  A   192.168.1.4
test     IN  CNAME   www

    注意:这里必须增加从服务器的dns服务器(ns2)位置,否则主dns服务更新时不能通知给从服务器,此时只有等待refresh时间到才能更新


反向区域文件:

1
2
3
4
5
6
7
8
9
10
11
12
$TTL 600
@   IN  SOA ns1.linzb.com. admin.linzb.com (
                         4
                         1H
                        2W
                        3D
                        600 )
     IN  NS  ns1.linzb.com.
     IN  NS  ns2.linzb.com.
201 IN  PTR ns1.linzb.com.
201 IN  PTR ns2.linzb.com.
4   IN  PTR www.linzb.com. 


从服务器的named.conf配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
options {
     listen-on { 192.168.1.202;};
     directory  "/var/named" ;
};
zone  "linzb.com"  IN {
     type  slave;
     file   "slaves/linzb.com.zone" ;
     masters { 192.168.1.201; }; 
};
zone  "1.168.192.in-addr.arpa"  IN {
     type  slave;
     file   "slaves/192.168.1.zone" ;
     masters { 192.168.1.201; }; 
};

    从的配置文件中每个zone都必须指明自己的master是谁,且type为slave

    注意:之所以把file放在slaves下并不是个人的恶趣味,而是因为 /var/named下的属主是root,而从服务器的区域数据文件是从主服务器cp过来的,是需要写权限的,/var/named/slaves的属主是named,且具有写权限。当然,也可以自定义

    启动即可看到slaves下有主的区域文件,如果没有,可以根据messages日志进行排查。


测试注意点:

    测试更新主dns数据的时候,记得修改serial 值,因为主从更新是根据这个值的不同来的,而且记得reload服务。


rndc工具的使用:

    rndc是一款dns的远程控制软件,它的配置非常简单:

    rndc-confgen > rndc.conf #这个命令会生成rndc的配置文件,并保存在rndc.conf里面,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Start of rndc.conf
key  "rndc-key"  {
     algorithm hmac-md5;
     secret  "m7nOOKs/GoLwAbDLPEXRGw==" ;
};
 
options {
     default-key  "rndc-key" ;
     default-server 127.0.0.1;
     default-port 953;
};
# End of rndc.conf
 
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#  algorithm hmac-md5;
#  secret "m7nOOKs/GoLwAbDLPEXRGw==";
# };
# controls {
#  inet 127.0.0.1 port 953
#      allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf


    把key "rndc-key"下面的内容复制到named.conf,并reload named服务,named.conf的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
options {
     directory  "/var/named" ;
     listen-on {192.168.1.201;};
     allow-transfer {192.168.1.202;};
};
zone  "."  IN {
     type  hint;
     file  "named.ca" ;
};
zone  "linzb.com"  IN {
     type  master;
     file  "linzb.com.zone" ;
};
zone  "1.168.192.in-addr.arpa"  IN {
     type  master;
     file  "192.168.1.zone" ;
};
key  "rndc-key"  {
    algorithm hmac-md5;     #加密算法
    secret  "Y5IFaDF+1lu6jDdbVCUHoQ==" ; #密钥,可自定义,但是必须和rndc.conf保持一致
};
 
controls {
     inet 127.0.0.1 port 953   #监听端口
         allow { 127.0.0.1; } keys {  "rndc-key" ; };    #允许哪些主机使用
};


使用:

    Usage: rndc [-b address] [-c config] [-s server] [-p port]

        [-k key-file ] [-y key] [-V] command

    h:查看帮助

    -c:指定配置文件,默认/etc/rndc.conf

    command:有reload,stop等

    

例子:

    [root@indexer named]# rndc reload

    server reload successful














本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1880566  ,如需转载请自行联系原作者


相关文章
|
17天前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
6月前
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
|
2月前
|
网络协议
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
利用Private Zone DNS - 搭建AD但不搭建DNS服务器如何加域
|
6月前
|
存储 缓存 负载均衡
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
|
4月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
|
6月前
|
存储 机器学习/深度学习 应用服务中间件
阿里云服务器架构解析:从X86到高性能计算、异构计算等不同架构性能、适用场景及选择参考
当我们准备选购阿里云服务器时,阿里云提供了X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等多种架构,每种架构都有其独特的特点和适用场景。本文将详细解析这些架构的区别,探讨它们的主要特点和适用场景,并为用户提供选择云服务器架构的全面指南。
784 18
|
6月前
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
|
6月前
|
存储 机器学习/深度学习 人工智能
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
|
8月前
|
存储 运维 资源调度
阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
阿里云经济型e云服务器以其高性价比、稳定可靠的性能以及灵活多样的配置选项,成为了众多企业在搭建官网时的首选。那么,阿里云经济型e云服务器究竟怎么样?它是否能够满足企业官网的搭建需求?本文将从性能表现、稳定性与可靠性、成本考虑等多个方面对阿里云经济型e云服务器进行深入剖析,以供大家参考选择。
534 37
|
7月前
|
域名解析 弹性计算 负载均衡
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS