设为首页 收藏本站
查看: 1511|回复: 0

[经验分享] bind9.8搭建dns服务器

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-8 08:16:48 | 显示全部楼层 |阅读模式
                      系统: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
    ind-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. (
                        2
                        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.jpg

增加一个反向解析域:
    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 (               
                        2
                        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.jpg

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. (
                        2
                        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等

例子:
    [iyunv@indexer named]# rndc reload
    server reload successful

                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-311157-1-1.html 上篇帖子: 日志轮替(logrotate)的常用配置参数 下篇帖子: resin启动脚本 dns服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表