在OpenBSD上搭建域名服务器(DNS)
在OpenBSD上搭建域名服务器(DNS)
原文链接:
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有一个基本的了解, 因为这里不会涵盖如何安装和配置操作系统。
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有一个基本的了解, 因为这里不会涵盖如何安装和配置操作系统。
回复: OpenBSD as a domain name server
拖了一年了,实在不好意思,今天重新捡起来,争取尽快做完。
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内的域名解析)。有两种类型的域名服务器:
2.2 域名解析过程
访问域名服务器的客户端被称为resolvers。在Bind里, 这个resolver只是一个library,它必须被发送域名服务查询的应用来链接。当一个应用需要一个域名空间的信息时, 它会用这个resolver来发送一个请求给DNS服务器 (一般是公司或ISP的服务器)。如果dns服务器对查询的zone具有权威性(leo:也就是说dns服务器全权负责该zone的域名解析) , 这个DNS服务器将马上给出结果; 否则, 它将搜索整个域名空间以找出查询的数据。这个过程被称为域名解析。
有两类DNS查询:
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]
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。
2.2 域名解析过程
访问域名服务器的客户端被称为resolvers。在Bind里, 这个resolver只是一个library,它必须被发送域名服务查询的应用来链接。当一个应用需要一个域名空间的信息时, 它会用这个resolver来发送一个请求给DNS服务器 (一般是公司或ISP的服务器)。如果dns服务器对查询的zone具有权威性(leo:也就是说dns服务器全权负责该zone的域名解析) , 这个DNS服务器将马上给出结果; 否则, 它将搜索整个域名空间以找出查询的数据。这个过程被称为域名解析。
有两类DNS查询:
- 迭代的 (或者不递归的), 只向dns服务区索要一个它已知的最佳的答案;
- 递归的, 要求DNS服务器对查询给出一个确切的结果,或者返回一个错误。
- resolver向你公司的DNS服务器发起一个迭代查询, 它希望得到这个 "www.kernel-panic.it" web服务器的IP地址 (或者返回一个错误信息) ;
- 因为你们公司的DNS服务器对所请求zone的没有权威性, 它将向一个root域名服务器发送一个迭代的查询,索要域名 "www.kernel-panic.it" 的IP地址, 这里所说的root域名服务器也就是13台全球DNS服务器中的一台,它知道所有顶级域的权威服务器;
- 被查询的root域名服务器有可能不知道确切的答案, 但是它肯定知道哪些服务器 对"it" zone具有权威性。因此它告诉你们公司的DNS服务器那些权威服务器的地址;
- 你们公司的DNS服务器将选择其中之一,并向其发送同样的迭代查询,也就是索要 "www.kernel-panic.it" 域名的IP地址;
- 被查询的这个 "it" 域名服务器也有可能不清楚确切的地址,因此向你们公司的DNS服务器提供一个其所知的 "kernel-panic.it" zone的权威服务器清单;
- 你们公司的DNS服务器最终知道了 "kernel-panic.it" zone 的权威服务器清单,并将同样的请求发送给其中的一台权威服务器;
- 被请求的权威服务器将域名 "www.kernel-panic.it" 的IP地址告诉你们公司的dns服务器;
- 最终你们公司的域名服务器就可以将该信息告诉发送查询的resolver。
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]
3. 基本配置
3. 基本配置
现在我们对域名服务系统的构架有了一定认识, 现在是将理论应用到实践中时候了,我们要设置我们的第一个域名服务器。
这是我们的域名服务器的工作环境。这是一个很简单的网络, 有下列部分构成:
3.1 主配置文件
Bind的配置文件是 named.conf(5) , 默认情况下在 /var/named/etc/。当然, 你也可以用 named(8) 命令的 -c 参数来指定另一个路径。
配置语法相当简单: 它是由包含在大括号内以分号作为终止的一系列声明。 声明里都包含了一个以分号终止的形式为 keyword/value 的变量。支持如下的注释风格:
这里的 "zone" 声明告诉Bind它是那些zone的权威; 对每个 zone 来说, 这里的 "type" 分句指定了该服务器为其主/从服务器,而 "file" 分句指定了相应的zone数据文件的路径。例如:
zone数据文件的名字可以是随意的, 但是我们强烈推荐使用一个有意义的名字,这样便于今后维护管理。例如, zone数据文件经常被命名为 db.domain。
要允许 域名反向解析, 我们还要为每个网络创建zone数据文件:
域名服务器还需要将loopback地址映射到一个域名上。因此, 我们不得不为"localhost" zone 和 127.0.0.0/8 网络创建特定的zone数据文件:
[RFC1912] 还推荐在域名服务器配置里一定要提供 "255.in-addr.arpa" 和 "0.in-addr.arpa" 这两个zone,这样既可以为“特殊的”地址提供域名服务,也可以帮助避免类似将广播或者本地地址发送到root域名服务器查询这样的意外情况的出现:
最后, 如果要这个域名服务器可以解析Internet上的域名,我们必须给其提供一份root域名服务器的清单,这些清单使用一个hint zone来指定。
你可以在 /var/named/etc 目录下找到一份 root.hint 的拷贝文件。
3.2 zone数据文件
Zone数据文件包含了这些zone和其权威服务器的信息, 而且根据Bind配置, 它们应该在目录 /var/named/master/ 内。
一般, zone数据文件的第一行为zone设置了默认的 TTL , 也就是允许其它的DNS服务器或者应用程序在多长的时间内cache(临时保存)这个记录。
一个zone数据文件内可能有包含多个 $TTL 声明: 它们中的每一个都应用到后面的记录里 (那些没有明确包含一个 TTL 的记录) 直到下一个新的 $TTL 声明修改了这个值。你也许想调整这个值以便在带宽和数据更新之间作出一个最佳的权衡。
zone数据文件的下一个项目是SOA记录, 这个选项指定了该zone的权威服务器。
我们详细解释一下。这里的 "@" 符号指定了权威服务器服务的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的权威服务器。
一个资源在记录的第一个区块表示其名字,且必须从第一列开始写; 如果与前一项相同,这里也可以不写。因此, 上面的NS记录也可以简写为:
这里的MX记录允许你指定为这个域名管理邮件的主机; 这个记录有一个额外的参数, 一个16位数字,它表示邮件交换程序的优先权(数值越低优先权越高)。
下一个记录是 "A", 它指定正向映射的数据文件, 因此其关联域名及其IP地址。
这里的CNAME记录将一个别名映射为规范名; 换句话说, 它定义了一个域名,该域名指到域名空间上另一节点上。
好, 我们已经完成了正向映射(forward-mapping); 现在我们看一下反向映射(reverse-mapping)的zone数据文件。开始处完全一样: 你需要设置默认的TTL ,然后插入我们前面介绍过的SOA和NS记录。接下来是PTR记录, 该记录将地址映射到主机名上; 嗯, 更严谨的说法是, 它们将 in-addr.arpa 里的域内的域名映射为 kernel-panic.it 域内的域名。在强调一次, 这里的起源自动附加到那些不以“.”结尾的所有的域名, 允许你指定IP地址的最后一个8位元。
文件 /var/named/master/db.172.16.240
要概括一下, 参看第五小节,那有完整zone数据文件。
3.3 启动
运行Bind只需要键入 "named"。如果你是第一次运行, 你也许想带上参数 -g , 这个参数使服务器在前端运行并且强制所有的log记录到stderr。
你也许看到警告’域名服务器无法找到文件 /etc/rndc.key : 别理它, 我们在4.5小节里会讨论 rndc(8) 。 在此情况下 named(8) 会抱怨有语法错误, 你可以用 named-checkconf(8) 和 named-checkzone(8) 命令来分别检查Bind配置文件和zone数据文件的的语法。
如果看起来一切无误, 你可以用 nslookup(1) 或者 dig(1) 测试一下你全新的域名服务器了。
要在系统启动时自动启动Bind, 将下列行加入到 /etc/rc.conf.local 文件:
3.4 rndc(8)
rndc(8) 工具允许你与域名服务器之间通讯并且通过TCP连接向其发送经验证的命令。 它从 rndc.conf(5) 文件读取其配置 (该文件默认在 /var/named/etc/), 语法类似于 named.conf(5)。下面一个从本地网络连接到服务器的一个配置文件的例子:
文件 /var/named/etc/rndc.conf
要让域名服务器接受来自 rndc(8) 的连接, 只需将下列行加入你的 named.conf(5) 文件 (请根据需要调整允许的清单):
文件 /var/named/etc/named.conf
要让域名服务器接受来自 rndc(8) 的连接, 只需将下列行加入你的 named.conf(5) 文件 (请根据需要调整允许的清单):
文件 /var/named/etc/named.conf
如果你想简单一些, 你可以用 rndc-confgen(8) 程序自动生成 rndc(8) 的配置文件。
3.5 增加一个从域名服务器
现在你的primary master域名服务器运行良好, 你也许想设置一个从域名服务器以便实现冗余和负载均衡。配置Bind很类似:
文件 /var/named/etc/named.conf
对所有zone来说从域名服务器都具有权威性 (除了 loopback 地址和那些 "special" zones) ,type区块这里输入slave。我们还需要增加 masters 分句来告诉Bind 那些primary master域名服务器的地址。zone文件里你提供的type为slave的文件名是用来告诉bind从哪里获取主域名服务器传送过来的数据。这种情况下, 应该是主域名服务器在系统启动后无法访问, 但是Bind仍旧有一份该数据的本地拷贝。
现在我们对域名服务系统的构架有了一定认识, 现在是将理论应用到实践中时候了,我们要设置我们的第一个域名服务器。
这是我们的域名服务器的工作环境。这是一个很简单的网络, 有下列部分构成:
- 一个 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。
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 runs chrooted to "/var/named/", hence "/" actually is "/var/named/"
directory "/";
};
代码: 全选
zone "kernel-panic.it" {
type master;
file "master/db.kernel-panic.it";
};
要允许 域名反向解析, 我们还要为每个网络创建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";
};
代码: 全选
zone "localhost" {
type master;
file "master/db.localhost";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "master/db.127.0.0";
};
代码: 全选
zone "255.in-addr.arpa" {
type master;
file "master/db.255";
};
zone "0.in-addr.arpa" {
type master;
file "master/db.0";
};
代码: 全选
zone "." {
type hint;
file "master/root.hint";
};
3.2 zone数据文件
Zone数据文件包含了这些zone和其权威服务器的信息, 而且根据Bind配置, 它们应该在目录 /var/named/master/ 内。
一般, zone数据文件的第一行为zone设置了默认的 TTL , 也就是允许其它的DNS服务器或者应用程序在多长的时间内cache(临时保存)这个记录。
代码: 全选
$TTL 3h
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
代码: 全选
IN NS dns1.kernel-panic.it.
IN NS dns2.kernel-panic.it.
代码: 全选
IN MX 0 mail.kernel-panic.it.
IN MX 10 mail.provider.com.
代码: 全选
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.
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==";
};
文件 /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";
};
4. Bind的高级配置
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
接下来将 views 加入到 named.conf(5) 里,而且为每个view指定不同的zone数据文件。
文件 /var/named/etc/named.conf
下面是影子zone数据文件:
文件 /var/named/master/db.kernel-panic.it.shadow
文件 /var/named/master/db.1.2.3.shadow
也许你注意到了, 为提高DNS服务的性能, 我们已经设置了一个额外的由ISP提供的域名服务器, 单独包含了影子空间的信息。
4.2 委托
至此, 我们只考虑了DMZ服务器: 现在是时候考虑LAN域名服务器了。我们看一下它是如何关联其它主机的:
在父系那里, 我们仅简单地增加一些合适的NS记录以及相关的A记录:
文件 /var/named/master/db.kernel-panic.it
被委托的域名服务器只需用 常规的方式 创建合适的配置文件和zone数据文件。你可以在 这里 找到完整的文件。
4.3 动态更新和提醒
但是启用了DHCP的客户端怎么办? Bind可以将域名映射到动态IP地址上吗? 答案自然是“当然可以”! Bind支持动态更新 (参看[RFC2136]), 在IP地址发生变化时DHCP服务器可以自动 添加/删除/修改 资源记录。配置也很简单:
文件 /var/named/etc/named.conf
这个allow-update分句指定了运行更新zone的一份IP地址清单 (通常只有DHCP 服务器)。它也接受一个 ACL name 或者一个 TSIG key (参看下面以获取更多的信息)。 例如:
文件 /var/named/etc/named.conf
这里的notify分句告诉Bind发送一份通知到该zone的每个从域名服务器,通知它们zone数据已经变化了。这让Bind可以将主从服务器间的同步延迟降至最低。动态更新和DNS通知协作工作的效果很好, 因为Bind 9在每次更新后自动增加zone的serial数值,而这个数值的增加正好触发了zone变化通知功能。
除了allow-update, Bind 9 还支持 update-policy 分句, 它允许通过一个经认证的更新key来严格地控制更新特定的zone。例如:
文件 /var/named/etc/named.conf
请参开 官方文档 以了解update-policy语法的更多细节。
4.4 TSIG和安全
到目前为止, 我们仅考虑了如何让系统各部分平稳地运行, 并没有深入地探讨安全问题安全。但是我们需要意识到有部分域名服务器必须暴露在Internet上,因此安全问题不容忽视。在OpenBSD系统上已经实施了最基本的安全方案: Bind以一个没有特权的用户 "named"的身份来运行,并且被chrooted在 /var/named 目录里。这样就更难利用新发现的系统漏洞来攻击它。
另一个重要的安全策略是隐藏Bind的版本号, 这不过是为了增加一些攻击难度。
文件 /var/named/etc/named.conf
我们已经见识了 views 和 acls 怎样帮助处理NAT和防火墙, 但是他们也可以提供很棒的安全特性, 因为它们可以让你制定哪些主机可以访问哪些信息。例如, 例如在一个view里使用recursion substatement (或者在statement选项里使用 allow-recursion分句), 你可以制定哪些主机可以向你的域名服务器请求递归查询。这可以让你防范一些常见的欺骗攻击 (参 [DNS&BIND])。
文件 /var/named/etc/named.conf
除了recursion, Bind也允许你分别使用allow-query和allow-transfer分句来限制查询和zone传递。如果被用于zone声明中,则这些分句只应用于某个特定zone,如果用在Option声明里则应用于全局。例如:
文件 /var/named/etc/named.conf
利用acls和地址匹配清单来限制zone传递实际上等同于聊胜于无,不过使用交易签名或者TSIG (参 [RFC2845])则被认为稍好一些。TSIG允许DNS服务器验证DNS信息, 它使用共享的加密 (TSIG keys) 和一个单向的哈希函数 (HMAC-MD5)。
TSIG的配置很简单。第一个步骤是创建共享 key(s): 最简单的方式是用 dnssec-keygen(8) 程序, 它产生的两个文件都包含了这个key
接下来是用共享key配置两个域名服务器:
文件 /var/named/etc/named.conf
尽管看起来像一个域名,实际上赋予key声明的这个参数 (dns1-dns2.kernel-panic.it.) 是一个key的名字。根据RFC的建议, 它由两个使用它的主机名组合而成。 而且RFC还推荐为不同的一对主机定义不同的keys。
现在keys已经准备好了, 我们可以使用server声明的Keys分句来告诉从域名服务器将所有发送给主服务器的zone传递请求和查询都进行签名处理(leo:有点绕,实际就是用这个key来签署的意思。):
文件 /var/named/etc/named.conf
同样, 在主域名服务器这里, 我们限制zone传递信息只发送到具有这个特定key的地址:
文件 /var/named/etc/named.conf
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
利用local0 facility可以让Bind将log记录到一个专用的文件里, 这样可以避免搞乱常规的log文件。在向 /etc/syslog.conf(5) 里加入适合的内容后:
文件 /etc/syslog.conf
我们需要创建一个 log 文件,然后重新加载 syslogd(8) 和 named(8)。我们还要创建一个 /var/named/log 目录, 需要向这里写入 security_channel的log文件:
那么我们有两台域名服务器了, 目前都工作的不错,而且现在允许我们通过域名定位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;
};
文件 /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.
代码: 全选
$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服务器应该能解析内部和外部的域名。
在父系那里, 我们仅简单地增加一些合适的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;
};
除了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!";
};
我们已经见识了 views 和 acls 怎样帮助处理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
#
回复: OpenBSD as a domain name server
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
文件 /var/named/master/db.kernel-panic.it
文件 /var/named/master/db.172.16.240
文件 /var/named/master/db.172.16.250
文件 /var/named/master/db.1.2.3
文件 /var/named/master/db.localhost
文件 /var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
文件 /var/named/master/root.hint
5.1.2 DMZ secondary master
文件 /var/named/etc/named.conf
文件 /var/named/master/db.localhost
文件 /var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
文件 /var/named/master/root.hint
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
文件 /var/named/etc/rndc.conf
文件 /var/named/master/db.kernel-panic.it
文件 /var/named/master/db.172.16.240
文件 /var/named/master/db.172.16.250
文件 /var/named/master/db.1.2.3
文件 /var/named/master/db.localhost
文件 /var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
文件 /var/named/master/db.kernel-panic.it.shadow
文件 /var/named/master/db.1.2.3.shadow
5.2.2 DMZ secondary master
文件 /var/named/etc/named.conf
文件 /var/named/etc/rndc.conf
文件 /var/named/master/db.localhost
/var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
5.2.3 LAN primary master
文件 /var/named/etc/named.conf
文件 /var/named/etc/rndc.conf
文件 /var/named/master/db.lan.kernel-panic.it
文件 /var/named/master/db.172.16.0
文件 /var/named/master/db.localhost
文件 /var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
5.2.4 LAN secondary master
文件 /var/named/etc/named.conf
文件 /var/named/etc/rndc.conf
文件 /var/named/master/db.localhost
文件 /var/named/master/db.127.0.0
文件 /var/named/master/db.255
文件 /var/named/master/db.0
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";
};
代码: 全选
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==";
};
代码: 全选
$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
代码: 全选
$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.
代码: 全选
$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.
代码: 全选
$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.
回复: OpenBSD as a domain name server
6. Appendix B
6.1 References
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
回复: 在OpenBSD上搭建域名服务器(DNS)
咨询一个问题,您搭建的DNS服务器有没有出现这样的情况,假设DNS地址为192.168.0.1,在/etc/resolv.conf中添加nameserver 192.168.0.1,traceroute 192.168.0.1时,或者其它机器时,会存在10s以上的延时
在线用户
正浏览此版面之用户: 没有注册用户 和 1 访客