linux dns服务器快速搭建

讲述了在linux系统下,dns服务器的搭建,以及介绍了dns资源记录的几种类型

在上一遍文件章,我们介绍了DNS结构,以及基查询过程,文章链接:https://ifmx.cc/linux/134.html  这里再讲一下,快速,简单的搭建DNS服务器

系统:CentOS 6.7

为了使我们后面的实验通顺,这里直接把防火墙,以及selinux 关掉

service iptables stop
setenforce 0

bind是linux下的DNS服务器程序,安装bind,以及其组件

yum install bind bind-utils bind-chroot

这里提一下,bind-chroot这个包,这bind一个功能,使bind在chroot模式下运行,bind在chroot模式下,其使用的根目录,并不是系统真正的根目录,而是系统中的一个子目录而已,可以称之为虚拟目录,这样做可以提高安全性,因为bind在chroot模式下运行的时候,bind的权限也仅仅只限于这个虚拟根目录以及下面的目录,无法提升到除虚拟根目录以外的其它任何目录。

chroot 可以改变程序运行的所参考的根目录( / )位置,就是说把程序固定在某个子目录中运行,这个子目录在该程序看来,就是系统根目录(虚拟根目录),而且该程序只在这个虚拟根目录中有权限,跳出即无任何权限,例如bind中,装上bind-chroot包,就将bind的运行目录改变了,也就是/var/named/chroot,这个目录,才是bind的根目录(虚拟根目录),这样,bind的配置文件目录,就由原本的/etc 就变成了 /var/named/chroot/etc,区域文件目录就由原本的/var/named变成了/var/named/chroot/var/named,当有黑客入侵到了bind,因为被chroot了,所以其权限以及破坏能力也就在虚拟根目录中,即/var/named/chroot目录,不会威胁到整个服务器的安全。

安装完成了以后,虚拟目录下是没有任何配置文件的,我们原本的cp过来

cp /etc/named.conf /var/named/chroot/etc
cp -arp /var/named/* /var/named/chroot/var/named/

这里在第二条命令复制的时候,会报一个不能复制/var/named/chroot目录,这里我们忽略,就好

使用vim编辑器,打开/var/named/chroot/etc/named.conf,由于这里我们使用快速搭建,暂时不用其它功能,只是最基本的DNS解析,所以会将其它加密相关的配置全部去掉,其它配置我会在后续文件中更新,这里我新添加一下example.com的配置文件如下:

options {
  listen-on port 53 { any; };
  directory "/var/named";
};
zone "." IN {
  type hint;
  file "named.ca";
};
zone "example.com" IN {
  type master;
  file "example.com";
};
zone "1.168.192.in-addr.arpa" IN {
  type master;
  file "192.168.1.arpa";
};

这里说一下named.conf配置文件的内容

打开后,我们可以发现有很多以 // 开头的内容,这个就是注释,代表程序忽略这一行,不读取,named.conf 里使用 // 注释,而不是一般的 #,而 /* 与 */ 之间则是一段文字的注释,并且,每一行结束都以分号(;)结尾(除开头的大括号 { )千万不要少了。(初学者很容易犯这个错误)。

配置文件以options 开始,其所有关于options的设定都包括在大括号之内 { } 首先使用 linten-on port 指定监听的端口和IP地址,例:linten-on port 53 { 192.168.100.22; }; 若要监听服务器的所有IP地址,则使用 any 例: listen-on port { any; };

然后使用 directory 指定了资源记录文件所在的位置,为 /var/named 也就是说,bind程序会去这个目录下查找DNS记录,由于这里我们使用的绝对路径,所以以后面的配置中,就无需再使用绝对路径了,所以我们的dns资源记录文件一定要放在directory 指定的目录下面。

接下来,是zone 这里是定义一个区域,这里面定义了一个“ . “,这个是DNS的根域。然后下边type 指定区域的类型,这里一个有三个类型,分别是:master slave hit,master代表主要区域,slave代表辅助区域,hint代表根区域,也只有根域才用hint类型。接着,下在的 file 指定了区域记录文件的名称,也就是文件名,为named.ca。

下面还有一个zone ,这里又定义了一个区域,名称为example.com,类型为master 文件名称为 example.com。

下面还定义一个 名称为 100.168.192.in-addr.arpa的区域,这个区域是干什么的呢,这是就是反向解析的区域,即把IP解析到域名。这里的格式是这样的,假设我们的反向解析 192.168.100.0段地址,那么就要把最后一段去掉,也就是192.168.100,再反过来写,是100.168.192,后面还要加上 .in-addr.arpa,所以就是 100.168.192.in-addr.arpa。

好了,named.conf 说完了,我们再来看一下资源记录文件,也就是区域文件。在 /var/named/chroot/var/named/目录下,可以看到有很多文件,这里我们先讲一下named.ca。打开后,内容如下

; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . <file>"
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.cache
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: December 01, 2015
; related version of root zone: 2015120100
;
; formerly NS.INTERNIC.NET
;
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:ba3e::2:30
;
; FORMERLY NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
B.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:84::b
;
; FORMERLY C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
C.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2::c
;
; FORMERLY TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 199.7.91.13
D.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2d::d
;
; 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
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f
;
; 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 198.97.190.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::53
;
; FORMERLY NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
I.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fe::53
;
; OPERATED BY VERISIGN, INC.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:c27::2:30
;
; OPERATED BY RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1
;
; OPERATED BY ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42
;
; OPERATED BY WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35
; End of file

有很多以分号开头的,这个呢,代表注释,在资源记录文件里,使用分号 注释,这里要记住。这里我们把分号开头的全掉去以后。一共有13行以点 . 开头的,这个就是根域服务器,然后第二例都是 36000000,这个是TTL,也就是在缓存的有效期,单位是秒,第三例是NS,这个是资源记录类型,也就是name server记录,最后一列是根域名服务器的名称,名称为a.root-server.net. 从A到M,一共13台,到于我为什么又是大写又是小写,上一篇文章我也提到过,域名解析中,不区域大小写,还有全球一共是13台根域服务器。

这里我们也看到了,13台根域服务器,指定的都是名称,但是对于计算机系统来说,通讯的是IP地址,这个也是DNS的主要功能,所以名称还是要解析到IP地址,所以在紧接着以点开头的下面,还有两行,分别记录的这13台根域服务器的IP地址,A记录为IPv4地址,AAA为IPv6地址,这里我们不对IPv6过多讨论。所以我在上一扁文章提到过,每台dns都知道13台根域服务器,当DNS查询的资源记录不在自己的自己的资源记录中,那么就从根域,一层一层往下查找,怎么知道根服务器,就是从这个文件来的。而这个文件,又是以静态文件来维护的,当根域服务器的IP发生变化时(虽然可能几乎为0),怎么办呢,其实在named.ca文件开头的注释中,就已经告诉我们了,可以去ftp上获取最新的named.ca文件

上面的named.ca文件,记录的根域服务器的信息,下面我们看一下named.empty,这个,是资源记录文件的一模板,我们要解析的,都是通过这个模板来更改,内容如下:

$TTL 3H
@ IN SOA @ rname.invalid. (
                     0 ; serial
                     1D ; refresh
                     1H ; retry
                     1W ; expire
                     3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1

第一行:是TTL的设置,也就是缓存的有效期,这里是个预设值,事实在指定每个资源记录的时候,都可以单独指定的TTL值,如果没有指定,侧使用这里的TTL值,3H,H代表小时,D代表天,W代表周,这里是表示3小时,若不写单位,则单位是秒。

第二行:是一个SOA的记录,这里有一个特殊的字符 @,@代表资源记录的结尾,也就是我们在named.conf中定义的 zone后面的那段。

@后面是IN,定义出当前资源类型是 Internet class的,再之后为SOA,也就是 Start Of Authority的意思,表示目前区域的起始授权记录开始,每个区域文件只能有一个SOA,而且不能重复,而且必须是所负责的zone中的第一记录。

紧接着后面,定义了这个区域的授权主机和管理者的信箱,需要注意的是SOA记录必须能够在DNS中找到一个A记录(这个以后会提到),这里的分别是@ 和 rname.invalid. 我们使用的邮箱格式是 user@host.com 这样的格式,由于@在DNS中,是个特殊的字符,所以这里不能再使用@,而是使用点 . 来代替了@,所以这里的信箱,就是rname@invalid 。

接下来是SOA的设定,是被包括在 ()之中的5组数字,主要是做为和slave服务器同步DNS数据所使用的(以后会说的到主辅DNS同步)

Serial,其格式,是数字,可以用时间日期+加修改次数,但也不一定必须要这样,只要方便你的记忆就行,但注意,这个必须是数字,不能超过10个数字,而且不能有其它符号,当辅助DNS同步时,会比较这个数字,若比自己的数字大,则同步,否则,忽略

Refresh,这里告诉辅助DNS隔多长时间同步一次数据,到于是否同步还要看serial的比较

Retry,这里告诉辅助的DNS在同步失败后,隔多长时间再次同步

Expire,记录逾期时间,即告诉辅助DNS如果一直不能同步成功,到这里就放弃同步

minimnu,记录最小的TTL预设值,如果上面没有使用$TTL来打指定的话,则使用这里的

这里还要注意一下,SOA记录中,前括号的,只能一行写完,不能用回车换行,有时候我们在书上,或者网络上看到断开两多行了,那可能是因为版面的关系,而SOA的后括号,也不能写到分号的右边去了,因为分号代表的是注释,写到右边就和没有后括号是一样的区别。

这里我们复制一下,为我们的资源记录文件

cd /var/named/chroot/var/named
cp -p named.empty example.com
cp -p named.empty 192.168.100.arpa

使用vim 编辑两个文件,

vim example.com

$TTL 3H
@ IN SOA @ rname.invalid. (
                       0 ; serial
                       1D ; refresh
                       1H ; retry
                       1W ; expire
                       3H ) ; minimum
NS @
@ A 192.168.100.22
www A 192.168.100.12
mail A 192.168.100.130
@ MX 10 mx1.example.com.
@ MX 5 mx2.example.com.
mx1 A 202.109.67.38
mx2 A 198.72.46.11
qq CNAME www.example.com.
vim 192.168.100.arpa

$TTL 3H
@ IN SOA @ rname.invalid. (
                       0 ; serial
                       1D ; refresh
                       1H ; retry
                       1W ; expire
                       3H ) ; minimum
NS @
@ A 192.168.100.22
12 PTR www.example.com.
130 PTR mail.example.com.

在写MX记录,CNAME记录,以及PTR记录的时候,对应记录值,一定要以 点  . 结尾

这里解析,主要有几种类型,下面来说一下

SOA记录:起始授权资源记录

A记录:域名对应的IP地址

AAA记录:IPv6地址,A记录为IPv4地址

CNAME记录:别名记录

MX记录:邮件交换记录,不同的域之间的邮件发送,需要设置,MX记录,一共有10个优先级,从1到10 。

NS记录:即,DNS记录

TXT记录:文本记录,一般用于反垃圾邮件

完成后我们把named.conf的属主设置为named,不设也可以,不过可能会遇到因为权限拒绝,而启动失败,并启动dns服务,bind的服务名叫做named

chown named.named /var/named/chroot/etc/named.conf
service named start

更改DNS服务器为我们的DNS,我这里的环境是192.168.100.22,实际环境需要根据你自己的来改。

echo "nameserver 192.168.100.22" > /etc/resolv.conf

使用nslookup 测试

[root@localhost ~]# nslookup 
> example.com
Server:		192.168.100.22
Address:	192.168.100.22#53

Name:	example.com
Address: 192.168.100.22
> www.example.com
Server:		192.168.100.22
Address:	192.168.100.22#53

Name:	www.example.com
Address: 192.168.100.32
> qq.example.com
Server:		192.168.100.22
Address:	192.168.100.22#53

qq.example.com	canonical name = www.example.com.
Name:	www.example.com
Address: 192.168.100.32
> 192.168.100.22
Server:		192.168.100.22
Address:	192.168.100.22#53

22.100.168.192.in-addr.arpa	name = example.com.
> 192.168.100.130
Server:		192.168.100.22
Address:	192.168.100.22#53

130.100.168.192.in-addr.arpa	name = mail.example.com.
> 

由于,可以看到,我们添加的example.com 正反向都可以解析出来,说明没有问题,那不在我们区域记录中的呢,随便挑几个吧。

[root@localhost ~]# nslookup
> ifool.me
Server:		192.168.100.22
Address:	192.168.100.22#53

Non-authoritative answer:
Name:	ifool.me
Address: 52.79.106.119
> www.baidu.com
Server:		192.168.100.22
Address:	192.168.100.22#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 119.75.217.109
Name:	www.a.shifen.com
Address: 119.75.218.70
> www.sohu.com
Server:		192.168.100.22
Address:	192.168.100.22#53

Non-authoritative answer:
www.sohu.com	canonical name = gs.a.sohu.com.
gs.a.sohu.com	canonical name = fbx.a.sohu.com.
Name:	fbx.a.sohu.com
Address: 123.126.104.68
> 

这里,我们第一次解析不在本地区域中的域名时,时间会慢一点,这就是因为从根域开始查找了,再次解析就会很快,这是因为有缓存。

到这里基本的解析,就可以了,多区域的话,就在 named.conf 文件里写多个区域,再配置相关资源记录文件,即可。后面我会讲其它关于DNS的配置。

猜您喜欢