在Linux系统上安装配置DNS服务器的教程

   2015-12-01 0

简介
DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。在Internet上域名与IP地址之间是一对一(或者多对一)的,也可采用DNS轮循实现一对多,域名虽然便于人们记忆,但机器之间只认IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。DNS 命名用于 Internet等 TCP/IP网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。 [1]

DNS分为Client和Server,Client扮演发问的角色,也就是问Server一个Domain Name,而Server必须要回答此Domain Name的真正IP地址。而当地的DNS先会查自己的资料库。如果自己的资料库没有,则会往该DNS上所设的DNS服务器询问,依此得到答案之后,将收到的答案存起来,并回答客户。DNS服务器会根据不同的授权区(Zone),记录所属该网域下的各名称资料,这个资料包括网域下的次网域名称及主机名称。在每一个名称服务器中都有一个快取缓存区(Cache),这个快取缓存区的主要目的是将该名称服务器所查询出来的名称及相对的IP地址记录快取缓存区中,这样当下一次还有另外一个客户端到此服务器上去查询相同的名称 时,服务器就不用在到别台主机上去寻找,而直接可以从缓存区中找到该笔名称记录资料,传回给客户端,加速客户端对名称查询的速度。例如:

当DNS客户端向指定的DNS服务器查询网际网路上的某一台主机名称 DNS服务器会在该资料库中找寻用户所指定的名称 如果没有,该服务器会先在自己的快取缓存区中查询有无该笔纪录,如果找到该笔名称记录后,会从DNS服务器直接将所对应到的IP地址传回给客户端 ,如果名称服务器在资料记录查不到且快取缓存区中也没有时,会向最接近的名称服务器去要求帮忙找寻该名称的IP地址 ,在另一台服务器上也有相同的动作的查询,当查询到后会回复原本要求查询的服务器,该DNS服务器在接收到另一台DNS服务器查询的结果后,先将所查询到的主机名称及对应IP地址记录到快取缓存区中 ,最后在将所查询到的结果回复给客户端。


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

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

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

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

目标

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

在该域中,有以下三台服务器。
在Linux系统上安装配置DNS服务器的教程

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

过程
设置主机名

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

复制代码
代码如下:

# vim /etc/sysconfig/network
HOSTNAME=ns1.example.tst

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

复制代码
代码如下:

# hostname ns1.example.tst

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

复制代码
代码如下:

# hostname
ns1.example.tst

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

安装软件包

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

不使用chroot环境的:

复制代码
代码如下:

# yum install bind bind-chroot

使用chroot环境的:

复制代码
代码如下:

# yum install bind bind-chroot

准备配置文件

正如前面提到的,bind可以在chroot环境下配置,或者在非chroot环境下配置,配置文件的路径会因为是否安装chroot包而不同。
在Linux系统上安装配置DNS服务器的教程

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

非chroot环境:

复制代码
代码如下:

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

chroot环境:

复制代码
代码如下:

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

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

非chroot环境:

复制代码
代码如下:

# vim /etc/named.conf

chroot环境:

复制代码
代码如下:

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

添加/修改以下行:

复制代码
代码如下:

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

准备区域文件

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

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

非chroot环境:

复制代码
代码如下:

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

chroot环境:

复制代码
代码如下:

# 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环境:

复制代码
代码如下:

# vim /var/named/example-fz

chroot环境:

复制代码
代码如下:

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

$TTL 1D

@ IN SOA ns1.example.tst. sarmed.example.tst. (

0 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

IN NS ns1.example.tst.

IN A 172.16.1.3

mail IN A 172.16.1.1

IN MX 10 mail.example.tst.

www IN A 172.16.1.2

ns1 IN A 172.16.1.3

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环境:

复制代码
代码如下:

# vim /var/named/rz-172-16-1
  
chroot环境:

复制代码
代码如下:

# vim /var/named/chroot/var/named/rz-172-16-1
$TTL 1D</p> <p>@ IN SOA ns1.example.tst. sarmed.example.tst. (</p> <p> 0 ; serial</p> <p> 1D ; refresh</p> <p> 1H ; retry</p> <p> 1W ; expire</p> <p> 3H ) ; minimum</p> <p>IN NS ns1.example.tst.</p> <p>1 IN PTR mail.example.tst.</p> <p>2 IN PTR www.example.tst.</p> <p>3 IN PTR ns1.example.tst.

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

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

结束工作

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

非chroot环境:

复制代码
代码如下:

# chgrp named /var/named/*

chroot环境:

复制代码
代码如下:

# chgrp named /var/named/chroot/var/named/*

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

复制代码
代码如下:

# vim /etc/resolv.conf </p> <p>nameserver 172.16.1.3

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

复制代码
代码如下:

# service named restart
# chkconfig named on

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

测试DNS

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

复制代码
代码如下:

# yum install bind-utils

1. 使用dig测试转发区域

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

复制代码
代码如下:

# dig example.tst </p> <p>;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31184</p> <p> </p> <p>;; QUESTION SECTION:</p> <p>;example.com. IN A</p> <p> </p> <p>;; ANSWER SECTION:</p> <p>example.com. 86400 IN A 172.16.1.3</p> <p> </p> <p>;; AUTHORITY SECTION:</p> <p>example.com. 86400 IN NS ns1.example.com.</p> <p> </p> <p>;; ADDITIONAL SECTION:</p> <p>ns1.example.com. 86400 IN A 172.16.1.3

2. 使用dig测试PTR记录

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

复制代码
代码如下:

# dig -x 172.16.1.1 </p> <p>;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27415</p> <p> </p> <p>;; QUESTION SECTION:</p> <p>;1.1.17.172.in-addr.arpa. IN PTR</p> <p> </p> <p>;; ANSWER SECTION:</p> <p>1.1.16.172.in-addr.arpa. 86400 IN PTR mail.example.tst.</p> <p> </p> <p>;; AUTHORITY SECTION:</p> <p>1.16.172.in-addr.arpa. 86400 IN NS ns1.example.tst.</p> <p> </p> <p>;; ADDITIONAL SECTION:</p> <p>ns1.example.tst. 86400 IN A 172.16.1.3

3. 使用dig测试MX记录

复制代码
代码如下:

# dig example.tst mx </p> <p>;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35405</p> <p> </p> <p>;; QUESTION SECTION:</p> <p>;example.tst. IN MX</p> <p> </p> <p>;; ANSWER SECTION:</p> <p>example.tst. 14366 IN MX 10 mail.example.tst.

排错提示

我已经把SELinux关闭。

保证防火墙没有阻挡UDP 53端口

万一出错,可在/var/log/messages中查看到有用的信息

确保区域文件的属主为‘named’

确保DNS服务器的IP地址是/etc/resolv.conf中的第一条目

如果你使用example.tst作为实验环境,确保将服务器从互联网断开,因为example.tst是一个不存在的域。

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

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 【强转】QEMU+GDB调试linux内核全过程
    【强转】QEMU+GDB调试linux内核全过程
    昨天更新了一篇名为《QEMU+GDB调试linux内核全过程》[link][https://blog.csdn.net/weixin_37867857/article/details/88138432]的博客,发现排版比较混乱,而且思维也比较混乱。咋一看下来简直是惨不忍睹,而且会给读者在安装过程中一种云里雾里的感觉,加上
    03-08
  • Linux下Bochs,NASM安装和使用 linux bom
    Linux下Bochs,NASM安装和使用 linux bom
    以Ubuntu为例,先更新一下:sudo apt-get updatesudo apt-get upgrade然后安装Bochs环境:sudo apt-get install build-essential xorg-dev libgtk2.0-dev安装NASMNASM官网下载,这以nasm-2.14.02.tar.gz为例:用tar zxvf nasm-2.14.02.tar.gz解压后编译安装cd
    03-08
  • 把玩Alpine linux(一):安装
    把玩Alpine linux(一):安装
    导读Alpine Linux是一个面向安全应用的轻量级Linux发行版。它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。Alpine 的内核都打了grsecurity/PaX补丁,并且所有的程序都编译为Position Independent Executabl
    03-08
  • 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)
    日志审计与分析实验三(rsyslog服务器端和客户
     Linux日志收集一、实验目的:1、掌握rsyslog配置方法2、配置rsyslog服务收集其他Linux服务器日志:C/S架构:客户端将其日志上传到服务器端,通过对服务器端日志的查询,来实现对其他客户端的日志进行集中管理;下面实现就是通过两套机器来实现,(server:19
    03-08
  • Linux学习系列--如何在Linux中进行文件的管理
    Linux学习系列--如何在Linux中进行文件的管理
    文件在常见的Linux的文件系统中,经常使用能了解到的文件管理系统是分为多个文件夹进行管理的。如何查看文件路径 pwd ,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前目录的上层目录在Linux下,所有以点开始的文件都是“隐藏文件
    03-08
  • [JetBrains] 我想在 Linux 上使用 macOS 键绑定!
    [JetBrains] 我想在 Linux 上使用 macOS 键绑定
    很高兴认识你,我的名字是kitakkun。我最近开始实习,是工程界的新手。顺便说一句,这是我的第一篇文章。你最喜欢的操作系统是什么?视窗?苹果系统?还是Linux?我将它们全部用于不同的目的,但感觉就像 macOS ≒ LinuxWindows。一两个月前,我最喜欢 Linux
    03-08
  • linux 配置Socks51
    linux 配置Socks51
    ***大家耳熟能详,但是socks用到的人比较少,那什么是socks呢?请看第二段或者百度百科,socks分别有4和5两个版本,现在5为主流。工作中经常用***访问国外,但是同时国内的速度又慢了,让人很纠结,实际上这个时候可以考虑使用socks。指定某一个程序使用国外s
    02-10
  • linux下如何单独编译设备树? linux设备树是什
    答: make vendor/device_name.dtb  如: make freescale/fsl-1043a-rdb.dtb
    02-10
  • linux下mysql开启远程访问权限及防火墙开放3306端口
    linux下mysql开启远程访问权限及防火墙开放3306
    开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。主流的有两种方法,改表法和授权法。相对而言,改表法比较容易一点,个人也是比较倾向于使用这种方法,因此,这
    02-10
  • 移植linux3.7到nuc900系列开发板遇到的问题
    通过移植学习linux新版本内核,大概了解一下内核变化。记录一下移植过程中遇到的问题或值得注意的地方。1,添加一款arm9芯片的支持首先修改\arch\arm\tools\mach-types文件添加一行w90p950evbMACH_W90P950EVBW90P950EVB同目录下的脚本文件在编译内核时会根据
    02-10
点击排行