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

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

目录:
BIND简易教程(1):安装及基本配置(本篇)
BIND简易教程(2):BIND视图配置(待续)
BIND简易教程(3):DNSSec配置(待续)

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

apt-get install bind9 bind9-doc dnsutils

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

tar zxvf bind-9.10.4-P2.tar.gz
cd bind-9.10.4-P2
sudo ./configure
sudo make
sudo make install

别忘了要提前装好openssl。如果想源码安装又不想装openssl的话,在configure后面加上参数--without-openssl。

安装还是很简单的。装好的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.43
aaa     IN      A       192.168.4.100
bbb     IN      A       192.168.4.101
ccc     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解析到域名。具体配置方法可以自行查找(我没用到,所以懒得写了。。囧。。)
好啦,基本配置就讲这么多。

时间: 2024-08-08 05:17:59

BIND简易教程(1):安装及基本配置的相关文章

BIND简易教程(2):BIND视图配置

目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置(本篇)BIND简易教程(3):DNSSec配置 上文书说到,我们把aaa.apple.tree解析到192.168.4.100.那么世界上任何一个人在请求aaa.apple.tree的时候,解析到的都是这个IP地址,之后,再访问这个域名(当然这个IP地址只是实验的,而且我域名也没注册,除了我内网之外,世界上任何一个人都访问不到).那么问题来了,两个人一个在电信,一个在联通,都想访问这个域名的话,我的服务器要放在

BIND简易教程(3):DNSSec配置

目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置BIND简易教程(3):DNSSec配置 (本篇) DNSSec,有个半英半中的名字叫DNS安全扩展.说的好听一点,它是对域名进行签名认证,保证域名的完整性和正确性,不会被修改.DNSSec不能防御对DNS服务器的攻击,也不会对请求和应答的数据进行加密,甚至如果你不知道DNSSec这个东西的话,域名是不是完整正确的你也不知道. 实际上,给我的感觉就是,DNSSec是在花很大的力气去配置一个不怎么有用的东西.然并卵

BIND简易教程(0):在Ubuntu下源码安装BIND(其实跟前面的教程没太大关系)

之前介绍过BIND的基本使用啦.关于BIND的入门级使用方法见:http://www.cnblogs.com/anpengapple/p/5877661.html简易教程系列,本篇只讲BIND安装. 本来源码安装不想介绍了,但是最近重装的时候,还是爆出来好多问题.唉,apt方式装习惯了,生成配置文件的脚本都是按照apt的目录和用户来的,源码方式有些坑.所以,还是介绍一下吧(有些部分是直接照前面扒下来的). 首先,因为需要开启DNSSec,所以必须要安装openssl.如果不需要装,或者已经安装好

DNS2之bind安装、主从配置同步、子域创建、view配置

主DNS配置从服务器: 我们知道,DNS服务器在网络服务中可能出现故障当机等状况,会导致DNS服务瘫痪,显然在实际的网络应用中我们不希望出现这种状况,所有我们就要配置从服务器来在主DNS服务器出现故障时代替他来工作,然而作为价格昂贵的服务器本身你又不希望出现这种极大的浪费,所有从服务器在实际工作中是和主服务器共同分担DNS解析任务的,这样既解决了服务器故障导致的问题,还可以缓解DNS服务器的压力. 那么要配置一个从服务器我们又该怎么做呢? 前提:我们要为本地配置一个从服务器aolens2.从服务

BIND服务企业实例安装配置

BIND服务企业实例安装配置 防伪码:思而不学则罔,学而不思则殆. 前言:BIND是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley  Internet  Name Domain 它是目前世界上使用最为广泛的DNS. 理论知识: DNS的分类: 主DNS服务器:就是一台存储着原始资料的DNS服务器. 从DNS服务器:使用自动更新方式从主DNS同步数据的DNS服务器.也称为辅助DNS服务器. 缓存服务器:不负责本地解析,采用递归方式转发

转载:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

原文 http://www.powerxing.com/install-hadoop/ 当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛.尽管安装其实很简单,书上有写到,官方网站也有 Hadoop 安装配置教程,但由于对 Linux 环境不熟悉,书上跟官网上简略的安装步骤新手往往 Hold 不住.加上网上不少教程也甚是坑,导致新手折腾老几天愣是没装好,很是打击学习热情. 本教程适合于原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1

Python学习 1 一 Python2.75的安装及环境配置教程

Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方面的编程.根据codeeval网站数据统计显示,连续三年,Python保持着其在编程语言中的领先地位.而且Python-Django开发web也是一种时尚. Python 2.75 安装文件 win8或win8.1 首先下载一个Python的应用程序,网上有很多的.此处给出官网的下载地址:https

Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

参见:http://www.powerxing.com/install-hadoop/ 完全拷贝至上面网址 环境 本教程使用 Ubuntu 14.04 64位 作为系统环境(Ubuntu 12.04 也行,32位.64位均可),请自行安装系统. 如果用的是 RedHat/CentOS 系统,请查看相应的CentOS安装Hadoop教程_单机伪分布式配置. 本教程基于原生 Hadoop 2,在 Hadoop 2.6.0 (stable) 版本下验证通过,可适合任何 Hadoop 2.x.y 版本,

Linux运维实战之DNS(bind)服务器的安装与配置

上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器. [本次博文的主要内容] bind服务器简介(包括客户端工具dig的介绍) 配置正向解析DNS服务器 配置反向解析DNS服务器 配置辅助DNS服务器并在主辅之间实现区域传送 一.BIND服务器简介: Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件.Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来