DNS域名解析服务

1 篇文章 0 订阅

学习总结所用《 Linux就该这么学 》

DNS域名解析服务

  • DNS(Domain Name System,域名系统)

  • 为了降低用户访问网络资源的门槛,DNS技术应运而生

  • 简单来说,用户在浏览器中输入域名或IP地址时,DNS服务器将域名解析为IP地址(正向解析),或将IP地址解析为域名(反向解析),然后就可直接访问指定的网站了

  • DNS域名解析服务是一个分布式的数据库系统

  • 域名后缀一般分为国际域名和国内域名。原则上域名后缀都有严格的定义,但在实际使用时可不必严格遵守

  • .com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)

  • 由于全球庞大的请求数量无法被某一台服务器全部处理掉,DNS提供了三种类型的服务器:

    主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系

    从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况

    缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率

  • 主服务器是用于管理域名和IP地址对应关系的真正服务器;
    从服务器的数据来源于主服务器,分散部署在各个国省市区,以便让用户就近查询域名,从而减轻主服务器的负载压力;
    缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求

  • DNS域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式

  • 递归查询是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户

  • 迭代查询是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果

  • 域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于DNS才能正常运行

安装Bind服务程序

  • BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序
  • 在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,可有效地限制bind服务程序,使其仅能对自身的配置文件进行操作,确保整个服务器的安全
  • 在Linux系统中,bind服务程序的名称是named
# yum install -y bind-chroot

主配置文件(/etc/named.conf):文件中的参数用来定义bind服务程序的运行

区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件

数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件

修改主配置文件,将第11行和第17行的地址均修改为any

# vim /etc/named.conf
  1 //
  2 // named.conf
  3 //
  4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  5 // server as a caching only nameserver (as a localhost DNS resolver only).
  6 //
  7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
  8 //
  9 
 10 options {
 11         listen-on port 53 { any; }; # 服务器上的所有IP地址均可提供DNS域名解析服务
 12         listen-on-v6 port 53 { ::1; };
 13         directory       "/var/named";
 14         dump-file       "/var/named/data/cache_dump.db";
 15         statistics-file "/var/named/data/named_stats.txt";
 16         memstatistics-file "/var/named/data/named_mem_stats.txt";
 17         allow-query     { any; }; # 允许所有人对本地服务器发送DNS查询请求
 18 
 19         /* 
 20          - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
 21          - If you are building a RECURSIVE (caching) DNS server, you need to enable 
 22            recursion. 
 23          - If your recursive DNS server has a public IP address, you MUST enable access 
 24            control to limit queries to your legitimate users. Failing to do so will
 25            cause your server to become part of large scale DNS amplification 
 26            attacks. Implementing BCP38 within your network would greatly
 27            reduce such attack surface 
 28         */
 29         recursion yes;
 30 
 31         dnssec-enable yes;
 32         dnssec-validation yes;
 33         dnssec-lookaside auto;
 34 
 35         /* Path to ISC DLV key */
 36         bindkeys-file "/etc/named.iscdlv.key";
 37 
 38         managed-keys-directory "/var/named/dynamic";
 39 
 40         pid-file "/run/named/named.pid";
 41         session-keyfile "/run/named/session.key";
 42 };
 43 
 44 logging {
 45         channel default_debug {
 46                 file "data/named.run";
 47                 severity dynamic;
 48         };
 49 };
 50 
 51 zone "." IN {
 52         type hint;
 53         file "named.ca";
 54 };
 55 
 56 include "/etc/named.rfc1912.zones";
 57 include "/etc/named.root.key";
 58 
  • 服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器

  • 配置文件的参数写错,可执行named-checkconf命令检查主配置文件语法或参数的错误;named-checkzone命令检查数据配置文件语法或参数的错误

正向解析——域名→IP

  1. 编辑区域配置文件:在文件最下面添加信息

    # vim /etc/named.rfc1912.zones
    ......
    zone "zengzhilai.com" IN {
            type master; # 服务类型
            file "zengzhilai.com.zone"; # 域名与IP地址规则保存的文件位置
            allow-update{none;}; # 允许哪些客户机动态更新解析信息
    };
    
  2. 编辑数据配置文件:复制一份正向解析的模板文件(named.localhost),然后编辑数据配置文件,配置完成重启named服务
    cp的-a参数:保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容

     # cd /var/named
     # ls -al named.localhost 
     -rw-r-----. 1 root named 152 Jun 21  2007 named.localhost
     # cp -a named.localhost zengzhilai.com.zone
     # ls
     chroot  dynamic   named.empty      named.loopback  zengzhilai.com.zone
     data    named.ca  named.localhost  slaves
    
     # vim zengzhilai.com.zone
     $TTL 1D
     @       IN SOA          zengzhilai.com.   root.zengzhilai.com. (
            #授权信息开始     #DNS区域的地址      #域名管理员的邮箱(不要用@符合)
                                             0       ; serial #更新序列号
                                             1D      ; refresh #更新时间
                                             1H      ; retry #重试延时
                                             1W      ; expire #失效时间
                                             3H )    ; minimum #无效解析记录的缓存时间
             NS              ns.zengzhilai.com.      #域名服务器记录
     ns      IN A            192.168.40.131          #地址记录(ns.zengzhilai.com.)
             IN MX 10        mail.zengzhilai.com.    #邮箱交换记录
     mail    IN A            192.168.40.131          #地址记录(mail.linuxprobe.com.)
     www     IN A            192.168.40.131          #地址记录(www.linuxprobe.com.)
     bbs     IN A            192.168.40.131          #地址记录(bbs.linuxprobe.com.)
     # systemctl restart named
    
  3. 关闭防火墙或开放53号端口,以便外网访问

    # systemctl stop iptables
    
  4. Linux本机作客户端,检验解析结果

    Linux中指定DNS服务器,重启网卡后失效(恢复原样)

    # vim /etc/resolv.conf
    nameserver 192.168.40.131
    

    nslookup命令检测能否从DNS服务器中查询到域名与IP地址的解析记录,可更准确地检验DNS服务器是否已经能够为用户提供服务

    # nslookup
    > www.zengzhilai.com
    Server:		192.168.40.131
    Address:	192.168.40.131#53
    
    Name:	www.zengzhilai.com
    Address: 192.168.40.131
    > bbs.zengzhilai.com
    Server:		192.168.40.131
    Address:	192.168.40.131#53
    
    Name:	bbs.zengzhilai.com
    Address: 192.168.40.131
    
  5. Windows10作客户端,检验解析结果

    Windows10客户端指定DNS服务器
    Windows10客户端指定DNS服务器
    在cmd中用ping命令查询检测

    C:\Users\zengzhilai>ping www.zengzhilai.com
    
    正在 Ping www.zengzhilai.com [192.168.40.131] 具有 32 字节的数据:
    来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.40.131 的回复: 字节=32 时间<1ms TTL=64
    
    192.168.40.131 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    

反向域名——IP→域名

  • 反向解析一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽有某些域名发送的垃圾邮件
  • 反向解析也可针对某个IP地址进行反向解析,大致判断有多少个网站在上面运行
  • 当购买虚拟主机时,可使用这一功能验证虚拟主机提供商是否有严重的超售问题
  1. 编辑区域配置文件:在正向解析参数后添加反向解析参数

    # vim /etc/named.rfc1912.zones
    ......
    zone "zengzhilai.com" IN {
            type master;
            file "zengzhilai.com.zone";
            allow-update{none;};
    };
    
    zone "40.168.192.in-addr.arpa" IN {
            type master;
            file "192.168.40.arpa";
    };
    
  2. 编辑数据配置文件:从目录/var/named复制一份反向解析模板文件(named.loopback),然后填写参数,重启named服务

    # cd /var/named
    # cp -a named.loopback 192.168.40.arpa
    # vim 192.168.40.arpa
    $TTL 1D
    @       IN SOA  zengzhilai.com.  root.zengzhilai.com. (
                                            0       ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      ns.zengzhilai.com.
    ns      A       192.168.40.131
    131     PTR     ns.zengzhilai.com.     #PTR为指针记录,仅用于反向解析中
    131     PTR     mail.zengzhilai.com.
    131     PTR     www.zengzhilai.com.
    132     PTR     bbs.zengzhilai.com.
    # systemctl restart named
    
  3. Linux本机作客户端,检验解析结果

    在正向解析中指定了DNS服务器(重启网卡恢复原样),此处不需要再指定

    # nslookup
    > 192.168.40.131
    Server:		192.168.40.131
    Address:	192.168.40.131#53
    
    131.40.168.192.in-addr.arpa	name = mail.zengzhilai.com.
    131.40.168.192.in-addr.arpa	name = www.zengzhilai.com.
    131.40.168.192.in-addr.arpa	name = ns.zengzhilai.com.
    > 192.168.40.141
    Server:		192.168.40.131
    Address:	192.168.40.131#53
    
    141.40.168.192.in-addr.arpa	name = bbs.zengzhilai.com.
    

部署从服务器

主服务器与从服务器分别使用的操作系统与IP地址信息:(/etc/redhat-release文件可查看当前系统版本的详细信息)

主机名称操作系统IP地址
主服务器RHEL7.0192.168.40.131
从服务器RHEL6.8192.168.40.123
  1. 清空主服务器已有的防火墙规则链,以防影响实验

    # iptables -F
    # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination 
    ......
    
  2. 修改 主服务器 的区域配置文件:允许该从服务器的更新请求,即修改allow-update 参数,然后重启named服务

    # vim /etc/named.rfc1912.zones
    ......
    zone "zengzhilai.com" IN {
            type master;
            file "zengzhilai.com.zone";
            allow-update{ 192.168.40.123; };
    };
    
    zone "40.168.192.in-addr.arpa" IN {
            type master;
            file "192.168.40.arpa";
            allow-update{ 192.168.40.123; };
    };
    # systemctl restart named
    
  3. 在 从服务器 中填写主服务器的IP地址与要抓取的区域信息,然后重启named服务

    # vim /etc/named.rfc1912.zones
    ......
    zone "zengzhilai.com" IN {
            type slave; #服务类型是slave()
            masters { 192.168.40.131; }; #主服务器的IP地址
            file "slaves/zengzhilai.com.zone";#同步数据配置文件后要保存到的位置,在/var/named目录
    };
    
    zone "40.168.192.in-addr.arpa" IN {
            type slave;
            masters { 192.168.40.131; };
            file "slaves/192.168.40.arpa";
    };
    # service named restart
    停止 named:                                               [确定]
    启动 named:                                               [确定]
    
  4. 检验解析结果

    查看自动从主服务器上同步的数据配置文件

    # ls /var/named/slaves
    192.168.40.arpa  zengzhilai.com.zone
    

    指定从服务器的DNS服务器

    # vim /etc/resolv.conf
    nameserver 192.168.40.123
    
    # nslookup
    > www.zengzhilai.com
    Server:		192.168.40.123
    Address:	192.168.40.123#53
    
    Name:	www.zengzhilai.com
    Address: 192.168.40.131
    > 192.168.40.131
    Server:		192.168.40.123
    Address:	192.168.40.123#53
    
    131.40.168.192.in-addr.arpa	name = mail.zengzhilai.com.
    131.40.168.192.in-addr.arpa	name = www.zengzhilai.com.
    131.40.168.192.in-addr.arpa	name = ns.zengzhilai.com.
    

安全的加密传输

  • 互联网中的绝大多数DNS服务器(超过95%)都是基于BIND域名解析服务搭建的,而bind服务程序为了提供安全的解析服务,已经对TSIG(RFC 2845)加密机制提供了支持

  • TSIG主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即TSIG加密机制保证了DNS服务器之间传输域名区域信息的安全性

接上面的实验,同样使用这两台服务器:

主机名称操作系统IP地址
主服务器RHEL7.0192.168.40.131
从服务器RHEL6.8192.168.40.123
  1. 删除从服务器获取到的数据配置文件

    # ls -l /var/named/slaves/
    总用量 8
    -rw-r--r-- 1 named named 456 822 11:27 192.168.40.arpa
    -rw-r--r-- 1 named named 409 822 11:27 zengzhilai.com.zone
    # rm -rf /var/named/slaves/*
    
  2. 在主服务器生成密钥:用dnssec-keygen [参数]命令生成安全的DNS服务密钥

    生成一个主机名称为master-slave的128位HMAC-MD5算法的密钥文件

    # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
    Kmaster-slave.+157+31244
    # ls -al Kmaster-slave.+157+31244.*
    -rw-------. 1 root root  56 Aug 22 19:35 Kmaster-slave.+157+31244.key
    -rw-------. 1 root root 165 Aug 22 19:35 Kmaster-slave.+157+31244.private
    # cat Kmaster-slave.+157+31244.private 
    Private-key-format: v1.3
    Algorithm: 157 (HMAC_MD5)
    Key: GGdhTVxB0keBPsMZpRLixg==
    Bits: AAA=
    Created: 20190822113520
    Publish: 20190822113520
    Activate: 20190822113520
    

    dnssec-keygen命令的参数说明:

    参数作用
    -a指定加密算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等
    -b密钥长度(HMAC-MD5的密钥长度在1~512位之间)
    -n密钥的类型(HOST表示与主机相关)
  3. 在主服务器中创建密钥验证文件tansfer.key,并将密钥名称、加密算法和私钥加密字符串写入传输配置文件

    为安全起见,将文件所属组修改成named,并将文件权限设置得要小一点,且硬链接到/etc目录中

    # cd /var/named/chroot/etc/
    # vim transfer.key
    key "master-slave" {
            algorithm hmac-md5;
            secret "GGdhTVxB0keBPsMZpRLixg==";
    };
    # chown root:named transfer.key 
    # chmod 640 transfer.key 
    # ln transfer.key /etc/transfer.key
    
  4. 主服务器开启并加载Bind服务的密钥验证功能

    修改主服务器的主配置文件的2行,重启named服务:

    第18行:只允许带有master-slave密钥认证的DNS服务器同步数据配置文件
    第58行:加载密钥验证文件

    # vim /etc/named.conf
    ......
     10 options {
     11         listen-on port 53 { any; };
     12         listen-on-v6 port 53 { ::1; };
     13         directory       "/var/named";
     14         dump-file       "/var/named/data/cache_dump.db";
     15         statistics-file "/var/named/data/named_stats.txt";
     16         memstatistics-file "/var/named/data/named_mem_stats.txt";
     17         allow-query     { any; };
     18         allow-transfer { key master-slave; };
    ......
     55 
     56 include "/etc/named.rfc1912.zones";
     57 include "/etc/named.root.key";
     58 include "/etc/transfer.key";
    # systemctl restart named
    

    至此,DNS主服务器的TSIG密钥加密传输功能就已经配置完成

    重启从服务器的bind服务程序,发现已不能再自动获取到数据配置文件了

  5. 配置从服务器,使其支持密钥验证(与主服务器配置相似)

    # cd /var/named/chroot/etc/
    # vim transfer.key
    key "master-slave" {
    	algorithm hmac-md5;
    	secret "GGdhTVxB0keBPsMZpRLixg==";
    };
    # chown root:named transfer.key 
    # chmod 640 transfer.key 
    # ln transfer.key /etc/transfer.key
    
  6. 从服务器开启并加载从服务器的密钥验证功能

    修改从服务器的主配置文件的2行,重启named服务:

    第9行:加载密钥验证文件
    第40~42行:主服务器的IP地址和密钥名称

    # vim /etc/named.conf
    ......
      9 include "/etc/transfer.key";
     10 options {
     11         listen-on port 53 { any; }; 
     12         listen-on-v6 port 53 { ::1; };
     13         directory       "/var/named";
     14         dump-file       "/var/named/data/cache_dump.db";
     15         statistics-file "/var/named/data/named_stats.txt";
     16         memstatistics-file "/var/named/data/named_mem_stats.txt";
     17         allow-query     { any; };
     18         recursion yes;
     19         
     20         dnssec-enable yes;
     21         dnssec-validation yes;
     22         /* Path to ISC DLV key */
     23         bindkeys-file "/etc/named.iscdlv.key";
     24 
     25         managed-keys-directory "/var/named/dynamic";
     26 };
     27 
     28 logging {
     29         channel default_debug {
     30                 file "data/named.run";
     31                 severity dynamic;
     32         };
     33 };
     34 
     35 zone "." IN {
     36         type hint;
     37         file "named.ca";
     38 };
     39 
     40 server 192.168.40.131 {
     41         keys { master-slave; };
     42 };
     43 
     44 include "/etc/named.rfc1912.zones";
     45 include "/etc/named.root.key";
    # service named restart
    停止 named:                                               [确定]
    启动 named:                                               [确定]
    
  7. DNS从服务器同步域名区域数据

    # ls /var/named/slaves/
    192.168.40.arpa  zengzhilai.com.zone
    

注意:

​ 由于两台服务器的时间不一致导致出现了下面的错误:时钟不同步clocks are unsynchronized/var/log/message文件可查看错误):

[外链图片转存失败(img-JEsazFZa-1567085501248)(G:\博客笔记\img\DNS\错误clocks are unsynchronized.png)]

最简单的方法是:用date命令使服务器时间一致,例:date -s "2019/8/23/ 16:49"

部署缓存服务器

  • DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器
  • 简单来说,缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存在主机本地,从而提升下次解析的效率
  • DNS缓存服务器一般用于经常访问某些固定站点且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛
  • 且缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关

确定]


7. **DNS从服务器同步域名区域数据**

~~~c
# ls /var/named/slaves/
192.168.40.arpa  zengzhilai.com.zone

注意:

​ 由于两台服务器的时间不一致导致出现了下面的错误:时钟不同步clocks are unsynchronized/var/log/message文件可查看错误):
错误:时钟不同步

最简单的方法是:用date命令使服务器时间一致,例:date -s "2019/8/23/ 16:49"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值