学习用bind搭建DNS

编译环境:centos7,使用bind-9.10.5.tar.gz源码包

./configure --prefix=/usr/local/named --enable-threads --enable-shared --with-libtool  && make && make install

①添加named用户和组:groupadd named && useradd -s /sbin/nologin -d /usr/local/named[编译bind的目录] -g named named

操作后忽略file exists的报错;然后passwd -l named禁止named作为用户登录.

②搭建chroot环境:

chroot环境是为了服务器的安全,但是编译的bind是没有chroot目录的,使用rpm包就有对应的bind-chroot,所以要先创建环境

进入安装路径下cd /usr/local/named,创建chroot下的多个目录:mkdir -p chroot/{dev,etc,var/{data,log,named,run}}

对dev创建虚拟设备文件:首先查看自身系统下的 ls  -lL  /dev/null /dev/zero /dev/random ,会回显:

crw-rw-rw- 1 root root1, 3 May 17 23:42 /dev/null

crw-rw-rw- 1 root root1, 8 May 17 23:42 /dev/random

crw-rw-rw- 1 root root1, 5 May 17 23:42 /dev/zero

然后在/usr/local/named/chroot/dev下执行

mknod null c 1 3;mknod random c 1 8;mknod zero c 1 5  (对应值相同)

③创建配置文件

创建主配置文件:touch /usr/local/named/chroot/etc/named.conf

创建辅助配置文件:touch /usr/local/named/chroot/etc/named.zones

生成rndc文件:/usr/local/named/sbin/rndc-confgen > /usr/local/named/chroot/etc/rndc.conf

添加rndc.key:cat /usr/local/named/chroot/etc/rndc.conf |tail -10 |head -9 |sed s/^#\ //g >/usr/local/named/chroot/etc/named.conf  [通过rndc-confgen生成rndc.conf,文件包含注释段为rndc.key,截取rndc.key导入named.conf]

然后编辑named.conf添加options和zone[链接]named.conf的详解

/usr/local/named/chroot/etc/named.conf

key "rndc-key" {
    algorithm hmac-md5;
    secret "G1UGnX9eRSoITBDciFwDuh=="; //之前通过rndc-confgen生成的密钥
};

controls {
    inet 127.0.0.1 port 953            //通过953端口对dns进行操作
    allow { 127.0.0.1; } keys { "rndc-key"; };  //允许的主机
};

options {
    //使用双斜杠对named.conf添加注释
    listen-on port 53 { any; };       //监听端口
    listen-on-v6 port 53 { ::1; };    //监听ipv6
    directory "/var/named";           //区域文件目录,这里由于chroot,可能不好理解,chroot机制将/usr/local/named/chroot变成了bind应用的根目录"/",所以此处的/var/named实际上是/usr/local/named/chroot/var/named
    pid-file "/var/run/named.pid"     //文件进程pid位置
    dump-file "/var/named/data/cache_dump.db";  //执行rndc dumpdb时,存放数据库文件的位置
    statistics-file "/var/named/data/named_stats.txt"; //执行rndc stats时,存放统计信息的位置
    allow-query { any; };             //允许普通查询的主机
    allow-recursion { any; };         //允许递归查询的主机
    forwarders { 114.114.114.114; };  //转发使用的列表
};

acl "mylan" { 
    127.0.0.0/8; 
    192.168.0.0/16; 
};   //相当于定义mylan = 127.0.0.0/8 和 192.168.0.0/16, mylan是自定义名

logging {
    channel default_debug {           //定义通道,channel  channel_name
        file "/var/log/named.run"[options];  //定义输出位置与方式
        severity dynamic;             //定义消息严重性
        //可选错误等级参数:critical>error>warning>notice>info>debug,dynamic是特殊值,匹配服务器当前调试级别
    };

    channel log {
        file "/var/log/dns.log" versions 10 size 1m; //versions:同时允许存在10个版本该文件,size:文件大小上限为1m
        serverity debug 9;
        print-time yes;               //是否在消息添加时间前缀
        print-severity yes;           //是否在消息中添加消息严重性前缀  
        print-category yes;           //是否消息中添加消息类别前缀
    };

    category default { default_debug; log; };  //指定类别信息使用对应通道输出
    //可用的类别名:client 处理客户端请求 | config 配置文件分析和处理 | database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录 | default 匹配所有未明确指定通道的类别 | dnssec 处理 DNSSEC 签名的响应 | general 包括所有未明确分类的 BIND 消息 | lame-servers 发现错误授权,即残缺服务器 | network 网络操作 | notify 区更新通知消息 | queries 查询日志 | resolver 名字解析,包括对来自解析器的递归查询信息 | security 批准/非批准的请求 | update 动态更新事件 
};

view localhost {                       //定义视图 view view_name
    match-clients { mylan; };          //匹配主机源地址,此处引用了上文定义的 mylan,也可以使用 192.168.0.0/8等匹配
    match-destinations { any; };       //匹配主机目的地址
    //view可以使用部分options参数和zone参数
    include "/etc/named.zones";        //包含其他文件,此处包含的为zone的部分,路径为chroot作为根的路径
};

[链接]named.conf的logging详解

/usr/local/named/chroot/etc/named.zones [其实zone也属于named.conf的一部分,只是独立出来就可以多次引用,如果没有必要可以合并编辑]

zone "." IN {
    type hint;         //zone文件类型,hint为根    
    file "root.zone";  //对应的配置文件位置
};

zone "localhost" IN {  //正解zone,从域名到IP 
    type master;       //主域,还有forward:转发域;slave:辅助域等 
    file "localhost.zone";
    allow-update { none; }; //不允许提交更新,此处可以使用其他选项,可以看上文的链接
};

zone "0.0.127.in-addr.arpa" IN { //反解zone,从IP到域名,将IP反写和添加对应尾缀in-addr.apra 
    type master; 
    file "named.localhost"; 
    allow-update { none; };
};

测试例子:/usr/local/named/chroot/var/named/test.zone

//zone内容
zone "www.test.com" IN {
    type master;
    file "test.zone";
};

//test.zone内容
;test.zone文件已经不属于配置文件,使用的注释为";"

;[链接]区域数据文件详解
$TTL  86400
@        IN  SOA  test.com.  root  (
            42   ;serial (d.adams)
            3H   ;refresh
            15M  ;retry
            1W   ;expiry
            1D ) ;minimum
;FQND(域名) TTL IN RPT(记录资源类型) IP
                 IN  NS  ns.test.com
                 IN  A   192.168.100.16  ;下文测试会用到

④启动与测试

将named更改属主 chown -R named  /usr/local/named

对应的配置文件都编辑好和放在对应的位置之后,可以先使用

/usr/local/named/sbin/named-checkconf来检查配置,由于编译的缘故,需要指定chroot路径

/usr/local/named/sbin/named-checkconf -t /usr/local/named/chroot   /etc/named.conf [-t指定chroot目录,再添加要检查的chroot对应目录下的/etc/named.conf]

同样的,检测没有异常后,同样使用指定方式来启动

/usr/local/named/sbin/named -t /usr/local/named/chroot  -c /etc/named.conf -u named

使用 netstat -tnlp|grep 53,查看端口是不是已经启动,如果启动了,那named.conf应该没有大问题了

然后用 nslookup www.test.com localhost[或本服务器的IP],如果正确回显

Server: localhost
Address: 127.0.0.1#53
Name:  www.test.com
Address: 192.168.100.16

那就证明可以正确解析了,配置也就到此完结


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值