DNS服务器搭建

Posted 坏坏-5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS服务器搭建相关的知识,希望对你有一定的参考价值。


实验环境说明

主机系统系统版本IP地址
服务端LinuxRHEL 7.0 IP:192.168.43.128/24
域名:www.bad.boy.com
客户端LinuxRHEL 7.4192.168.43.15/24
客户端Windows 11Windows 11192.168.43.1/24

服务器配置

安装DNS软件包

  • 安装DNS服务器的软件包
    • bind是DNS服务器的软件包名
    • bind-chroot可以隐藏正常的根目录,可以提高安全性
[root@Server ~]# yum -y install bind bind-chroot.x86_64 
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Base                                                  | 4.1 kB     00:00     
Resolving Dependencies
--> Running transaction check

...

Installed:
  bind.x86_64 32:9.9.4-50.el7       bind-chroot.x86_64 32:9.9.4-50.el7      

Dependency Installed:
  GeoIP.x86_64 0:1.5.0-11.el7                                                

Dependency Updated:
  bind-libs.x86_64 32:9.9.4-50.el7     bind-libs-lite.x86_64 32:9.9.4-50.el7 
  bind-license.noarch 32:9.9.4-50.el7 

Complete!
[root@Server ~]# 
  • 设置DNS服务器开机自启动
    • disable则表示关闭开机自启
[root@Server ~]# systemctl enable named
ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.target.wants/named.service'
[root@Server ~]# systemctl restart named
  • 防火墙放行DNS服务
# 列出防火墙所有规则
[root@Server named]# firewall-cmd --list-all 
public (default, active)
  interfaces: eno16777736
  sources: 
  services: dhcp dhcpv6-client http samba ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
  
# 向防火墙中添加规则,放行DNS服务
[root@Server named]# firewall-cmd --permanent --add-service="dns"
success

# 重新加载防火墙,使配置生效
[root@Server named]# firewall-cmd --reload 
success
[root@Server named]# firewall-cmd --list-all
public (default, active)
  interfaces: eno16777736
  sources: 
  services: dhcp dhcpv6-client dns http samba ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
	
[root@Server named]# 

修改配置文件

  • 配置文件说明
/etc/named.conf              # bind主配置文件
/etc/named.rfc1912.zones     # 定义zone的文件
/etc/rndc.conf               # rndc配置文件
/usr/sbin/named-checkconf    # 检测/etc/named.conf文件语法
/usr/sbin/named-checkzone    # 检测zone和对应zone文件的语法
/usr/sbin/rndc               # 远程dns管理工具
/usr/sbin/rndc-confgen       # 生成rndc密钥
/var/named/named.ca          # 根解析库
/var/named/named.localhost   # 本地主机解析库
/var/named/slaves            # 从ns服务器文件夹
  • 修改主配置文件
[root@Server ~]# vim /etc/named.conf 
options 
#       listen-on port 53  127.0.0.1; ;

        # 定义监听的端口以及监听主机,如果所有都监听则括号内为any
        listen-on port 53  192.168.43.128; ; 
        
        # IPv6监听端口及IP
        listen-on-v6 port 53  ::1; ;
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
#       allow-query      localhost; ;

        # 允许所有主机进行查询,localhost表示允许本地主机查询
        allow-query      any; ;

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
;

# 定义日志记录分类以及存放位置
logging 
        channel default_debug 
                file "data/named.run";
                severity dynamic;
        ;
;

# 定义区域,区域类型(hint:根分区,master:主分区,slave:从区域服务器)
zone "." IN 
        type hint;
        file "named.ca";
;

# 包含的其他配置文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
  • 修改区域配置文件
[root@Server ~]# vim /etc/named.rfc1912.zones 
# 正向区域解析文件
zone "bad.boy.com" IN              # 域名
        type master;                # 服务类型
        file "bad.boy.com.zone";    # 域名与IP地址解析规则保存的文件
;

# 逆向区域解析文件
zone "43.168.192.in-addr.arpa" IN 
        type master;
        file "named.192.168.43";
;
  • 本地解析文件说明
DomainINRR TypeRR Data
主机名INAIPv4地址
主机名.INAAAAIPv6地址
域名.INNS管理此域名的主机IP
域名.INSOA起始授权记录管理此域名的七个重要参数
域名.INMX顺序数字,相当于域名的优先级
主机别名.INCNAME实际主机的域名
/var/named/named.localhost   # 本地主机解析库
$TTL 1D
			# 时间单位:M(分钟),H(小时),D(天),W(周),默认是秒
			# TTL是当这条记录被其他DNS服务器查询到后,这个记录在对方DNS服务器中缓存的时间。如果写了$TTL,则以该值为准。
@       IN SOA  @ admin.baidu.com. ( 
                        # 1.如果一个域名和来源相同的话,那么名称就可以被表示为"@"  
				        # 2.@代表zone的意思,现在@代表baidu.com.
				        # 3.SOA代表资源记录的名称为起始授权记录
				        # 4.admin.baidu.com.表示有问题找该管理员
				        # 5.SOA记录后面的@,代表域的权威服务器
				        # 6.域名最后必须要有.
                                        0       ; serial  
						# 序号,代表数据库文件的新旧,越大代表越新
                                        1D      ; refresh 
						# 更新频率,定义slave向master请求更新的频率
                                        1H      ; retry   
						# 失败重新尝试,定义slave向master请求失败,再次请求的时间
                                        1W      ; expire  
						# 失效时间,定义slave一直向master请求失败,最大的请求时间
                                        3H )    ; minimum 
						# 缓存时间,如果这个数据库zone file中,每条记录都没有到TTL缓存时间,就以这个SOA的设置值为主
        IN   NS      @ 
			# NS记录代表域名服务器记录,如果有多个域名服务器,可以添加多条NS记录,每个NS记录在下面
        IN   MX 10 mail.example.com. 
			# 使用MX记录指定邮件服务器时,我们给mail.example.com服务器设置优先级为10
        IN   A       127.0.0.1 
			# 记录正向解析记录,格式为在域名后面输入相应的IP地址,IN代表Internet,A代表IPv4地址,AAAA表示IPv6地址
        IN   AAAA    ::1 

root.example.com. IN A 172.16.0.254
            # 记录root.example.com对应的IP是172.16.0.254
www.example.com.  IN A 172.16.0.200
                  IN A 172.16.0.200
mail              IN A 172.16.0.25  
			# mail(默认省略) => mail.example.com. 
web               IN CNAME www 
			# CNAME记录为别名,可以使用web.example.com来代表www.example.com                   
  • 修改Zone的配置文件
[root@Server ~]# cd /var/named/

# 将模板文件复制两份,一份为正向解析文件,一份为逆向解析文件
[root@Server named]# cp -p named.loopback bad.boy.com.zone
[root@Server named]# cp -p named.loopback named.192.168.43
[root@Server named]# vim bad.boy.com.zone
$TTL 1D ;生存时间
@       IN SOA  bad.boy.com. root.bad.boy.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H)     ; minimum
        IN NS   www.bad.boy.com.
www     IN A    192.168.43.128
        IN MX 10 ftp.bad.boy.com.
ftp     IN A    192.168.43.10
dns     IN A    192.168.43.20
web     IN CNAME www ;表示web.bad.boy.com可以替代www.bad.boy.com
[root@Server named]# vim named.192.168.43 
$TTL 1D
@       IN SOA  bad.boy.com. root.bad.boy.com. (
                                        0       ; serial
                                        1D      ; refresh,刷新时间
                                        1H      ; retry,重试时间
                                        1W      ; expire,超时时间
                                        3H )    ; minimum,无效回答缓存时间
        IN NS   bad.boy.com.
128     IN PTR  www.bad.boy.com.
10      IN PTR  ftp.bad.boy.com.
20      IN PTR  dns.bad.boy.com.
  • 注意复制模板文件时,一定要使用-p参数,复制的同时复制属主和属组以及相关的权限信息,如果文件的属主属组不是named,则需要使用chgrpchown命令修改属主属组
  • SOA后面的域名最后必须要有一个.
  • 重新启动DNS服务器
[root@Server ~]# systemctl restart named
  • 在服务端测试
[root@Server ~]# nslookup 
> 192.168.43.128
Server:		192.168.43.128
Address:	192.168.43.128#53

128.43.168.192.in-addr.arpa	name = www.bad.boy.com.
> 192.168.43.10
Server:		192.168.43.128
Address:	192.168.43.128#53

10.43.168.192.in-addr.arpa	name = ftp.bad.boy.com.
> 192.168.43.20
Server:		192.168.43.128
Address:	192.168.43.128#53

20.43.168.192.in-addr.arpa	name = dns.bad.boy.com.
> www.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

Name:	www.bad.boy.com
Address: 192.168.43.128
> web.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

web.bad.boy.com	canonical name = www.bad.boy.com.
Name:	www.bad.boy.com
Address: 192.168.43.128
> ftp.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

Name:	ftp.bad.boy.com
Address: 192.168.43.10
> dns.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

Name:	dns.bad.boy.com
Address: 192.168.43.20
> exit

# 也可以使用host命令来解析
[root@Server ~]# host 192.168.43.128
128.43.168.192.in-addr.arpa domain name pointer www.bad.boy.com.
[root@Server ~]# host web.bad.boy.com
web.bad.boy.com is an alias for www.bad.boy.com.
www.bad.boy.com has address 192.168.43.128
www.bad.boy.com mail is handled by 10 ftp.bad.boy.com.
[root@Server ~]# host ftp.bad.boy.com
ftp.bad.boy.com has address 192.168.43.10
[root@Server ~]# host 192.168.43.10
10.43.168.192.in-addr.arpa domain name pointer ftp.bad.boy.com.
[root@Server ~]# 

客户端配置

Linux客户端测试

  • 在Linux客户端配置DNS服务器的地址
    • 【DHCP服务搭建】中,已经为Linux客户端分配了DNS服务器的IP地址为192.168.43.128
    • 如果使用的是静态IP地址,则需要手动配置DNS服务器的IP地址
[root@Client ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes  
IPADDR=192.168.43.15
NETMASK=255.255.255.0
GATEWAY=192.168.43.1
DNS1=192.168.43.128
[root@Client ~]# systemctl restart network
[root@Client ~]#
  • 在HTTP服务中,由于没有DNS服务器,做了本地的IP-域名映射关系,现在已经部署了DNS服务器,则可以删除之前的映射关系
[root@Client ~]# vim /etc/hosts
#192.168.43.128 www.bad.boy.com
[root@Client ~]#
  • 在Linux客户端使用域名访问HTTP服务器
    • 如果是命令行界面,可以直接使用pingcurl命令测试
[root@Client ~]# ping www.bad.boy.com
PING www.bad.boy.com (192.168.43.128) 56(84) bytes of data.
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=1 ttl=64 time=0.458 ms
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=2 ttl=64 time=0.337 ms
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=3 ttl=64 time=0.569 ms
^C
--- www.bad.boy.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.337/0.454/0.569/0.097 ms
[root@Client ~]# ping web.bad.boy.com
PING www.bad.boy.com (192.168.43.128) 56(84) bytes of data.
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=1 ttl=64 time=0.401 ms
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=2 ttl=64 time=0.576 ms
64 bytes from www.bad.boy.com (192.168.43.128): icmp_seq=3 ttl=64 time=0.665 ms
^C
--- www.bad.boy.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.401/0.547/0.665/0.111 ms

# 使用curl命令访问网页
[root@Client ~]# curl www.bad.boy.com
?<!DOCTYPE html>
<html>
<head>
    <title>坏坏-5的博客</title>

    <!-- meta -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

....

<script src="js/script.js"></script>

</body>
[root@Client ~]# 
  • 使用nslookup命令测试
[root@Client ~]# nslookup 
> 192.168.43.128
Server:		192.168.43.128
Address:	192.168.43.128#53

128.43.168.192.in-addr.arpa	name = www.bad.boy.com.
> 192.168.43.10
Server:		192.168.43.128
Address:	192.168.43.128#53

10.43.168.192.in-addr.arpa	name = ftp.bad.boy.com.
> web.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

web.bad.boy.com	canonical name = www.bad.boy.com.
Name:	www.bad.boy.com
Address: 192.168.43.128
> dns.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

Name:	dns.bad.boy.com
Address: 192.168.43.20
> ftp.bad.boy.com
Server:		192.168.43.128
Address:	192.168.43.128#53

Name:	ftp.bad.boy.com
Address: 192.168.43.10
> exit

[root@Client ~]# 

Windows客户端测试

  • 同样删除在HTTP服务搭建中对hosts文件的修改,需要手动设置DNS服务器的IP地址
    • 因为这里使用的是仅主机模式,即使用的是VM net1网卡,所以手动去设置VM net1网卡的DNS服务器
  • 使用www.bad.boy.com访问HTTP服务器
  • 使用web.bad.boy.com访问HTTP服务器

以上内容均属原创,如有不详或错误,敬请指出。

以上是关于DNS服务器搭建的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建DNS服务器?

Centos7搭建DNS服务器

搭建DNS服务器:正向解析区域反向解析区域主从DNS

CentOS7 搭建 DNS 域名解析服务器

如何配置本地搭建的DNS服务器解析互联网?

Service系统服务:搭建单区域DNS服务器特殊DNS解析配置DNS子域授权搭建并测试缓存DNS