博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BIND简易教程(1):安装及基本配置
阅读量:5227 次
发布时间:2019-06-14

本文共 5625 字,大约阅读时间需要 18 分钟。

首先,为什么说是简易教程呢?因为BIND的功能实在太多,全写出来的话要连载好久,我觉得我没有那么多精力去写;而我了解的仅仅是有限的一点点,不敢造次。百度上的文章也是一抓一大把呐!所以,教点基本使用方法,有需求的同学可以再翻翻BIND管理员手册。

那么,还是直接开始说正题吧。本次还是像PowerDNS一样是一个连载,写三篇。

 

目录:

BIND简易教程(1):安装及基本配置(本篇)

 

首先说说安装。安装是非常简单的,在ubuntu下直接

apt-get install bind9 bind9-doc dnsutils

即可,相信centos中yum也可以装。但是这样安装有个问题,就是不会安装openssl。不安装openssl的话,就不能开启dnssec。所以,如果有dnssec的需求(比如说我司),就不能用apt了。需要用源码安装。其实源码安装也是相当轻松的。先到官网()下载最新的稳定版本BIND(我现在的最新稳定版是9.10.4-P2),之后

tar zxvf bind-9.10.4-P2.tar.gzcd bind-9.10.4-P2sudo ./configure --sysconfdir=/etc/bind --with-libtoolsudo makesudo make install

configure的参数视自己具体情况而定。我习惯把所有配置文件放在/etc/bind下面,就加上--sysconfdir,如果不加的话,name.conf默认在/etc下面,很乱;--with-libtool据说加上之后能让编译出来的文件是.so而非.a,占用空间较小。不过我加上这个参数之后make编译会报错,我对这种编译方式不是很熟,所以就放弃了。

如果源码安装有疑问,请移步,这里不详细解释了。

安装还是很简单的。装好的bind主要由三部分构成:解析库(配置文件)、解析器(named)、管理器(rndc),解析库是以named.conf为中心的一堆配置文件,具体配置方法我们后面讲;named程序是bind的后台进程,是负责解析域名的;rndc是bind的远程管理程序,可以动态的添加/删除域名,查看bind状态,重新加载等。在这里,我们主要使用的是解析库。

bind配置文件提供了两个非常巧妙的语法规则:注释和include。注释用// 和# 均可,满足了不同程序猿的喜好;include则可以将不同类型的配置分开来,放在不同的文件中。其实include倒更像是宏的作用。上文说“以named.conf为中心”大概意思是,在named.conf中可以不直接写配置,而是写几个include,不同的include是不同类型的配置。比如默认的named.conf中include了named.conf.options、named.conf.local、named.conf.default-zones这三个文件。后两个我现在还用不到,就暂时注释起来了。保留named.conf.options,把选项和日志记在这里。named.conf.options配置如下:

key "rndc-key" {    algorithm hmac-md5;    secret "RaxA6K9RyJLFbJeeV3PkYg==";};controls {    inet 127.0.0.1 port 953    allow { 127.0.0.1; } keys { "rndc-key"; };};options {    directory "/var/cache/bind";    max-cache-ttl 120;    max-ncache-ttl 120;    version "[no version.]";    listen-on-v6 { none; };    minimal-responses yes;    recursion no;    auth-nxdomain no;    dnssec-enable no;};

先写这几个,日志呆会再说。options里面有很多选项,我只写了这几个。具体都有什么,应该怎么写,可以参考管理员手册。

写好options之后,在named.conf中加入include "/etc/bind/named.conf.options";就好了(其实默认的named.conf文件中已经有了)。

接下来是说明本DNS服务器能解析哪些域,也就是zone部分。因为内容比较少,我就懒得单独建立文件了,直接写进了named.conf中:

zone "apple.tree" IN {    type master;    file "/etc/bind/views/zones/db.apple.zone";};

有时候我们希望在某个特定域解析的时候使用一种options的属性,而其他域使用其他属性,那么就可以把options里面的属性放在zone里面写。管理员手册中有相应的写法。注意一下,各种配置,句末都要加分号,包括花括号结束,也要加分号。

这里我只说明了本机是主DNS服务器(这个选项可以设置主从),而本域的具体解析内容是在db.apple.zone文件中。db.apple.zone的配置为:

$TTL 86400@   IN  SOA apple.tree. apple.apple.tree. (          2016090100     ; Serial               28800     ; Refresh                7200     ; Retry              604800     ; Expire               86400     ; Negative Cache TTL)@   IN  NS  apple.tree.@   IN  A   192.168.4.43aaa     IN      A       192.168.4.100bbb     IN      A       192.168.4.101ccc     IN      CNAME   bbb

最前面的SOA,NS和A的部分是必须有的,具体写法是:

  • @符号代表对本机的解析;
  • IN表示Internet,表示是解析的是因特网中的域名。这个在RFC1035中也有介绍。据说以前也有别的东西,但是现在基本只剩下IN了。
  • SOA的写法可以参考这篇文章:https://bobcares.com/blog/understanding-soa-records/ 解释的比较详细。
  • NS写本域。
  • A写对本机解析到的A地址。

后面的是详细的可以解析的主机。在这里也许还需要简单的解释一下,一个域名是由“主机+域”共同组成的,比如我们常见的www.baidu.com这个域名,baidu.com是它的域,而www表示这个页面保存在这个主机上。像map.baidu.com,image.baidu.com都是存放在不同的主机的,对域名解析出来的地址有可能也不是同一个(我只是说有可能啊,当然扔同一个服务器上也没什么)。

我这里的aaa,bbb,ccc就表示3个主机,其中aaa和bbb解析到不同的地址,而ccc设定为bbb的别名。(A是IP地址,CNAME是别名。也有别的东西。具体参见RFC1035。)要注意,我这三个主机都在apple.tree这个域中,也就是aaa.apple.tree,bbb.apple.tree,ccc.apple.tree这三个域名,在解析时需要将后面的域名省略掉。假设我还有个域名ddd.apple.tree想解析到www.baidu.com,需要这么写:

ddd    IN    CNAME    www.baidu.com.

 

注意最后有个点,表示到这里结束,这是一个完整的域名,而不是一台主机。解析到A地址时候最后不加点。

以上。写好之后,可以用sudo service bind9 restart来重启服务器。当然我不建议这样重启。建议用sudo rndc reload重新加载,这样不影响当前DNS服务器的运行。重启OK之后测试一下:

$ dig aaa.apple.tree @192.168.4.43; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> aaa.apple.tree @192.168.4.43;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53833;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;aaa.apple.tree. IN A;; ANSWER SECTION:aaa.apple.tree. 86400 IN A 192.168.4.100;; Query time: 4 msec;; SERVER: 192.168.4.43#53(192.168.4.43);; WHEN: Fri Jan 08 14:47:48 CST 2016;; MSG SIZE rcvd: 59

 

就酱。如果重启没有成功,就把服务关掉(sudo service bind9 stop,使用之前可以先ps -ef | grep bind看看,有没有个named -u bind的进程,如果有再关,关不掉的就直接杀进程),然后用sudo named -g来检查一下,看看服务器是在哪一步挂掉的。说不定配置语法里少个分号。

最后说说日志的配法:

我直接在named.conf.options最后加上了logging选项:

logging {    channel defaults {        file "/var/log/named/default.log";        severity dynamic;        print-time yes;        print-category yes;        print-severity yes;    };    channel securitys {        file "/var/log/named/securitys.log";        severity dynamic;        print-time yes;        print-category yes;        print-severity yes;    };    channel gsquery {        file "/var/log/named/query.log"   versions 3 size 20m;        severity info;        print-time yes;        print-category yes;        print-severity yes;    };    category queries { gsquery; };    category security { securitys; };    category default { defaults; };    category general { defaults; };};

 

这里要注意:

(1)注意写到/var/log/named目录中的时候,可能会涉及到权限问题,如果bind启动不了,需要检查一下apparmor对bind的权限控制。具体检查方法:

sudo vim /etc/apparmor.d/usr.sbin.named

 

在最下面找到

# some people like to put logs in /var/log/named/ instead of having# syslog do the heavy lifting./var/log/named/** rw,/var/log/named/ rw,

 

加入一行

/var/log/named/* rw,

 

然后保存,用

sudo /etc/init.d/apparmor reload

 

或者

sudo /etc/init.d/apparmor restart

 

使配置生效。

(2)如果不特意配置logging,也会有默认的日志记录,是跟系统日志一起的。如果要彻底关闭日志,需要写成酱婶的:

logging {    channel "null" { null; };    category "default" { null; };};

 

测试性能的时候需要关闭日志,否则QPS差到不能忍。因为经常需要打开关闭日志,所以,我发现有注释功能实在是太爽了!

BIND除了这种一般的域名解析功能,还可以对IP进行反解析,也就是从ip解析到域名。具体配置方法可以自行查找(我没用到,所以懒得写了。。囧。。)

好啦,基本配置就讲这么多。

 

最后的最后,还是配上图,以免无聊广告乱入:

转载于:https://www.cnblogs.com/anpengapple/p/5877661.html

你可能感兴趣的文章
搭建 LNMP 环境
查看>>
【剑指offer】九,链表中倒数第k个结点
查看>>
最大流——poj1459
查看>>
第七次java作业
查看>>
启用sqlserver2005快照隔离
查看>>
回文串---Palindrome
查看>>
三角形问题
查看>>
Centos7.x Docker桥接网络
查看>>
RedisLive监控工具 windows部署笔记
查看>>
[Codeforces 316E3]Summer Homework(线段树+斐波那契数列)
查看>>
搭建好LAMP架构,部署OwnCloud
查看>>
EasyUI-EasyUI框架入门学习
查看>>
django新建站点时的问题
查看>>
高性能网站优化——请求响应原理
查看>>
Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合
查看>>
Android 中的MVC MVP MVVM
查看>>
Oracle练习题(1~19)
查看>>
利用JAVA想数据库中提交数据
查看>>
WOJ 41 约数统计
查看>>
两次考试
查看>>