CentOS上配置主DNS服务器的简易指南

CentOS上配置主DNS服务器的简易指南任何运作中的域名至少有两台DNS服务器,一台称为主域名服务器(比如叫做ns1),而另一台称为从域名服务器(比如叫做ns2)。这些服务器通常用于故障转移:如果一台宕机,另外一台就激活成为DNS服务器(译注:此处译者有不同意见,事实上两个或更多的DNS服务器是共同工作的,并不是第一台停止服务后,第二台才接替工作。解析器是随机选择一个DNS服务器进行询问,如果超时则会询问下一个,这是多个DNS的故障容错机制)。也可以实现包括负载均衡、防火墙和集群在内的更为复杂的故障转移机制。

一个域的所有DNS条目都会被添加到主域名服务器,从服务器只会根据主服务器上的SOA记录的序列号参数从主服务器同步所有信息。

此教程将会讲述如何创建一台在CentOS上运行的主DNS服务器。请注意,本教程中提到的DNS服务器将会是一台开放DNS服务器,这也就是说该服务器将会回应来自任何IP地址的查询。对于DNS服务器的访问控制将在此教程中讨论(译注:开放的DNS服务器是一个安全隐患)。

在开始之前,我想要提一下的是,DNS可以在chroot环境中配置,也可以在非chroot环境中配置。chroot环境将DNS服务器限制在系统中某个特定目录中,以避免让服务器具有系统级的访问权限。在此环境中,任何DNS服务器的安全漏洞不会导致整个系统的破坏。将DNS服务器置于chroot环境中,对于部署测试也很有用。

目标

我们将在基于域名example.tst的测试环境中配置一台DNS服务器,这个域名是虚假的(并不真实存在的)。这样,我们就不会意外干扰到其它真实的域名。

在该域中,有以下三台服务器。

服务器 IP地址 托管的服务 完全限定域名(FQDN)
Server A 172.16.1.1 Mail mail.example.tst
Server B 172.16.1.2 Web, FTP www.example.tst
ftp.example.tst
Server C 172.16.1.3 Primary DNS server ns1.example.tst

我们将会配置一台主域名服务器,并添加上表中必要的域和DNS记录。

设置主机名

所有的主机名必须以完全限定域名的方式正确定义,可以通过以下方法完成设置。


  1. # vim /etc/sysconfig/network


 


  1. HOSTNAME=ns1.example.tst

注:该文件中指定的主机名参数在服务器启动后才会启用(译注:或者网络服务重启后),因此,该设置不会马上生效。下面的命令可以立刻临时性地修改主机名。


  1. # hostname ns1.example.tst

一旦设置,主机名可以通过以下命令验证。


  1. # hostname
    ns1.example.tst

在进入下一步之前,请确保上述三台服务器上的主机名已经设置正确。

安装软件包

我们将使用bind来配置DNS服务,该软件可以很方便地通过yum来安装。

不使用chroot环境的:


  1. # yum install bind bind-chroot

使用chroot环境的:


  1. # yum install bind bind-chroot

准备配置文件

正如前面提到的,bind可以在chroot环境下配置,或者在非chroot环境下配置,配置文件的路径会因为是否安装chroot包而不同。

  配置文件路径 区域文件路径
不带有 chroot /etc/ /var/named/
带有 chroot /var/named/chroot/etc/ /var/named/chroot/var/named/

可以使用默认提供的named.conf配置文件,但是为了更方便使用,我们将使用另外一个简单的配置文件模板。

非chroot环境:


  1. # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf

chroot环境:


  1. # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf

现在来备份并修改配置文件。

非chroot环境:


  1. # vim /etc/named.conf

chroot环境:


  1. # vim /var/named/chroot/etc/named.conf

添加/修改以下行:


  1. options {
  2. ## 区域文件存放目录 ##
  3. directory "/var/named";
  4.  
  5. ## 对于非本地权威域的请求转发到 Google 的公开 DNS 服务器 ##
  6. forwarders { 8.8.8.8; };
  7. };
  8.  
  9. ## 申明一个本地域 example.tst ##
  10. zone "example.tst" IN {
  11. type master;
  12. file "example-fz"; ## 存储文件名,放在 /var/named ##
  13. allow-update { none; };
  14. };
  15.  
  16. ## 为IP段 172.16.1.0 提供反向解析 ##
  17. zone "1.16.172.in-addr.arpa" IN {
  18. type master;
  19. file "rz-172-16-1"; ## 存储文件名,放在 /var/named ##
  20. allow-update { none; };
  21. };

准备区域文件

那些默认的区域文件会自动创建到/var/named 或者/var/named/chroot/var/named (chroot环境)。如果在这些地方找不到这些文件,/usr/share/doc/bind目录中提供了模板文件,可以从这里拷贝。

假设默认区域文件没有提供,我们可以从/usr拷贝模板文件。

非chroot环境:


  1. # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/

chroot环境:


  1. # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named

很好!由于现在默认的区域文件已经准备好,我们可以为example.tst和172.16.1.0网络创建区域文件了,以下要点必须时刻谨记。

  • 区域文件中的特殊字符‘@’意味着空。(译注:意即代表本域。)
  • 所有的完全限定域名必须以点‘.’结束。如:example.tst.如果没有这个点,你会发生问题。(译注:即会被当做当前@所代表的域的子域。)

1. 转发区域(本地权威域)

转发区域包含了名称到IP地址的映射。对于公开的域,域名托管提供商的DNS服务器存储了转发区域文件。(译注:转发区域即本地的权威域,由这个服务器自身提供权威的解析数据)

非chroot环境:


  1. # vim /var/named/example-fz

chroot环境:


  1. # vim /var/named/chroot/var/named/example-fz


  1. $TTL 1D
  2. @ IN SOA ns1.example.tst. sarmed.example.tst. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H ) ; minimum
  8. IN NS ns1.example.tst.
  9. IN A 172.16.1.3
  10. mail IN A 172.16.1.1
  11. IN MX 10 mail.example.tst.
  12. www IN A 172.16.1.2
  13. ns1 IN A 172.16.1.3
  14. ftp IN CNAME www.example.tst.

说明:在区域文件中,SOA是开始授权(Start Of Authority)的意思。它的值的第一段是授权名称服务器的完全限定域名。完全限定域名后面跟着的是电子邮件地址。由于不能在sarmed@example.tst这样的格式中使用‘@’符号(译注:@有特定意义,代表本域。),我们将电子邮件地址重写成sarmed.example.tst.这样的格式。

以下是典型的常用DNS记录类型:

  • NS:域名服务器
  • A: 地址记录,记录主机名到IP地址的映射(译注,此处原文有误。)
  • MX: 邮件交换记录。这里我们只用了一个邮件交换记录,设置其优先级为10。如果有多个邮件交换记录,我们可以使用多个数值优先级,数字小的优先级最高。例如,MX 0比MX 1优先级更高。
  • CNAME: 标准名。如果在一台单一服务器上托管了多个服务,也很可能将多个名称解析到某个单一服务器。CNAME指定了一台服务器可能有的其它名称,并且将它们指向具有实际A记录的名称。

2. 反向区域

反向区域包含了IP地址到名称的映射。这里,我们为172.16.1.0网络创建反向区域。在正式的域中,公共IP区块的拥有者拥有的DNS服务器存储反向区域文件。(某些服务,如邮件服务,要求IP地址具备正确的反向解析才能正常工作。而IP的反向解析,通常是由IP的拥有者如接入商或IDC来负责解析。)

非chroot环境:


  1. # vim /var/named/rz-172-16-1

chroot环境:


  1. # vim /var/named/chroot/var/named/rz-172-16-1


  1. $TTL 1D
  2. @ IN SOA ns1.example.tst. sarmed.example.tst. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H ) ; minimum
  8. IN NS ns1.example.tst.
  9. 1 IN PTR mail.example.tst.
  10. 2 IN PTR www.example.tst.
  11. 3 IN PTR ns1.example.tst.

说明:除了下面的参数外,反向区域文件中的大多数参数和转发区域文件中的相同。

  • PTR: IP反向解析记录,指向一个反向限定域名。

结束工作

既然区域文件已经准备好,我们接下来调整它们的权限。

非chroot环境:


  1. # chgrp named /var/named/*

chroot环境:


  1. # chgrp named /var/named/chroot/var/named/*

现在,我们为DNS服务器设置IP地址。


  1. # vim /etc/resolv.conf


 


  1. nameserver 172.16.1.3

最后,我们可以启动DNS服务,并确保将它添加到启动服务中。


  1. # service named restart
  2. # chkconfig named on

DNS服务器起动后,建议关注一下日志文件/var/log/messages,这里头包含了后台运行的一些有用信息。如果没有发现错误,我们可以开始测试DNS服务器。

测试DNS

我们可以使用dig或者nslookup来测试DNS。首先,我们需要安装必要的软件包。


  1. # yum install bind-utils

1. 使用dig测试转发区域

使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。


  1. # dig example.tst


  1. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31184
  2.  
  3. ;; QUESTION SECTION:
  4. ;example.com. IN A
  5.  
  6. ;; ANSWER SECTION:
  7. example.com. 86400 IN A 172.16.1.3
  8.  
  9. ;; AUTHORITY SECTION:
  10. example.com. 86400 IN NS ns1.example.com.
  11.  
  12. ;; ADDITIONAL SECTION:
  13. ns1.example.com. 86400 IN A 172.16.1.3

2. 使用dig测试PTR记录

使用dig来测试时,必须时刻关注状态信息:“NOERROR”,任何其它值都表明存在问题。(译注,也可用 dig 1.1.16.172.in-addr.arpa. ptr 来测试。)


  1. # dig -x 172.16.1.1


  1. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27415
  2.  
  3. ;; QUESTION SECTION:
  4. ;1.1.17.172.in-addr.arpa. IN PTR
  5.  
  6. ;; ANSWER SECTION:
  7. 1.1.16.172.in-addr.arpa. 86400 IN PTR mail.example.tst.
  8.  
  9. ;; AUTHORITY SECTION:
  10. 1.16.172.in-addr.arpa. 86400 IN NS ns1.example.tst.
  11.  
  12. ;; ADDITIONAL SECTION:
  13. ns1.example.tst. 86400 IN A 172.16.1.3

3. 使用dig测试MX记录


  1. # dig example.tst mx


  1. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35405
  2.  
  3. ;; QUESTION SECTION:
  4. ;example.tst. IN MX
  5.  
  6. ;; ANSWER SECTION:
  7. example.tst. 14366 IN MX 10 mail.example.tst.

排错提示

  1. 我已经把SELinux关闭。
  2. 保证防火墙没有阻挡UDP 53端口
  3. 万一出错,可在/var/log/messages中查看到有用的信息
  4. 确保区域文件的属主为‘named’
  5. 确保DNS服务器的IP地址是/etc/resolv.conf中的第一条目
  6. 如果你使用example.tst作为实验环境,确保将服务器从互联网断开,因为example.tst是一个不存在的域。

最后小结,该教程关注的是实验环境中配置example.tst域用作为演示。请注意,该教程中创建了一台公共DNS服务器,此服务器会回应来自任何源IP地址的查询。如果你是在配置DNS生产服务器,请确保检查与公共DNS相关的策略。其它教程涵盖了创建从DNS服务器限制对DNS服务器的访问以及部署DNSSEC。

希望此教程对您有所帮助。

原文发布时间:2014-05-26

本文来自云栖合作伙伴“linux中国”

时间: 2024-10-31 02:42:33

CentOS上配置主DNS服务器的简易指南的相关文章

6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置

网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:http://www.cnblogs.com/dunitian/p/5439816.html 公司内部的pc,基本上dns都是内部的服务器(因为有一些内部站点和系统) 那么DNS服务器怎么设置才能让公司PC访问外网呢? 开下转发器就可以了 输入ISP提供的DNS服务器的IP地址等:(此图不全,只当参考)

为Windows Server 2003域控制器配置辅助DNS服务器

环境: 主DNS:Win 2003域主控制器 区域由系统自动生成 (简称A) 要安装成辅助DNS的主机:Win 2003 未加入域 (简称B) 区域:region.com 操作方法: 1. 打开A的DNS-->展开服务器名-->右键"正向搜索区域"选属性. 2. 点"区域复制"页签,勾上"允许区域复制",并在"只允许到下列 服务器"中添加B的IP. 3. 点击右下的"通知",同样添加B的IP.

CentOS上配置rsyslog客户端用以远程记录日志

CentOS上配置rsyslog客户端用以远程记录日志 rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息.rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器.rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上. 假定你的网络

电脑不能上网提示:Windows无法与设备或资源(主DNS服务器)通信

垃圾站博主如今使用的依旧是WIN7系统,最近通过交换机和路由器总是连不上网,而网络的其他电脑可以联网,检查发现电脑桌面右下角联网的地方出现黄色感叹号,检测后提示"Windows无法与设备或资源(主DNS服务器)通信",依旧是百度.谷歌的搜索查找如何解决这个问题. 经搜索发现大多数解决"Windows无法与设备或资源(主DNS服务器)通信"方法如下: ①修改IP地址和DNS地址为自动获取: ②更新网卡驱动或更换网卡: ③重装电脑系统: ④修改子路由器IP地址: ⑤删除

在CentOS上配置基于主机的入侵检测系统(IDS)

在CentOS上配置基于主机的入侵检测系统(IDS) 所有系统管理员想要在他们生产服务器上首先要部署的安全手段之一,就是检测文件篡改的机制--不仅仅是文件内容,而且也包括它们的属性. AIDE ("高级入侵检测环境"的简称)是一个开源的基于主机的入侵检测系统.AIDE通过检查大量文件属性的不一致性来检查系统二进制文件和基本配置文件的完整性,这些文件属性包括权限.文件类型.索引节点.链接数.链接名.用户.组.文件大小.块计数.修改时间.添加时间.创建时间.acl.SELinux安全上下文

ipv6-实现获取本机所配置的dns服务器(windows)的IPv6地址c++代码

问题描述 实现获取本机所配置的dns服务器(windows)的IPv6地址c++代码 项目要求实现获取本机所配置的dns服务器(windows)的IPv6地址,求大侠指点 解决方案 最简单的是调用ipconfig,获取它的输出结果. 解决方案二: ipconfig /all 然后解析输出内容. 解决方案三: ipconfig /all是个方法,也有C++的: #include #include using namespace std;#pragma comment(lib, "ws2_32.li

Centos 6.4部署DNS服务器

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://navyaijm.blog.51cto.com/4647068/1310504 一.前言 因公司的hadoop集群需要域名反向解析,之前的绑定hosts已经不能满足业务需求了,所以就折腾简单的搭建个域名系统,之前在centos5.6下搭过,有点小不一样,记录过程如下: 二.安装配置 1.安装: 1 yum install -y bind bind-chroot ypbind bi

CentOS上配置MariaDB主从复制配置教程

环境说明 主库服务器: 192.168.71.151,CentOS 7,MariaDB 10已安装,无应用数据. 从库服务器1: 192.168.71.152,CentOS 7,MariaDB 10已安装,无应用数据. 从库服务器2: 192.168.71.153,CentOS 7,MariaDB 10已安装,无应用数据. 3个服务器的MariaDB都正常运行. MariaDB 10服务器的常规安装配置可参照<MariaDB/MySQL在 CentOS 6.6上的编译安装/二进制源码包+授权详解

DNS服务器部署入门指南

在任何现在的TCP/IP网络中,最重要的构成之一就是DNS服务器.DNS服务器可以完成的事情很多,例如把一个互联网URL解析成IP地址:解析本地网络中的主机名称:提供Windows活动目录所依赖的基础架构.因此,部署一个DNS服务器并不是一件非常简单的事情. 为了帮助一些新手朋友更好的了解DNS服务器,本文和大家讨论一些部署DNS服务器的经验和常识,介绍DNS服务器可以胜任的角色,以及DNS服务器在网络中应该部署的位置,还有,对于你的网络来说,应该部署多少DNS服务器才是最佳选择. 你需要多少D