学习用bind搭建DNS

来源:互联网 发布:厦门西岐网络 编辑:程序博客网 时间:2024/06/06 03:57

编译环境: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: localhostAddress: 127.0.0.1#53Name:  www.test.comAddress: 192.168.100.16

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


原创粉丝点击