Linux 搭建DNS服务器正反DNS解析和一些非常容易忽略的细节问题

DNS服务器,(Domain Name System)域名系统,在TCP/IP 网络中有非常重要的地位,能够提供域名与IP地址的解析服务。

DNS 是一个分布式数据库,命名系统采用层次的逻辑结构,如同一棵倒置的树,这个逻辑的树形结构称为域名空间,由于DNS 划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。(这个概念和docker的命名空间像不像?)

注:DNS 域名空间中,树的最大深度不得超过127 层,树中每个节点最长可以存储63 个字符。(dockerfile层数不得超过128,是巧合吗?)

在搭建DNS服务前,至少需要理解一个概念:完全正式域。什么是完全正式域(FQDN)? 简单的说,google.com就是一个完全正式域,baidu.com也是一个完全正式域,163.com还是一个完全正式域,sina.com也是一个完全正式域,象什么com,cn,gov,edu,这些叫做顶级域,google,baidu,163,sina这样的叫二级域。通常,我们问别人,你的域名是多少? 这时候问的就是完全正式域,www这样的叫万维网子域。

顶级域可以分为组织域,地址域,反向域等等这样的类型,感兴趣的自行百度即可,不在赘述。

开始搭建DNS服务器,并配置正反解析一个域名:mycsdn.com,两台虚拟机,具体资源配置如下:

DNS服务器:IP地址---192.168.0.20,后续简称为20。

验证DNS解析效果的主机(客户端):IP地址--192.168.0.21,后续简称为21。在正式搭建前确保防火墙和selinux关闭。

20这台主机,安装DNS服务端:yum install bind bind-chroot bind-utils -y #其中bind-utils是提供各类测试管理DNS的工具

systemctl enable bind && systemctl start bind#启动服务,编辑 /etc/named.conf 这个主配置文件

listen-on port 53 { any; };
listen-on-v6 port 53 { any; };

 allow-query     { any; };  #13,14,17行改成这样既可。

在文末末尾添加如下:

zone "mycsdn.com" IN {
        type master;
        file "mycsdn.localhost";#指定DNS正向解析的数据文件名称,存放路径默认在   /var/named/目录下。客户端的域名解析就#读取这个文件
};

zone "0.168.192.in-addr.arpa" IN {  #这里写的是缩略网段192.168.0.0的反写
        type master;
        file "mycsdn.loopback";#指定DNS正向解析的数据文件名称,存放路径默认在   /var/named/目录下。客户端的域名解析就#读取这个文件
};

以上是环境的配置,下面是写dns数据文件,根据以上所设置,需要编写一个文件,名称为 mycsdn.localhost,这个文件放在  /var/named/  目录下。不过,通常使用自带的模板文件修改即可。

[root@centos11 named]# pwd
/var/named
[root@centos11 named]# ls -al
total 16
drwxrwx--T.  6 root  named  141 Sep  4 21:54 .
drwxr-xr-x. 20 root  root   280 Sep  4 13:52 ..
drwxr-x---.  7 root  named   61 Sep  4 13:52 chroot
drwxrwx---.  2 named named   23 Sep  4 20:16 data
drwxrwx---.  2 named named   60 Sep  4 20:54 dynamic
-rw-r-----.  1 root  named 2253 Apr  5  2018 named.ca
-rw-r-----.  1 root  named  152 Dec 15  2009 named.empty
-rw-r-----.  1 root  named  152 Jun 21  2007 named.localhost #正向模板文件
-rw-r-----.  1 root  named  168 Dec 15  2009 named.loopback #反向模板文件
drwxrwx---.  2 named named    6 Jun  1 23:26 slaves

cp -a /var/named/named.localhost mycsdn.localhost 

cp -a /var/named/named.loopback mycsdn.loopback

#这里需要提高注意了,必须加a拷贝,文件的属组必须是named,

#如果不加a,属组会改变,那么域名解析将不可能成功。现在编辑mycsdn.localhost这个文件

$TTL 1D
@ IN SOA mycsdn.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.mycsdn.com.
bbs A 192.168.0.20
www A 192.168.0.20
#========================================================================================
#这里需要注意,mycsdn.com. 和dns.mycsdn.com. 都是有一个逗号的,A代表ipv4地址,
#如果现在保存文件,然后重启dns服务后,在客户端指定dns为192.168.0.21,
#在客户端上ping bbs.mycsdn.com 和ping www.mycsdn.com
#应该是可以ping通的

在编辑 mycsdn.loopback 这个文件,文件内容如下:

$TTL 1D
@ IN SOA mycsdn.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.mycsdn.com.
20 PTR bbs.mycsdn.com.
20 PTR www.mycsdn.com.
#========================================================================================
#这个就是反向域名解析了。20是dns服务器的最后那个主机位数, dns服务器的IP是192.168.0.20
#逗号不要遗忘

重启dns服务:systemctl restart named

编辑客户端,也就是21这个主机的网卡配置文件,将dns指向192.168.0.20,重启网卡服务使之生效,

ping www.mycsdn.com 和  ping  bbs.mycsdn.com  应该是可以通的,这时测试的是正向解析。

nslookup  192.168.0.20,可以发现域名 mycsdn.com, 这时测试的是反向解析