在OpenBSD上搭建域名服务器(DNS)

OpenBSD FAQ中文版、PF指南中文版、OpenBSD用户手册...
回复
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

在OpenBSD上搭建域名服务器(DNS)

帖子 leo » 2010-03-29 14:01

原文链接:
http://www.kernel-panic.it/openbsd/dns/dns1.html
译文仅供在JR社区学习讨论之用,谢绝修改、转发,多谢!
[email="leo@jr"]leo@jr[/email]

这只是我个人学习如何在OpenBSD搭建DNS服务器的笔记。发出来不是为了向新手传递知识,而是希望老手指出翻译中的错误,请勿将这篇译文当作学习的教材。如果您也对在OpenBSD上搭建DNS服务器感兴趣,欢迎大家一起探讨。

我可以确定:如果你和我一样以前没有配置过dns服务器的话,不要指望看两遍这篇文章的翻译就可以自己配置原文实例环境中的DNS服务器了。此外我没有DNS服务器的相关知识,也不清楚行业上的惯用语,只是最近想学习一下dns服务器的设置,所以才翻译了这篇文章,如果你配置过DNS服务器并且发现了译文中的错误、或者说对某些词汇的翻法有不同意见,欢迎指教。

如果您想学习在OpenBSD上搭建DNS服务器,强烈建议您直接阅读英文原版,以免因翻译中的歧义部分造成您理解上的误差和迷惑。

如果您愿意,也可以推荐自己觉得更好的有关如何在OpenBSD上搭建DNS服务器的文章,多谢!

以下是翻译(惨不忍睹),欢迎大家纠错。
========================================================
1. 介绍
我们的网络增长的很快, 我们有了新设置的 redundant firewalls, mail server, proxy cache 等等。而现在我们的脑子里充斥着IP地址、手指也厌倦了总是输入这些数字和“.”。 现在绝对到了设置一台name服务器以及给其设置一些好names的时候了! 下面是一份所用软件清单:
OpenBSD
[INDENT]默认安全的操作系统, 在很长的一段时间内默认安装仅发现过两个远程漏洞!;
[/INDENT]Bind (Berkeley Internet Name Daemon)
[INDENT]实现互联网上域名系统(DNS)协议的开源软件。
[/INDENT]OpenBSD绝对是一个适合运行域名服务器的平台: 首先也是最重要的原因是它的默认安装总是包含了(经过修补的)最新的Bind版本, 这节省我们大量的编译和安装的麻烦; 第二, OpenBSD以安全著称, 而域名服务器的安全则是整个互联网安全的核心; 最后, OpenBSD非常稳定、可靠、快速而易于管理...这些正是一个域名服务器所需要的!

不管怎么说, 我们下面谈到的话题并非仅适用于OpenBSD: Bind支持若干平台, 因此尽量简化其配置可以便于用户应用于跨平台的环境。

Bind是非常强大, 灵活和富有特性的软件, 而这些导致了有时候配置bind变成了一个技术活。因此, 我们将一步一步地详细讲解, 我们开始先进性一个简单环境的设置,然后以其为基础逐渐介绍一些Bind最令人感兴趣和最受欢迎的特性。 我们也会谈论一些如何处理冗余、安全、DHCP和NAT的话题。

这里假设您对于OpenBSD有一个基本的了解, 因为这里不会涵盖如何安装和配置操作系统。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD as a domain name server

帖子 leo » 2011-04-22 2:54

拖了一年了,实在不好意思,今天重新捡起来,争取尽快做完。

2. 域名系统
如果你了解DNS的原理,那么DNS的配置非常简单。所以, 不必先忙于编辑你的zone 数据文件, 我们先概述一下域名系统的构架以及其内部机理。

2.1 一些定义
域名系统实际上是一个 (本章2.4小节描述的)资源记录 (参 [RFC1034])的分布式数据库, 它包含了很多域名的信息 (例如,IP地址邮件交换器等) 。与Unix文件系统类似, 这个数据库的布局类似于一棵反向的树, 树根在顶部。整个树被称为域名空间。
图片


在域名空间里的每个node(节点)都有一个文字标签(root节点有一个特殊的零长度标签, "") ,而且这个文字标签在其域名内是唯一的, 也就是说从从该节点到root(根)的一系列标签由“.”符号分割开来 (Unix系统里的路径正相反, 是从root开始,而且是用 “/”符号分割的)。
例如, 下图中突出的域名是由这样一系列标签构成的: "www", "kernel-panic", "it" 和代表 root 的空标签, 从而将其写为 www.kernel-panic.it
图片

因为root节点通常写为一个单独的“.”,以一个“.”结尾的域名被认为是完整的 (类似于Unix的完整路径, 以一个“/”开头)。一个完整的域名也被称为fully qualified domain name (FQDN)。没有以一个“.”结尾的域名被认为是相对于另一个域的, 这里的另一个域通常是指它的root。一个相对域名通常也称为一个部分限定域名 (PQDN)。
一个域是某个域名空间的子树且其域名取自其最高节点。每个域都可能有自己的子树, 这个子树被称为子域名。域也可以划分为级别: 每个顶级域名都是root派生的; 每个二级域名都是顶级域名派生的; 以此类推。
图片
域名的层次结构允许其管理权限下放; 事实上, 一个域可以委托给某个组织, 也就是说将一个子域委托给一个不同的组织负责,而仅维护域中未经委托部分(称为zone)的信息。

用以储存zone信息的程序被称为域名服务器,在该zone内具有权威性(leo:这句话我的理解是该程序全权负责整个zone内的域名解析)。有两种类型的域名服务器:
  • 主域名服务器, 它从一个本地文件(被称为zone data file)里读取数据为zone服务;
  • 二级域名服务器 (或者称为从域名服务器), 它通过一个zone传输从主域名服务器那里获取数据; 一般来说, 但不是必须, 主域名服务器是该zone的primary master。
这两类域名服务器的相互配合可以让管理工作更加轻松, 例如可以通过一个配置单点, 从而实现冗余、负载均衡、多台认证服务器共同应对查询等为某个zone提供服务。

2.2 域名解析过程
访问域名服务器的客户端被称为resolvers。在Bind里, 这个resolver只是一个library,它必须被发送域名服务查询的应用来链接。当一个应用需要一个域名空间的信息时, 它会用这个resolver来发送一个请求给DNS服务器 (一般是公司或ISP的服务器)。如果dns服务器对查询的zone具有权威性(leo:也就是说dns服务器全权负责该zone的域名解析) , 这个DNS服务器将马上给出结果; 否则, 它将搜索整个域名空间以找出查询的数据。这个过程被称为域名解析。

有两类DNS查询:
  • 迭代的 (或者不递归的), 只向dns服务区索要一个它已知的最佳的答案;
  • 递归的, 要求DNS服务器对查询给出一个确切的结果,或者返回一个错误。
通常resolvers执行一个递归的查询,将查询的任务全部提交到域名服务器; 而DNS servers则根据所有转交的数据执行一系列迭代的查询, 直至找到答案。
图片
我们通过一个例子来看一下它是如何工作的。假设你想访问站点 "www.kernel-panic.it" ; 你在浏览器里输入URL然后按 "Enter" ,那么接下来发生的是:
  1. resolver向你公司的DNS服务器发起一个迭代查询, 它希望得到这个 "www.kernel-panic.it" web服务器的IP地址 (或者返回一个错误信息) ;
  2. 因为你们公司的DNS服务器对所请求zone的没有权威性, 它将向一个root域名服务器发送一个迭代的查询,索要域名 "www.kernel-panic.it" 的IP地址, 这里所说的root域名服务器也就是13台全球DNS服务器中的一台,它知道所有顶级域的权威服务器;
  3. 被查询的root域名服务器有可能不知道确切的答案, 但是它肯定知道哪些服务器 对"it" zone具有权威性。因此它告诉你们公司的DNS服务器那些权威服务器的地址;
  4. 你们公司的DNS服务器将选择其中之一,并向其发送同样的迭代查询,也就是索要 "www.kernel-panic.it" 域名的IP地址;
  5. 被查询的这个 "it" 域名服务器也有可能不清楚确切的地址,因此向你们公司的DNS服务器提供一个其所知的 "kernel-panic.it" zone的权威服务器清单;
  6. 你们公司的DNS服务器最终知道了 "kernel-panic.it" zone 的权威服务器清单,并将同样的请求发送给其中的一台权威服务器;
  7. 被请求的权威服务器将域名 "www.kernel-panic.it" 的IP地址告诉你们公司的dns服务器;
  8. 最终你们公司的域名服务器就可以将该信息告诉发送查询的resolver。
正向你看到的那样, 解析过程可能包含几个步骤; 但是无论执行完哪一步, 域名服务器都了解了越来越多的信息。例如, 上例中, 你们公司的DNS服务器已经知道了哪些服务器是 "it" zone和 "kernel-panic.it" zone的权威服务器。那么,如果你想连接到 "ftp.kernel-panic.it" 这台机器上会发生什么呢? 因为你们公司的域名服务器已经知道了 "kernel-panic.it" zone的权威服务器; 所以它会仅用一个步骤完成查询,也就是直接将查询发送给权威服务器中之一, 这会大大提高解析的速度。将掌握的数据储存下来以备将来的参考使用被称为caching。从4.9版开始, Bind也开始记录一些不存在的域 (negative caching—无效地址缓存), 以防止反复尝试失败的请求。

2.3 Reverse name resolution
反向域名解析是将一个IP地址映射回一个FQDN(完全限定域名)。虽然这看起来需要彻底地搜索整个域名空间一个, 不过, 事实上它和域名解析一样简单,因为DNS的开发者们创造出了一个特殊的域 "in-addr.arpa", 它以用“.”分割的8位元代表一个IP地址标签。
换句话说, 这个 in-addr.arpa 域的可能对应第一个八位元IP地址有 (或者更精确一些的说法是可以有) 多达256三级子域 (从 0 到255); 依次4个八位元中的每个都可能有256个子域 , 也是从0到255。
图片
因此, 要查询这个FQDN相关的某个IP地址, resolver只需要到in-addr.arpa域去查询域名服务器里的 PTR record (参看对应英文版的 below 内容) 。例如, 想要知道62.149.140.23这个IP地址对应的域名, resolver就要向DNS服务器请求域名"23.140.149.62.in-addr.arpa" 的 PTR record。
就像你看到的那样, IP地址在in-addr.arpa域内是反向书写的。这源于IP地址和域名的一个基本差异: IP地址从左到右越来越精确, 而域名则是从右到左越来越精确。因此, 在in-addr.arpa域内的域名节点以这种方式(看起来有些古怪)实际上可以映射出该域名系统的结构层次。

2.4 Resource records(资源记录)
域名空间内的每个节点有一套与之相关的资源信息 (也可能是空的), 它们是由单独的资源记录(RRs)构成的。这个信息包含在以文本格式记录的zone数据文件里, 而查询请求和zone传递则以二进制格式进行。一个资源记录由五个区域构成:
Name
[INDENT]resource record所指的(记录的)域名
[/INDENT]Type
[INDENT]resource record的类型 (参 below)
[/INDENT]TTL
[INDENT]这个RR的生命周期, 也就是说resolvers要在cache里保留这个RR多长时间,如果超过这个期限则resolvers会认为这个RR已经失效了。
[/INDENT]Class
[INDENT]应用在该记录的网络类型、软件类型; 目前有效的类型为 Internet (IN), CHAOSnet (CH) 和 Hesiod (HS)。我们只讨论Internet class, 它可以应用于所有基于TCP/IP的internet网络,而且也是迄今为止应用最广泛的。
[/INDENT]RDATA
[INDENT]相关该域名的实际资源数据
[/INDENT]主要的DNS记录类型如下 (参看 [RFC1035]):
A (地址)
[INDENT]一个32-bit的IP地址
[/INDENT]AAAA (IPv6地址)
[INDENT]IPv6格式的主机地址
[/INDENT]CNAME (规范名)
[INDENT]为一个域名制定一个别名, 即,用一个不同的 FQDN 来指向同一台主机。
[/INDENT]KEY
[INDENT]服务器上TSIG和DNSSEC的public key
[/INDENT]MX (邮件交换器)
[INDENT]指定了一个邮件服务器清单,这些服务器为该域发送邮件
[/INDENT]NS (域名服务器)
[INDENT]指定了域中的权威服务器
[/INDENT]PTR (指针)
[INDENT]在域名空间内的一个指向其它地方的指针; 多被用来在"in-addr.arpa" 域内分配一个IP地址给域名以供反向解析
[/INDENT]SOA (Start Of Authority)
[INDENT]Identifies the start of a zone of authority
[/INDENT]TXT (Text)
[INDENT]一个分配给该域名的可以包含任意数据(最多255字节)的字符串。
[/INDENT]

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

3. 基本配置

帖子 leo » 2011-04-22 3:20

3. 基本配置
现在我们对域名服务系统的构架有了一定认识, 现在是将理论应用到实践中时候了,我们要设置我们的第一个域名服务器。
图片
这是我们的域名服务器的工作环境。这是一个很简单的网络, 有下列部分构成:
  • 一个 DMZ (172.16.240.0/24), 包含了可从Internet访问的服务器 (例如 mail, web 和 proxy 服务器);
  • 一个 LAN (172.16.0.0/24), 包含了无法从公共Internet访问的客户端及服务器(例如文件服务器, DHCP服务器);
  • 一个路由器, 在一个小型子网(172.16.250.0/24)内, 连接到通往Internet的DMZ。
所有这些系统都属于 "kernel-panic.it" zone,我们设置的第一台DNS服务器是该zone的primary master域名服务器; 它位于DMZ内,要应答来自内部有关Internet和DMZ服务器域名的查询。

3.1 主配置文件
Bind的配置文件是 named.conf(5) , 默认情况下在 /var/named/etc/。当然, 你也可以用 named(8) 命令的 -c 参数来指定另一个路径。


配置语法相当简单: 它是由包含在大括号内以分号作为终止的一系列声明。 声明里都包含了一个以分号终止的形式为 keyword/value 的变量。支持如下的注释风格:
  • C style (/* Multiline comment */);
  • C++ style (// Inline comment);
  • Shell style (# Inline comment);
这里的 "options" 声明用来设置Bind的全局参数。这里的 "directory" 分句指定了应该解析哪个后续的相对路径到该目录。默认情况下是保留这个非指定值分句。例如:

代码: 全选

options {
    # Bind runs chrooted to "/var/named/", hence "/" actually is "/var/named/"
    directory       "/";
};
这里的 "zone" 声明告诉Bind它是那些zone的权威; 对每个 zone 来说, 这里的 "type" 分句指定了该服务器为其主/从服务器,而 "file" 分句指定了相应的zone数据文件的路径。例如:

代码: 全选

zone "kernel-panic.it" {
    type            master;
    file            "master/db.kernel-panic.it";
};
zone数据文件的名字可以是随意的, 但是我们强烈推荐使用一个有意义的名字,这样便于今后维护管理。例如, zone数据文件经常被命名为 db.domain
要允许 域名反向解析, 我们还要为每个网络创建zone数据文件:

代码: 全选

zone "240.16.172.in-addr.arpa" {
    type            master;
    file            "master/db.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            master;
    file            "master/db.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            master;
    file            "master/db.1.2.3";
};
域名服务器还需要将loopback地址映射到一个域名上。因此, 我们不得不为"localhost" zone 和 127.0.0.0/8 网络创建特定的zone数据文件:

代码: 全选

zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
[RFC1912] 还推荐在域名服务器配置里一定要提供 "255.in-addr.arpa" 和 "0.in-addr.arpa" 这两个zone,这样既可以为“特殊的”地址提供域名服务,也可以帮助避免类似将广播或者本地地址发送到root域名服务器查询这样的意外情况的出现:

代码: 全选

zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
最后, 如果要这个域名服务器可以解析Internet上的域名,我们必须给其提供一份root域名服务器的清单,这些清单使用一个hint zone来指定。

代码: 全选

zone "." {
    type            hint;
    file            "master/root.hint";
};
你可以在 /var/named/etc 目录下找到一份 root.hint 的拷贝文件。

3.2 zone数据文件
Zone数据文件包含了这些zone和其权威服务器的信息, 而且根据Bind配置, 它们应该在目录 /var/named/master/ 内。
一般, zone数据文件的第一行为zone设置了默认的 TTL , 也就是允许其它的DNS服务器或者应用程序在多长的时间内cache(临时保存)这个记录。

代码: 全选

$TTL   3h
一个zone数据文件内可能有包含多个 $TTL 声明: 它们中的每一个都应用到后面的记录里 (那些没有明确包含一个 TTL 的记录) 直到下一个新的 $TTL 声明修改了这个值。你也许想调整这个值以便在带宽和数据更新之间作出一个最佳的权衡。
zone数据文件的下一个项目是SOA记录, 这个选项指定了该zone的权威服务器。

代码: 全选

@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
    2007020601 ; serial
    3h         ; refresh after 3 hours
    1h         ; retry after 1 hour
    1w         ; expire after 1 week
    1h )       ; negative caching TTL of 1 hour

我们详细解释一下。这里的 "@" 符号指定了权威服务器服务的zone; 嗯, 更确切地说, 它表示zone数据文件内数据的起源, 默认情况下, 它与该zone的域名一致。这个起源会附加到这个数据文件内的所有未以“.”结尾和可以用的$ORIGIN声明修改的域名上。
IN 是一个标准的记录 (Internet)。SOA 是记录类型。 "dns1.kernel-panic.it." 是这个zone的primary master域名服务器的名字,这里的 "danix.kernel-panic.it." 是zone管理员的email地址, 这个地址用一个“.”替换掉了 "@" (所以实际的地址应该是是 [email protected])。

现在我们看一下括号内的数字 (括号的作用只是允许在多行内描述同一个记录) (请注意这里的注释, 在zone数据文件内, 起始于一个分号并直至行尾)。这里的serial是一个渐进的数值,每次zone数据文件被更新时这个数值必须是增加的, 否则从域名服务器则不会知道数据已经发生了变化(按照 [RFC1912], 推荐的serial数值的格式是 "YYYYMMDDnn", 这里的 "nn" 代表了修订数值)。 这里的refresh数值设置了多长时间从服务器应该检查其zone数据文件是否已更新。如果主服务器无法访问, 这里的retry和expire数值告诉从服务器重新尝试连接的时间间隔以及多长时间后停止对外公布该zone的有关数据。最后一个数值是zone内权威服务器上保留的无效地址缓存(leo:前面提到过的无效缓存)的时间。
接下来, 每个zone数据文件有一和或多个NS记录, 指定了该zone的权威服务器。

代码: 全选

kernel-panic.it.    IN NS       dns1.kernel-panic.it.
kernel-panic.it.    IN NS       dns2.kernel-panic.it
一个资源在记录的第一个区块表示其名字,且必须从第一列开始写; 如果与前一项相同,这里也可以不写。因此, 上面的NS记录也可以简写为:

代码: 全选

                    IN NS       dns1.kernel-panic.it.
                    IN NS       dns2.kernel-panic.it.
这里的MX记录允许你指定为这个域名管理邮件的主机; 这个记录有一个额外的参数, 一个16位数字,它表示邮件交换程序的优先权(数值越低优先权越高)。

代码: 全选

                    IN MX    0  mail.kernel-panic.it.
                    IN MX   10  mail.provider.com.
下一个记录是 "A", 它指定正向映射的数据文件, 因此其关联域名及其IP地址。

代码: 全选

mail                IN A        172.16.240.150
proxy               IN A        172.16.240.151
www1                IN A        172.16.240.152
www2                IN A        172.16.240.153
dns1                IN A        172.16.240.154
dns2                IN A        172.16.240.155
 
mickey              IN A        172.16.0.200
                    IN A        172.16.240.200
minnie              IN A        172.16.0.201
                    IN A        172.16.240.201
 
router              IN A        172.16.250.1
                    IN A        1.2.3.4
[...]

这里的CNAME记录将一个别名映射为规范名; 换句话说, 它定义了一个域名,该域名指到域名空间上另一节点上。

代码: 全选

antivirus           IN CNAME    mail
cache               IN CNAME    proxy

好, 我们已经完成了正向映射(forward-mapping); 现在我们看一下反向映射(reverse-mapping)的zone数据文件。开始处完全一样: 你需要设置默认的TTL ,然后插入我们前面介绍过的SOA和NS记录。接下来是PTR记录, 该记录将地址映射到主机名上; 嗯, 更严谨的说法是, 它们将 in-addr.arpa 里的域内的域名映射为 kernel-panic.it 域内的域名。在强调一次, 这里的起源自动附加到那些不以“.”结尾的所有的域名, 允许你指定IP地址的最后一个8位元。
文件 /var/named/master/db.172.16.240

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
    2007020601 ; serial
    3h         ; refresh after 3 hours
    1h         ; retry after 1 hour
    1w         ; expire after 1 week
    1h )       ; negative caching TTL of 1 hour
 
                    IN NS       dns1.kernel-panic.it.
                    IN NS       dns2.kernel-panic.it.
 
100                 IN PTR      donald.kernel-panic.it.
101                 IN PTR      daisy.kernel-panic.it.
102                 IN PTR      fw-ext.kernel-panic.it.
150                 IN PTR      mail.kernel-panic.it.
151                 IN PTR      proxy.kernel-panic.it.
152                 IN PTR      www1.kernel-panic.it.
153                 IN PTR      www2.kernel-panic.it.
154                 IN PTR      dns1.kernel-panic.it.
155                 IN PTR      dns2.kernel-panic.it.
200                 IN PTR      mickey.kernel-panic.it.
201                 IN PTR      minnie.kernel-panic.it.
202                 IN PTR      fw-int.kernel-panic.it.
要概括一下, 参看第五小节,那有完整zone数据文件。

3.3 启动
运行Bind只需要键入 "named"。如果你是第一次运行, 你也许想带上参数 -g , 这个参数使服务器在前端运行并且强制所有的log记录到stderr。

代码: 全选

# named -g
Starting privilege separation
06-May-2009 01:09:29.771 starting BIND 9.4.2-P2 -g
06-May-2009 01:09:29.827 loading configuration from '/etc/named.conf'
[...]
06-May-2009 01:09:29.991 running

你也许看到警告’域名服务器无法找到文件 /etc/rndc.key : 别理它, 我们在4.5小节里会讨论 rndc(8) 。 在此情况下 named(8) 会抱怨有语法错误, 你可以用 named-checkconf(8)named-checkzone(8) 命令来分别检查Bind配置文件和zone数据文件的的语法。
如果看起来一切无误, 你可以用 nslookup(1) 或者 dig(1) 测试一下你全新的域名服务器了。

代码: 全选

$ nslookup mail.kernel-panic.it 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53
 
Name:   mail.kernel-panic.it
Address: 172.16.240.150
 
$

要在系统启动时自动启动Bind, 将下列行加入到 /etc/rc.conf.local 文件:

代码: 全选

named_flags=""

3.4 rndc(8)

rndc(8) 工具允许你与域名服务器之间通讯并且通过TCP连接向其发送经验证的命令。 它从 rndc.conf(5) 文件读取其配置 (该文件默认在 /var/named/etc/), 语法类似于 named.conf(5)。下面一个从本地网络连接到服务器的一个配置文件的例子:
文件 /var/named/etc/rndc.conf

代码: 全选

options {
    default-server  localhost;
    default-port    953;
    default-key     "rndc-key";
};
 
server localhost {
    key             "rndc-key";
};
 
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "jIpKqniOSfP7Nr5GTTyDkw==";
};
要让域名服务器接受来自 rndc(8) 的连接, 只需将下列行加入你的 named.conf(5) 文件 (请根据需要调整允许的清单):

文件 /var/named/etc/named.conf

代码: 全选

key "rndc-key" {
    algorithm       hmac-md5;
    secret          "jIpKqniOSfP7Nr5GTTyDkw==";
};
 
controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};

要让域名服务器接受来自 rndc(8) 的连接, 只需将下列行加入你的 named.conf(5) 文件 (请根据需要调整允许的清单):

文件 /var/named/etc/named.conf

代码: 全选

key "rndc-key" {
    algorithm       hmac-md5;
    secret          "jIpKqniOSfP7Nr5GTTyDkw==";
};
 
controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};

如果你想简单一些, 你可以用 rndc-confgen(8) 程序自动生成 rndc(8) 的配置文件。

3.5 增加一个从域名服务器

现在你的primary master域名服务器运行良好, 你也许想设置一个从域名服务器以便实现冗余和负载均衡。配置Bind很类似:

文件 /var/named/etc/named.conf

代码: 全选

options {
    directory       "/";
};
 
zone "kernel-panic.it" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.kernel-panic.it";
};
 
zone "240.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.1.2.3";
};
 
# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
 
# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
 
# Root zone
zone "." {
    type            hint;
    file            "master/db.cache";
};
对所有zone来说从域名服务器都具有权威性 (除了 loopback 地址和那些 "special" zones) ,type区块这里输入slave。我们还需要增加 masters 分句来告诉Bind 那些primary master域名服务器的地址。zone文件里你提供的type为slave的文件名是用来告诉bind从哪里获取主域名服务器传送过来的数据。这种情况下, 应该是主域名服务器在系统启动后无法访问, 但是Bind仍旧有一份该数据的本地拷贝。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

4. Bind的高级配置

帖子 leo » 2011-04-22 3:27

4. Bind高级配置
那么我们有两台域名服务器了, 目前都工作的不错,而且现在允许我们通过域名定位DMZ服务器了。它们的设置很类似, 但可以满足多数环境了。不过, Bind可以做更多的工作并且解决很多你可能面对的潜在问题; 我们看看一些常见的。

4.1 查看和分割域名空间
我们的域名服务器被配置为返回DMZ服务器的私有地址, 也就是在 172.16.240.0/24 网络的地址。不过, 其中一些服务器 (例如mail和web服务器) 可以从Internet进行访问, 使用一个公网的IP地址 (也就是NAT设备的IP地址)。因此, 因此域名服务器会根据查询请求源的不同提供不同的回答: 它会给来自内网的请求一个私有地址,而对来自外网的请求会提供一个公有地址。
这被称为一个分割的域名空间: 真实的域名空间只能从内部系统访问, 而Internet上的主机只能看见其局部和传送的部分 (被称为影子空间)。 通过其最棒的功能views完成这一任务。我们用一个小例子演示一下其作用。
首先我们先定义一组可以通过自己的私有地址访问服务器的主机。我们通过定义一个acl来实现这一目标, 这个acl仅简单地声明一个带有一组主机的name。

文件 /var/named/etc/named.conf

代码: 全选

acl "internal" {
    127/8; 172.16.240/24; 172.16.0.0/24;
};
接下来将 views 加入到 named.conf(5) 里,而且为每个view指定不同的zone数据文件。

文件 /var/named/etc/named.conf

代码: 全选

view "internal" {
    # This view applies to machines in the 'internal' acl
    match-clients   { "internal" };
    # Allow 'internal' machines to query for internet names
    recursion       yes;
 
    zone "kernel-panic.it" {
        type        master;
        file        "master/db.kernel-panic.it"
    };
 
    zone "240.16.172.in-addr.arpa" {
        type        master;
        file        "master/db.172.16.240"
    };
 
    zone "250.16.172.in-addr.arpa" {
        type        master;
        file        "master/db.172.16.250"
    };
 
    zone "3.2.1.in-addr.arpa" {
        type        master;
        file        "master/db.1.2.3"
    };
 
    # Loopback address
    zone "localhost" {
        type        master;
        file        "master/db.localhost";
    };
 
    zone "0.0.127.in-addr.arpa" {
        type        master;
        file        "master/db.127.0.0";
    };
 
    # Special zones
    zone "255.in-addr.arpa" {
        type        master;
        file        "master/db.255";
    };
 
    zone "0.in-addr.arpa" {
        type        master;
        file        "master/db.0";
    };
 
    # Root zone
    zone "." {
        type        hint;
        file        "master/db.cache"
    };
};
 
view "internet" {
    # This view applies to all the other machines
    match-clients   { any; };
    # Do not allow external machines to query for internet names
    recursion       no;
 
    zone "kernel-panic.it" {
        type        master;
        file        "master/db.kernel-panic.it.shadow"
    };
 
    zone "3.2.1.in-addr.arpa" {
        type        master;
        file        "master/db.1.2.3.shadow"
    };
};

下面是影子zone数据文件:
文件 /var/named/master/db.kernel-panic.it.shadow

代码: 全选

$TTL 1d
 
@ IN SOA dns.kernel-panic.it. danix.kernel-panic.it. (
    2007020601 ; serial
    3h         ; refresh after 3 hours
    1h         ; retry after 1 hour
    1w         ; expire after 1 week
    1h )       ; negative caching TTL of 1 hour
 
                    IN NS       dns.kernel-panic.it.
                    IN NS       dns.provider.com.
 
                    IN MX    0  mail.kernel-panic.it.
                    IN MX   10  mail.provider.com.
 
                    IN A        1.2.3.4
 
www                 IN CNAME    kernel-panic.it.
mail                IN CNAME    kernel-panic.it.
dns                 IN CNAME    kernel-panic.it.
 
*                   IN MX    0  mail.kernel-panic.it.
                    IN MX   10  mail.provider.com.
文件 /var/named/master/db.1.2.3.shadow

代码: 全选

$TTL 1d
 
@ IN SOA dns.kernel-panic.it. danix.kernel-panic.it. (
    2007020601 ; serial
    3h         ; refresh after 3 hours
    1h         ; retry after 1 hour
    1w         ; expire after 1 week
    1h )       ; negative caching TTL of 1 hour
 
                    IN NS       dns.kernel-panic.it.
                    IN NS       dns.provider.com.
 
4                   IN PTR      kernel-panic.it.

也许你注意到了, 为提高DNS服务的性能, 我们已经设置了一个额外的由ISP提供的域名服务器, 单独包含了影子空间的信息。

4.2 委托
至此, 我们只考虑了DMZ服务器: 现在是时候考虑LAN域名服务器了。我们看一下它是如何关联其它主机的:
  • 位于Internet上的机器不应该知道我们内部网络和私有服务器的任何信息; 因此, 我们不必修改 shadow files;
  • 位于LAN的机器应该仅能解析到我们的网络(LAN和DMZ)的内部域名; 浏览网页可以通过 proxy server (位于DMZ) ,代理服务器可以解析Internet域名;
  • DMZ服务器应该能解析内部和外部的域名。
最简单的解决方案可能是再次利用 views 的优势并将内部服务器加入到zone数据文件,配置时使用 "internal" view (参看 above)。不过,一个更有趣和更可调的解决方式是创建一个新zone, "lan.kernel-panic.it" ,并将其委托给一些我们放置在LAN内的域名服务器 (主和从) 。

在父系那里, 我们仅简单地增加一些合适的NS记录以及相关的A记录:

文件 /var/named/master/db.kernel-panic.it

代码: 全选

[...]
lan                 IN NS       dns1.lan.kernel-panic.it.
                    IN NS       dns2.lan.kernel-panic.it.
 
dns1.lan.kernel-panic.it.   IN A        172.16.0.161
dns2.lan.kernel-panic.it.   IN A        172.16.0.162
[...]

被委托的域名服务器只需用 常规的方式 创建合适的配置文件和zone数据文件。你可以在 这里 找到完整的文件。

4.3 动态更新和提醒
但是启用了DHCP的客户端怎么办? Bind可以将域名映射到动态IP地址上吗? 答案自然是“当然可以”! Bind支持动态更新 (参看[RFC2136]), 在IP地址发生变化时DHCP服务器可以自动 添加/删除/修改 资源记录。配置也很简单:

文件 /var/named/etc/named.conf

代码: 全选

zone "lan.kernel-panic.it" {
    type            master;
    file            "master/db.lan.kernel-panic.it";
    allow-update    { 172.16.0.163; };
    notify          yes;
};

这个allow-update分句指定了运行更新zone的一份IP地址清单 (通常只有DHCP 服务器)。它也接受一个 ACL name 或者一个 TSIG key (参看下面以获取更多的信息)。 例如:

文件 /var/named/etc/named.conf

代码: 全选

key dhcp-dns1.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "+io/5nabnVFgC4Tx+UAkgg==";
};
 
zone "lan.kernel-panic.it" {
    type            master;
    file            "master/db.lan.kernel-panic.it";
    allow-update    { key dhcp-dns1.lan.kernel-panic.it.; };
    notify          yes;
};
这里的notify分句告诉Bind发送一份通知到该zone的每个从域名服务器,通知它们zone数据已经变化了。这让Bind可以将主从服务器间的同步延迟降至最低。动态更新和DNS通知协作工作的效果很好, 因为Bind 9在每次更新后自动增加zone的serial数值,而这个数值的增加正好触发了zone变化通知功能。

除了allow-update, Bind 9 还支持 update-policy 分句, 它允许通过一个经认证的更新key来严格地控制更新特定的zone。例如:

文件 /var/named/etc/named.conf

代码: 全选

zone "lan.kernel-panic.it" {
    type            master;
    file            "master/db.lan.kernel-panic.it";
    update-policy   { grant dhcp-dns1.lan.kernel-panic.it. subdomain lan.kernel-panic.it. A; };
    notify          yes;
};

请参开 官方文档 以了解update-policy语法的更多细节。

4.4 TSIG和安全
到目前为止, 我们仅考虑了如何让系统各部分平稳地运行, 并没有深入地探讨安全问题安全。但是我们需要意识到有部分域名服务器必须暴露在Internet上,因此安全问题不容忽视。在OpenBSD系统上已经实施了最基本的安全方案: Bind以一个没有特权的用户 "named"的身份来运行,并且被chrooted在 /var/named 目录里。这样就更难利用新发现的系统漏洞来攻击它。
另一个重要的安全策略是隐藏Bind的版本号, 这不过是为了增加一些攻击难度。
文件 /var/named/etc/named.conf

代码: 全选

options {
    version         "Go hack yourself!";
};

我们已经见识了 viewsacls 怎样帮助处理NAT和防火墙, 但是他们也可以提供很棒的安全特性, 因为它们可以让你制定哪些主机可以访问哪些信息。例如, 例如在一个view里使用recursion substatement (或者在statement选项里使用 allow-recursion分句), 你可以制定哪些主机可以向你的域名服务器请求递归查询。这可以让你防范一些常见的欺骗攻击 (参 [DNS&BIND])。

文件 /var/named/etc/named.conf

代码: 全选

acl "dmz" {
    127/8; 172.16.240/24;
};
 
view "dmz" {
    match-clients   { "dmz" };
    recursion       yes;
};
 
view "internet" {
    match-clients   { any; };
    recursion       no;
};

除了recursion, Bind也允许你分别使用allow-query和allow-transfer分句来限制查询和zone传递。如果被用于zone声明中,则这些分句只应用于某个特定zone,如果用在Option声明里则应用于全局。例如:

文件 /var/named/etc/named.conf

代码: 全选

acl "dmz" { 127/8; 172.16.240/24; };
 
options {
    # Restrict zone transfers to our internal name servers
    allow-transfer  { 172.16.0.161; 172.16.0.162; };
};
 
zone "kernel-panic.it" {
    type            master;
    file            "master/db.kernel-panic.it"
    # Restrict queries to DMZ servers
    allow-query     { "dmz" };
};

利用acls和地址匹配清单来限制zone传递实际上等同于聊胜于无,不过使用交易签名或者TSIG (参 [RFC2845])则被认为稍好一些。TSIG允许DNS服务器验证DNS信息, 它使用共享的加密 (TSIG keys) 和一个单向的哈希函数 (HMAC-MD5)。
TSIG的配置很简单。第一个步骤是创建共享 key(s): 最简单的方式是用 dnssec-keygen(8) 程序, 它产生的两个文件都包含了这个key

代码: 全选

# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST rndc-key
Krndc-key.+157+32572
# ls
Krndc-key.+157+32572.key             Krndc-key.+157+32572.private
# cat Krndc-key.+157+32572.key
rndc-key. IN KEY 512 3 157 p2L9cNndDtTTHn6GzGHOEg==
# cat Krndc-key.+157+32572.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: p2L9cNndDtTTHn6GzGHOEg==

接下来是用共享key配置两个域名服务器:

文件 /var/named/etc/named.conf

代码: 全选

key dns1-dns2.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "p2L9cNndDtTTHn6GzGHOEg==";
};

尽管看起来像一个域名,实际上赋予key声明的这个参数 (dns1-dns2.kernel-panic.it.) 是一个key的名字。根据RFC的建议, 它由两个使用它的主机名组合而成。 而且RFC还推荐为不同的一对主机定义不同的keys。

现在keys已经准备好了, 我们可以使用server声明的Keys分句来告诉从域名服务器将所有发送给主服务器的zone传递请求和查询都进行签名处理(leo:有点绕,实际就是用这个key来签署的意思。):

文件 /var/named/etc/named.conf

代码: 全选

server 172.16.240.154
    keys            { dns1-dns2.kernel-panic.it.; };
};

同样, 在主域名服务器这里, 我们限制zone传递信息只发送到具有这个特定key的地址:

文件 /var/named/etc/named.conf

代码: 全选

zone "kernel-panic.it" {
    type            master;
    file            "master/db.kernel-panic.it";
    allow-transfer  { key dns1-dns2.kernel-panic.it.; };
};

4.5 Logging
Bind允许对logging选项进行灵活和细致的配置。根据所包含的内容,Log信息被分成一系列类型, 而每个特定的类型log信息可以被发往用户定义的一个或多个通道(channel)。Channels 允许你指定输出目的地 (一个文件, syslogd(8) 或者 stderr), 最低的加密级别要求将一个log事件报告为 (critical, error, warning 等等),以及在log信息里包含时间、类型或者某些严重性的信息。
通道和类型的配置被放置在logging指令里; 下面是一个简单的配置实例, 这个例子中Bind将日志信息记录到local0 facility, 安全事件则写到另一个文件中 (/var/named/log/security.log),并且丢弃那些有关远程服务器配置错误的相关信息 (请参阅 文档 以更深入地了解所有类型和预定义通道):

文件 /var/named/etc/named.conf

代码: 全选

# Configure the logging options
logging {
    channel security_channel {
        # Send log messages to the specified file
        file            "log/security.log";
        # Log all messages
        severity        debug;
        # Log the date and time of the message
        print-time      yes;
        # Log the category of the message
        print-category  yes;
        # Log the severity level of the message
        print-severity  yes; 
    };
 
    channel default {
        # Send logs to the syslog 'local0' facility
        syslog          local0;
        # Log messages of severity 'info' or higher
        severity        info;
        print-category  yes;
        print-severity  yes;
    };
 
    # Logs about approval and denial of requests
    category security {
        security_channel;
        default;
    };
 
    # Ignore logs about misconfigured remote servers
    category lame-servers { null; };
 
    # Default logging options
    category default { default; };

利用local0 facility可以让Bind将log记录到一个专用的文件里, 这样可以避免搞乱常规的log文件。在向 /etc/syslog.conf(5) 里加入适合的内容后:

文件 /etc/syslog.conf

代码: 全选

[ ... ]
local0.*                                                /var/log/named.log

我们需要创建一个 log 文件,然后重新加载 syslogd(8)named(8)。我们还要创建一个 /var/named/log 目录, 需要向这里写入 security_channel的log文件:

代码: 全选

# touch /var/log/named.log
# install -m 700 -o named -g named -d /var/named/log
# pkill -HUP syslogd
# rndc reload
server reload successful
#

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD as a domain name server

帖子 leo » 2011-04-22 4:21

5. Appendix A

5.1 First draft of the configuration and zone data files

Our (modest) initial goal was to set up a couple of name servers, with a very basic configuration, and get them to do their job, without caring much about security or advanced features like delegation, dynamic update or views. Since we have only seen the configuration and zone data files in pieces, you may find it useful to have a look at them in their entirety.
5.1.1 DMZ primary master

文件 /var/named/etc/named.conf

代码: 全选

options {
    directory       "/";
};
 
zone "kernel-panic.it" {
    type            master;
    file            "master/db.kernel-panic.it";
};
 
zone "240.16.172.in-addr.arpa" {
    type            master;
    file            "master/db.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            master;
    file            "master/db.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            master;
    file            "master/db.1.2.3";
};
 
# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
 
# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
 
# Root zone
zone "." {
    type            hint;
    file            "master/root.hint";
};

文件 /var/named/master/db.kernel-panic.it

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Mail exchangers
                IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.
 
; Addresses for the canonical names
mail            IN A            172.16.240.150
proxy           IN A            172.16.240.151
www1            IN A            172.16.240.152
www2            IN A            172.16.240.153
dns1            IN A            172.16.240.154
dns2            IN A            172.16.240.155
 
mickey          IN A            172.16.0.200
                IN A            172.16.240.200
minnie          IN A            172.16.0.201
                IN A            172.16.240.201
donald          IN A            172.16.240.100
                IN A            172.16.250.100
daisy           IN A            172.16.240.101
                IN A            172.16.250.101
fw-int          IN A            172.16.0.202
                IN A            172.16.240.202
fw-ext          IN A            172.16.240.102
                IN A            172.16.250.102
 
router          IN A            172.16.250.1
                IN A            1.2.3.4
 
; Aliases
mk              IN CNAME        mickey
mn              IN CNAME        minnie
dn              IN CNAME        donald
ds              IN CNAME        daisy
fw1             IN CNAME        fw-int
fw2             IN CNAME        fw-ext
 
; Interface specific names
mk-lan          IN A            172.16.0.200
mk-dmz          IN A            172.16.240.200
mn-lan          IN A            172.16.0.201
mn-dmz          IN A            172.16.240.201
dn-dmz          IN A            172.16.240.100
dn-ext          IN A            172.16.250.100
ds-dmz          IN A            172.16.240.101
ds-ext          IN A            172.16.250.101
fw1-lan         IN A            172.16.0.202
fw1-dmz         IN A            172.16.240.202
fw2-dmz         IN A            172.16.240.102
fw2-ext         IN A            172.16.250.102
router-int      IN A            172.16.250.1
router-ext      IN A            1.2.3.4

文件 /var/named/master/db.172.16.240

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
100             IN PTR          donald.kernel-panic.it.
101             IN PTR          daisy.kernel-panic.it.
102             IN PTR          fw-ext.kernel-panic.it.
150             IN PTR          mail.kernel-panic.it.
151             IN PTR          proxy.kernel-panic.it.
152             IN PTR          www1.kernel-panic.it.
153             IN PTR          www2.kernel-panic.it.
154             IN PTR          dns1.kernel-panic.it.
155             IN PTR          dns2.kernel-panic.it.
200             IN PTR          mickey.kernel-panic.it.
201             IN PTR          minnie.kernel-panic.it.
202             IN PTR          fw-int.kernel-panic.it.

文件 /var/named/master/db.172.16.250

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          router.kernel-panic.it.
100             IN PTR          donald.kernel-panic.it.
101             IN PTR          daisy.kernel-panic.it.
102             IN PTR          fw-ext.kernel-panic.it.

文件 /var/named/master/db.1.2.3

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
4               IN PTR          router.kernel-panic.it.

文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses for the canonical names
                IN A            127.0.0.1

文件 /var/named/master/db.127.0.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          localhost.

文件 /var/named/master/db.255

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/root.hint

代码: 全选

;formerly NS.INTERNIC.NET
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
 
; formerly NS1.ISI.EDU
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
 
; formerly C.PSI.NET
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
 
; formerly TERP.UMD.EDU
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
 
; formerly NS.NASA.GOV
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
 
; formerly NS.ISC.ORG
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
 
; formerly NS.NIC.DDN.MIL
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
 
; formerly AOS.ARL.ARMY.MIL
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
 
; formerly NIC.NORDU.NET
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
 
; operated by VeriSign, Inc.
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
 
; operated by RIPE NCC
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
 
; operated by ICANN
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
 
; operated by WIDE
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33

5.1.2 DMZ secondary master

文件 /var/named/etc/named.conf

代码: 全选

options {
    directory       "/";
};
 
zone "kernel-panic.it" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.kernel-panic.it";
};
 
zone "240.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.1.2.3";
};
 
# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
 
# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
 
# Root zone
zone "." {
    type            hint;
    file            "master/root.hint";
};

文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses for the canonical names
                IN A            127.0.0.1

文件 /var/named/master/db.127.0.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          localhost.

文件 /var/named/master/db.255

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/root.hint

代码: 全选

;formerly NS.INTERNIC.NET
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
 
; formerly NS1.ISI.EDU
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
 
; formerly C.PSI.NET
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
 
; formerly TERP.UMD.EDU
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
 
; formerly NS.NASA.GOV
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
 
; formerly NS.ISC.ORG
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
 
; formerly NS.NIC.DDN.MIL
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
 
; formerly AOS.ARL.ARMY.MIL
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
 
; formerly NIC.NORDU.NET
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
 
; operated by VeriSign, Inc.
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
 
; operated by RIPE NCC
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
 
; operated by ICANN
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
 
; operated by WIDE
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33

5.2 Final version of the configuration and zone data files

Once we had our name servers working, we decided to get into the serious stuff and configure some of Bind's most useful features, like delegation, views, dynamic update and TSIG. Below are the complete final configuration and zone data files.
5.2.1 DMZ primary master

文件 /var/named/etc/named.conf

代码: 全选

/******************************************************************************
 * This is the primary master name server for the "kernel-panic.it" zone.     *
 * It accepts queries from both external and DMZ hosts, but uses different    *
 * namespaces. It accepts zone transfer requests only from the ISP's name     *
 * servers, the DMZ secondary master and the LAN name servers.                *
 ******************************************************************************/
 
/* TSIG keys ******************************************************************/
key dns1-dns2.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "7U86ip+B+SRYirLGm4lxfg==";
};
 
key dns1-dns1.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "bvVFyHOWV/YjIdBbpAJZWQ==";
};
 
key dns1-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "1sMX8Xs5zEhpekJDyyNTDA==";
};
 
/* ACLs ***********************************************************************/
acl "dmz" {
    127/8; 172.16.240/24;
};
 
acl "isp-ns" {
    1.2.3.5; 1.2.3.6;
};
 
acl "dmz-slaves" {
    key dns1-dns2.kernel-panic.it.;
};
 
acl "lan-slaves" {
    key dns1-dns1.lan.kernel-panic.it.;
    key dns1-dns2.lan.kernel-panic.it.;
};
 
/* rndc configuration *********************************************************/
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "Hp3cRzIhGLuzdPw53M2pHw==";
};
 
controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};
 
/* Options ********************************************************************/
options {
    directory       "/";
    version         "Go hack yourself!";
};
 
/* Logging ********************************************************************/
logging {
    channel security_channel {
        file            "log/security.log";
        severity        debug;
        print-time      yes;
        print-category  yes;
        print-severity  yes; 
    };
 
    channel default {
        syslog          local0;
        severity        info;
        print-category  yes;
        print-severity  yes;
    }
 
    category security {
        security_channel;
        default;
    };
 
    category lame-servers { null; };
 
    category default { default; };
};
 
/* Authoritative zones ********************************************************/
view "dmz" {
    match-clients   { "dmz"; };
    allow-transfer  { "dmz-slaves"; "lan-slaves"; };
    recursion       yes;
 
    zone "kernel-panic.it" {
        type        master;
        file        "master/db.kernel-panic.it";
    };
 
    zone "240.16.172.in-addr.arpa" {
        type        master;
        file        "master/db.172.16.240";
    };
 
    zone "250.16.172.in-addr.arpa" {
        type        master;
        file        "master/db.172.16.250";
    };
 
    zone "3.2.1.in-addr.arpa" {
        type        master;
        file        "master/db.1.2.3";
    };
 
    # Loopback address
    zone "localhost" {
        type        master;
        file        "master/db.localhost";
    };
 
    zone "0.0.127.in-addr.arpa" {
        type        master;
        file        "master/db.127.0.0";
    };
 
    # Special zones
    zone "255.in-addr.arpa" {
        type        master;
        file        "master/db.255";
    };
 
    zone "0.in-addr.arpa" {
        type        master;
        file        "master/db.0";
    };
 
    # Root zone
    zone "." {
        type        hint;
        file        "master/root.hint";
    };
};
 
view "internet" {
    match-clients   { any; };
    allow-transfer  { "isp-ns"; };
    recursion       no;
 
    zone "kernel-panic.it" {
        type        master;
        file        "master/db.kernel-panic.it.shadow";
    };
 
    zone "3.2.1.in-addr.arpa" {
        type        master;
        file        "master/db.1.2.3.shadow";
    };
};

文件 /var/named/etc/rndc.conf

代码: 全选

options {
    default-server  localhost;
    default-port    953;
    default-key     "rndc-key";
};
 
server localhost {
    key             "rndc-key";
};
 
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "Hp3cRzIhGLuzdPw53M2pHw==";
};

文件 /var/named/master/db.kernel-panic.it

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Mail exchangers
                IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.
 
; Delegated zone
lan             IN NS           dns1.lan.kernel-panic.it.
                IN NS           dns2.lan.kernel-panic.it.
 
dns1.lan        IN A            172.16.0.161
dns2.lan        IN A            172.16.0.162
 
; Addresses for the canonical names
mail            IN A            172.16.240.150
proxy           IN A            172.16.240.151
www1            IN A            172.16.240.152
www2            IN A            172.16.240.153
dns1            IN A            172.16.240.154
dns2            IN A            172.16.240.155
 
mickey          IN A            172.16.0.200
                IN A            172.16.240.200
minnie          IN A            172.16.0.201
                IN A            172.16.240.201
donald          IN A            172.16.240.100
                IN A            172.16.250.100
daisy           IN A            172.16.240.101
                IN A            172.16.250.101
fw-int          IN A            172.16.0.202
                IN A            172.16.240.202
fw-ext          IN A            172.16.240.102
                IN A            172.16.250.102
 
router          IN A            172.16.250.1
                IN A            1.2.3.4
 
; Aliases
mk              IN CNAME        mickey
mn              IN CNAME        minnie
dn              IN CNAME        donald
ds              IN CNAME        daisy
fw1             IN CNAME        fw-int
fw2             IN CNAME        fw-ext
 
; Interface specific names
mk-lan          IN A            172.16.0.200
mk-dmz          IN A            172.16.240.200
mn-lan          IN A            172.16.0.201
mn-dmz          IN A            172.16.240.201
dn-dmz          IN A            172.16.240.100
dn-ext          IN A            172.16.250.100
ds-dmz          IN A            172.16.240.101
ds-ext          IN A            172.16.250.101
fw1-lan         IN A            172.16.0.202
fw1-dmz         IN A            172.16.240.202
fw2-dmz         IN A            172.16.240.102
fw2-ext         IN A            172.16.250.102
router-int      IN A            172.16.250.1
router-ext      IN A            1.2.3.4

文件 /var/named/master/db.172.16.240

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
100             IN PTR          donald.kernel-panic.it.
101             IN PTR          daisy.kernel-panic.it.
102             IN PTR          fw-ext.kernel-panic.it.
150             IN PTR          mail.kernel-panic.it.
151             IN PTR          proxy.kernel-panic.it.
152             IN PTR          www1.kernel-panic.it.
153             IN PTR          www2.kernel-panic.it.
154             IN PTR          dns1.kernel-panic.it.
155             IN PTR          dns2.kernel-panic.it.
200             IN PTR          mickey.kernel-panic.it.
201             IN PTR          minnie.kernel-panic.it.
202             IN PTR          fw-int.kernel-panic.it.

文件 /var/named/master/db.172.16.250

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          router.kernel-panic.it.
100             IN PTR          donald.kernel-panic.it.
101             IN PTR          daisy.kernel-panic.it.
102             IN PTR          fw-ext.kernel-panic.it.

文件 /var/named/master/db.1.2.3

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Mail exchangers
                IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.
 
; Addresses (pointing to canonical names)
4               IN PTR          router.kernel-panic.it.

文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses for the canonical names
                IN A            127.0.0.1

文件 /var/named/master/db.127.0.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          localhost.

文件 /var/named/master/db.255

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.kernel-panic.it.shadow

代码: 全选

$TTL 1d
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns.kernel-panic.it.
                IN NS           dns.provider.com.
 
; Mail exchangers
                IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.
 
; Addresses for the canonical names
                IN A            1.2.3.4
 
; Aliases
www             IN CNAME        kernel-panic.it.
mail            IN CNAME        kernel-panic.it.
dns             IN CNAME        kernel-panic.it.
 
; Deault mail exchangers
*               IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.

文件 /var/named/master/db.1.2.3.shadow

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns.provider.com.
 
; Addresses (pointing to canonical names)
4               IN PTR          kernel-panic.it.

5.2.2 DMZ secondary master

文件 /var/named/etc/named.conf

代码: 全选

/******************************************************************************
 * This is the secondary master name server for the "kernel-panic.it" zone.   *
 * It accepts queries only from DMZ hosts and zone transfer requests from the *
 * ISP's name servers and the LAN name servers.                               *
 ******************************************************************************/
 
/* TSIG keys ******************************************************************/
key dns1-dns2.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "7U86ip+B+SRYirLGm4lxfg==";
};
 
key dns2-dns1.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "uyUkoNVWKxah/Zr+Xcd8vQ==";
};
 
key dns2-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "Y2hqf7mCvqnQf8UFOJ2CyA==";
};
 
server 172.16.240.154 {
    keys            { dns1-dns2.kernel-panic.it.; };
};
 
/* ACLs ***********************************************************************/
acl "dmz" {
    127/8; 172.16.240/24;
};
 
acl "isp-ns" {
    1.2.3.5; 1.2.3.6;
};
 
acl "lan-slaves" {
    key dns2-dns1.lan.kernel-panic.it.;
    key dns2-dns2.lan.kernel-panic.it.;
};
 
/* rndc configuration *********************************************************/
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "3F5oVjZ2fRE/7x2NPy8rZA==";
};
 
controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};
 
/* Options ********************************************************************/
options {
    directory       "/";
    version         "Go hack yourself!";
    allow-query     { "dmz"; };
    allow-transfer  { "isp-ns"; "lan-slaves"; };
    recursion       yes;
};
 
/* Logging ********************************************************************/
logging {
    channel security_channel {
        file            "log/security.log";
        severity        debug;
        print-time      yes;
        print-category  yes;
        print-severity  yes; 
    };
 
    channel default {
        syslog          local0;
        severity        info;
        print-category  yes;
        print-severity  yes;
    }
 
    category security {
        security_channel;
        default;
    };
 
    category lame-servers { null; };
 
    category default { default; };
};
 
/* Authoritative zones ********************************************************/
zone "kernel-panic.it" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.kernel-panic.it";
};
 
zone "240.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; };
    file            "slave/bak.1.2.3";
};
 
# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
 
# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
 
# Root zone
zone "." {
    type            hint;
    file            "master/root.hint";
};

文件 /var/named/etc/rndc.conf

代码: 全选

options {
    default-server  localhost;
    default-port    953;
    default-key     "rndc-key";
};
 
server localhost {
    key             "rndc-key";
};
 
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "3F5oVjZ2fRE/7x2NPy8rZA==";
};

文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses for the canonical names
                IN A            127.0.0.1

/var/named/master/db.127.0.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          localhost.

文件 /var/named/master/db.255

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

5.2.3 LAN primary master

文件 /var/named/etc/named.conf

代码: 全选

/******************************************************************************
 * This is the primary master name server for the "lan.kernel-panic.it" zone  *
 * and a secondary master name server for the "kernel-panic.it" zone.         *
 * It accepts queries from internal hosts and zone transfers requests only    *
 * from the LAN secondary master. The DHCP server can dynamically update      *
 * clients resource records.                                                  *
 ******************************************************************************/
 
/* TSIG keys ******************************************************************/
key dns1-dns1.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "bvVFyHOWV/YjIdBbpAJZWQ==";
};
 
key dns2-dns1.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "uyUkoNVWKxah/Zr+Xcd8vQ==";
};
 
key dns1.lan-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "Cn0Xj2v6u7CGNeRSIfS1JQ==";
};
 
key dns1.lan-dhcp.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "9+MU2qJwwl9nk7ptG84kpQ==";
};
 
server 172.16.240.154 {
    keys            { dns1-dns1.lan.kernel-panic.it.; };
};
 
server 172.16.240.155 {
    keys            { dns2-dns1.lan.kernel-panic.it.; };
};
 
/* ACLs ***********************************************************************/
acl "dmz" {
    172.16.240/24;
};
 
acl "lan" {
    127/8; 172.16.0/24;
};
 
acl "lan-slaves" {
    key dns1.lan-dns2.lan.kernel-panic.it.;
};
 
/* rndc configuration *********************************************************/
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "D6P3H5E+cWyeuSVEMZH5+Q==";
};
 
controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};
 
/* Options ********************************************************************/
options {
    directory       "/";
    version         "Go hack yourself!";
    allow-query     { "dmz"; "lan"; };
    allow-transfer  { "lan-slaves"; };
    recursion       no;
};
 
/* Logging ********************************************************************/
logging {
    channel security_channel {
        file            "log/security.log";
        severity        debug;
        print-time      yes;
        print-category  yes;
        print-severity  yes; 
    };
 
    channel default {
        syslog          local0;
        severity        info;
        print-category  yes;
        print-severity  yes;
    }
 
    category security {
        security_channel;
        default;
    };
 
    category lame-servers { null; };
 
    category default { default; };
};
 
/* Authoritative zones ********************************************************/
zone "lan.kernel-panic.it" {
    type            master;
    file            "master/db.lan.kernel-panic.it";
    update-policy   { grant dns1.lan-dhcp.lan.kernel-panic.it.
                            subdomain lan.kernel-panic.it. A; };
    notify          yes;
};
 
zone "0.16.172.in-addr.arpa" {
    type            master;
    file            "master/db.172.16.0";
};
 
zone "kernel-panic.it" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.kernel-panic.it";
};
 
zone "240.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.172.16.240";
};
 
zone "250.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.172.16.250";
};
 
zone "3.2.1.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.1.2.3";
};
 
# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};
 
zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};
 
# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};
 
zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};

文件 /var/named/etc/rndc.conf

代码: 全选

options {
    default-server  localhost;
    default-port    953;
    default-key     "rndc-key";
};
 
server localhost {
    key             "rndc-key";
};
 
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "D6P3H5E+cWyeuSVEMZH5+Q==";
};

文件 /var/named/master/db.lan.kernel-panic.it

代码: 全选

$TTL 3h
 
@ IN SOA dns1.lan.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.lan.kernel-panic.it.
                IN NS           dns2.lan.kernel-panic.it.
 
; Mail exchangers
                IN MX   0       mail.kernel-panic.it.
                IN MX   10      mail.provider.com.
 
; Addresses for the canonical names
file            IN A            172.16.0.160
dns1            IN A            172.16.0.161
dns2            IN A            172.16.0.162
dhcp            IN A            172.16.0.163

文件 /var/named/master/db.172.16.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.lan.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.lan.kernel-panic.it.
                IN NS           dns2.lan.kernel-panic.it.
 
; Addresses (pointing to canonical names)
160             IN PTR          file.lan.kernel-panic.it.
161             IN PTR          dns1.lan.kernel-panic.it.
162             IN PTR          dns2.lan.kernel-panic.it.
163             IN PTR          dhcp.lan.kernel-panic.it.
200             IN PTR          mickey.kernel-panic.it.
201             IN PTR          minnie.kernel-panic.it.
202             IN PTR          fw-int.kernel-panic.it.

文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
 
; Addresses for the canonical names
                IN A            127.0.0.1

文件 /var/named/master/db.127.0.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.lan.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.lan.kernel-panic.it.
                IN NS           dns2.lan.kernel-panic.it.
 
; Addresses (pointing to canonical names)
1               IN PTR          localhost.

文件 /var/named/master/db.255

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

文件 /var/named/master/db.0

代码: 全选

$TTL 3h
 
@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour
 
; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

5.2.4 LAN secondary master

文件 /var/named/etc/named.conf

代码: 全选

/******************************************************************************
 * This is a secondary master name server for the "lan.kernel-panic.it" and   *
 * "kernel-panic.it" zones. It accepts queries only from internal hosts.      *
 ******************************************************************************/

/* TSIG keys ******************************************************************/
key dns1-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "1sMX8Xs5zEhpekJDyyNTDA==";
};

key dns2-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "Y2hqf7mCvqnQf8UFOJ2CyA==";
};

key dns1.lan-dns2.lan.kernel-panic.it. {
    algorithm       hmac-md5;
    secret          "Cn0Xj2v6u7CGNeRSIfS1JQ==";
};

server 172.16.240.154 {
    keys            { dns1-dns2.lan.kernel-panic.it.; };
};

server 172.16.240.155 {
    keys            { dns2-dns2.lan.kernel-panic.it.; };
};

server 172.16.0.161 {
    keys            { dns1.lan-dns2.lan.kernel-panic.it.; };
};

/* ACLs ***********************************************************************/
acl "dmz" {
    172.16.240/24;
};

acl "lan" {
    127/8; 172.16.0/24;
};

/* rndc configuration *********************************************************/
key "rndc-key" {
    algorithm       hmac-md5;
    secret          "vb5zPXhAfsJx+5zl4cC5Xg==";
};

controls {
    inet            127.0.0.1 port 953
                    allow { 127.0.0.1; }
                    keys { "rndc-key"; };
};

/* Options ********************************************************************/
options {
    directory       "/";
    version         "Go hack yourself!";
    allow-query     { "dmz"; "lan"; };
    allow-transfer  { none; };
    recursion       no;
};

/* Logging ********************************************************************/
logging {
    channel security_channel {
        file            "log/security.log";
        severity        debug;
        print-time      yes;
        print-category  yes;
        print-severity  yes; 
    };

    channel default {
        syslog          local0;
        severity        info;
        print-category  yes;
        print-severity  yes;
    }

    category security {
        security_channel;
        default;
    };

    category lame-servers { null; };

    category default { default; };
};

/* Authoritative zones ********************************************************/
zone "lan.kernel-panic.it" {
    type            slave;
    masters         { 172.16.0.161; };
    file            "slave/bak.lan.kernel-panic.it";
};

zone "0.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.0.161; };
    file            "slave/bak.172.16.0";
};

zone "kernel-panic.it" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.kernel-panic.it";
};

zone "240.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.172.16.240";
};

zone "250.16.172.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.172.16.250";
};

zone "3.2.1.in-addr.arpa" {
    type            slave;
    masters         { 172.16.240.154; 172.16.240.155; };
    file            "slave/bak.1.2.3";
};

# Loopback address
zone "localhost" {
    type            master;
    file            "master/db.localhost";
};

zone "0.0.127.in-addr.arpa" {
    type            master;
    file            "master/db.127.0.0";
};

# Special zones
zone "255.in-addr.arpa" {
    type            master;
    file            "master/db.255";
};

zone "0.in-addr.arpa" {
    type            master;
    file            "master/db.0";
};
文件 /var/named/etc/rndc.conf

代码: 全选

options {
    default-server  localhost;
    default-port    953;
    default-key     "rndc-key";
};

server localhost {
    key             "rndc-key";
};

key "rndc-key" {
    algorithm       hmac-md5;
    secret          "vb5zPXhAfsJx+5zl4cC5Xg==";
};
文件 /var/named/master/db.localhost

代码: 全选

$TTL 3h

@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour

; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

; Addresses for the canonical names
                IN A            127.0.0.1
文件 /var/named/master/db.127.0.0

代码: 全选

$TTL 3h

@ IN SOA dns1.lan.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour

; Name servers
                IN NS           dns1.lan.kernel-panic.it.
                IN NS           dns2.lan.kernel-panic.it.

; Addresses (pointing to canonical names)
1               IN PTR          localhost.
文件 /var/named/master/db.255

代码: 全选

$TTL 3h

@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour

; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.
文件 /var/named/master/db.0

代码: 全选

$TTL 3h

@ IN SOA dns1.kernel-panic.it. danix.kernel-panic.it. (
        2007020601 ; serial
        3h         ; refresh after 3 hours
        1h         ; retry after 1 hour
        1w         ; expire after 1 week
        1h )       ; negative caching TTL of 1 hour

; Name servers
                IN NS           dns1.kernel-panic.it.
                IN NS           dns2.kernel-panic.it.

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD as a domain name server

帖子 leo » 2011-04-22 4:22

6. Appendix B

6.1 References
  • [RFC1034] - RFC 1034 - Domain names - concepts and facilities
  • [RFC1035] - RFC 1035 - Domain names - implementation and specification
  • [RFC1912] - RFC 1912 - Common DNS Operational and Configuration Errors
  • [RFC2136] - RFC 2136 - Dynamic Updates in the Domain Name System (DNS UPDATE)
  • [RFC2845] - RFC 2845 - Secret Key Transaction Authentication for DNS (TSIG)
  • [DNS&BIND] - DNS and BIND, Fifth Edition, Paul Albitz and Cricket Liu, O'Reilly, 2006
6.2 Bibliography

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD as a domain name server

帖子 leo » 2011-04-22 20:25

done!:)

qinjuan
铝 Al
帖子: 10
注册时间: 2011-02-26 8:47

回复: 在OpenBSD上搭建域名服务器(DNS)

帖子 qinjuan » 2011-09-01 15:27

咨询一个问题,您搭建的DNS服务器有没有出现这样的情况,假设DNS地址为192.168.0.1,在/etc/resolv.conf中添加nameserver 192.168.0.1,traceroute 192.168.0.1时,或者其它机器时,会存在10s以上的延时

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客