内容目录

dns基本概述

为什么需要域名

  • 在互联网中,使用ip地址与服务器进行通信根本行不通,原因如下:
    • 1.不好记忆,如:学校官网的ip地址是39.104.16.126,难以记忆
    • 2.ip地址会经常发生变更,所以通过ip地址去访问某台机器就容易出现无法访问的情况
  • 此时dns就应运而生了,那dns解决了什么问题
    • dns主要用来维护域名与ip地址的对应关系
    • 将(好记忆的字符串)与(不好记忆的ip地址)进行关联
      jd.com-->1.1.1.1
      tb.com-->2.2.2.2

什么是dns

域名系统dns(domain name system)主要功能是将用户请求的域名转换为ip地址;dns就像一位翻译官,它的基本工作原理可以用下图来表示:

file

dns域名结构

  • 由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法
    • 1.互联网中的域名是有结构规划的
    • 2.由于域名进行了分级,在进行域名和ip地址解析时能更容易找到
    • 3.其次域名具备全球唯一性

file

  • 根域:知道所有顶级域名服务器的域名和地址
    • 全世界只有13组根服务器,其中10台设置在美国,另外的3台分别在英国、瑞典、日本
  • 顶级域:知道所有顶级域名服务器下注册的所有二级域名的ip地址
    • 顶级域有两种:通用域(com、cn)和国家域(hkjp
    • 顶级域名由ICANN(互联网名称与数字地址分配机构)委任的注册机构负责运行
  • 二级域:负责一个区的域名服务器(tencent.com)
    • 无需到ICANN进行申请,只需要到运行顶级域的注册机构去申请即可
    • 如果申请的域名没有被注册,也没有被注册为商标,仅需要缴纳一笔年费即可获取
  • 三级域或主机名:
    • 根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如wordpress、zabbix、jumpserver

dns查询原理

下面的示例概述了本地解析器没有域名对应的缓存,dns查询所需的步骤:

  • 1.用户在浏览器中输入example.com,则由本地域名服务器开始进行递归查询
  • 2.本地域名服务器采用迭代查询的方法,向根域名服务器进行查询
  • 3.根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器.com TLD(Top-Level Domain)ip地址
  • 4.本地域名服务器向顶级域名服务器.com TLD进行查询
  • 5..com TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的ip地址
  • 6.本地域名服务器向example.com权威域名服务器发送查询
  • 7.example.com权威域名服务器告诉本地域名服务器所查询的主机ip地址
  • 8.本地域名服务器最后把查询到的ip地址响应给浏览器

file

递归查询

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

迭代查询

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

dns记录类型

A(Adress)地址记录
  • A记录可实现将域名指向ip地址,也称为正向解析
  • 正向解析:域名-->DNS服务返回ip

file

PTR(Pointer Record)逆向查询记录
  • PTR记录可以实现ip查找域名,也称为反向解析
  • 反向解析:ip-->DNS服务返回域名

file

CNAME(Canonical Name)规范名称记录
  • 当需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录
  • 最常用CNAME的场景有:WAF、CDN

file

NS(Name Server)域名服务器记录
  • 1.客户端查询DNS服务,如当前DNS无法提供权威解析,则返回一条NS记录
  • 2.客户端通过NS记录中提供的DNS权威服务器进行解析

file

企业自建DNS

  • 企业常规做法:购买域名、完成ICP备案,并使用公网DNS服务进行免费(付费)解析
  • 既然企业可以通过公网来完成域名解析,为何还要自建DNS
    • 1.内网web服务,例如:wordpress、zabbix、jumpserver等,不适合解析至公网
    • 2.内网中间件服务db、mq等,会经常迁移或扩缩容,应该使用域名对外提供,便于维护
    • 3.服务器都有hostnamehostname应该设置为FQDN,如何维护主机名和主机的内网ip的关系
  • 综上:我们需要构建至少一套企业内部的DNS服务

BIND基础应用

什么是BIND

  • BIND由美国加州大学开发并且维护,是一个开源、稳定、且应用广泛的DNS服务
    • 开源:指BIND服务源代码是开放的
    • 稳定:指BIND服务运行非常稳定
    • 广泛:政府企业、单位机构、学校等

BIND的组成

  • BIND提供域名解析服务、权威域名服务、DNS调试工具
    • 域名解析服务:将域名解析为ip地址
    • 权威域名服务:能从该服务器查询到完整域名对应的ip地址,则这台服务器就算权威解析
    • DNS调试工具:主要提供DNS客户端调试工具,供客户端使用

BIND服务实践

BIND服务安装
  • BIND的安装非常简单,只需要通过yum即可完成安装
    • bind提供主程序包
    • bind-utils提供工具包
yum install bind bind-utils
systemctl start named
systemctl enable named
BIND配置文件
  • 1.主配置文件格式
    • option {}:全局选项(监听端口、数据文件存储位置、缓存位置、权限等)
    • logging {}:服务日志选项
    • zone . {}:自定义区域配置
    • include:包含别的文件
  • 2.主配置文件注意事项
    • 语法非常严格
    • 文件权限属主root,属组named,文件权限640
  • 3.主配置示例文件
cat /etc/named.conf
options {
        //监听地址及端口
        listen-on port 53 { localhost; };
        listen-on-v6 port 53 { ::1; };
        //区域配置存储目录
        directory       "/var/named";
        //dns解析过内容的缓存文件
        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";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        //运行谁向本dns发起查询请求(localhost|ip|any)
        allow-query     { any; };

        //递归查询
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.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;
        };
};

//默认可以对任何域名提供解析服务,因为named.ca中存储的是全区根域服务器
zone "." IN {
        type hint;
        //区域配置文件名称
        file "named.ca";
};

//包含的其他文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
客户端验证解析

1.配置DNS服务器指向:在/etc/sysconfig/network-scripts/ifcfg-eth0里配置DNS1地址

vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.99.5

2.使用ping命令验证解析

ping blue.yn.cn
PING blue.yn.cn (139.199.79.133) 56(84) bytes of data.
64 bytes from 139.199.79.133 (139.199.79.133): icmp_seq=1 ttl=50 time=19.0 ms

自定义区域(域名)

  • 自定义域分为如下两类:

    • 主机域(内网):
      1.主机域其实是一个假的域名
      2.主机域是不能解析到互联网上
      3.主机域它只对局域网提供服务

    • 业务网(公网):
      1.业务域一般都是真实可用的
      2.业务域是需要对外网用户提供服务的域名

自定义区域配置文件
  • 区域zone文件定义在/etc/named.conf配置
  • 也可以配置在自定义的其他文件里,并在named.confinclude
  • 注意文件的权限,属主root,属组named,文件权限640
zone "dot.com" IN {
        type master|slave;  //自定义区域类型
        file /path/to/zonefile;  //绝对路径和相对路径
        allow-update {ip|none};  //允许哪个ip可以使用nsupdate动态更新区域文件
};
自定义区域数据库文件
  • 范例以及编写注意事项:
    • 1.严格注意语法书写,其格式非常严格;
    • 2.记录不准折行书写;
    • 3.单行记录开通不准空格或tab开头;
cat /var/named/dot.com.zone
$TTL 600  //dns失效时间,单位秒

//区域名称 IN SOA ns.dot.com. 管理员邮箱
//区域名称可以使用@表示,@表示当前域
dot.com. IN SOA ns.dot.com. qq.dot.com. (
        2024061117  //序列号(serial number)十进制,不能超过10位,通常使用日期时间戳
        10800  //刷新时间(refresh time),即每隔多久到主服务器检查一次
        900  //重试时间(retry time),即刷新不成功多久后重试,应该小于refresh time
        604800  //过期时间(expire time)当辅助dns无法联系主dns时,辅助dns在多长时间内认为其缓存是有效的
        86500  //权威应答的ttl(netgative answer ttl),缓存dns服务器可以缓存记录多长时间
)

//给客户端返回ns记录,dot.com这个域名是由哪几台权威服务器提供解析
dot.com.        IN      NS      ns1.dot.com.

//A记录,配置权威域名服务器的真实ip地址
ns1.dot.com.    IN      A       192.168.99.5

//真正的域名解析
blue.yn.cn.      IN      A       192.168.99.7
zabbix.dot.com.         IN      A       192.168.99.4
jumpserver.dot.com.     IN      A       192.168.99.6

BIND实战场景-1

  • 用户通过DNS服务器192.168.99.5解析xxx.dot.com
    • 1.添加dot.com区域配置文件
    • 2.添加区域数据库文件,配置ns记录,返回dns权威服务器地址
    • 3.该域的dns权威服务器为192.168.99.5
    • 4.添加该域的A记录解析
新增区域配置文件

1.在主配置文件/etc/named.conf,新增一个dot.com区域配置

cat /etc/named.conf
...
//自行配置权威域名解析dot.com
zone "dot.com" IN {
        type master;
        file "dot.com.zone";  //具体解析记录配置存储在哪个文件
};

2.检查配置文件语法
named-checkconf

新增区域数据库文件

1.添加区域数据库文件

cat /var/named/dot.com.zone
$TTL 600
dot.com. IN SOA ns.dot.com. qq.dot.com. (
        2024061117
        10800
        900
        604800
        86400
)
;给客户端返回ns记录,该域名由哪台权威服务器提供解析
dot.com.        IN      NS      ns1.dot.com.

ns1.dot.com.    IN      A       192.168.99.5

;域名解析记录
blue.yn.cn.      IN      A       192.168.99.7
zabbix.dot.com.         IN      A       192.168.99.4
jumpserver.dot.com.     IN      A       192.168.99.6

2.检查区域数据库文件配置
named-checkzone dot.com /var/named/dot.com.zone

3.重载dns服务器
rndc reload //Remote Name Domain Controllerr

客户端测试解析域名
  • 客户端测试域名解析
dig zabbix.dot.com @192.168.99.5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;zabbix.dot.com.                        IN      A

;; ANSWER SECTION:
zabbix.dot.com.         600     IN      A       192.168.99.4

;; AUTHORITY SECTION:
dot.com.                600     IN      NS      ns1.dot.com.

;; ADDITIONAL SECTION:
ns1.dot.com.            600     IN      A       192.168.99.5

dig zabbix.dot.com @192.168.99.5 +short
192.168.99.4

nslookup
> server 192.168.99.5
Default server: 192.168.99.5
Address: 192.168.99.5#53
> zabbix.dot.com
Server:         192.168.99.5
Address:        192.168.99.5#53

Name:   zabbix.dot.com
Address: 192.168.99.4

BIND实战场景-2

  • 用户通过dns服务器192.168.99.5解析xxx.c.com
    • 1.添加c.com区域配置文件
    • 2.添加区域数据库文件,配置ns记录,返回dns权威服务器地址
    • 3.该域的dns权威服务器为192.168.99.5
    • 4.添加该域的CNAME解析记录,解析至xxx.dot.com域名上
新增区域配置文件

1.再主配置文件/etc/named.conf,新增一个c.com区域配置

vim /etc/named.conf
zone "c.com" IN {
        type master;
        file "c.com.zone";
};

2.检查配置文件语法
named-checkconf

新增区域数据库文件

1.配置c.comCNAME解析记录

cat /var/named/c.com.zone
$TTL 600
c.com. IN SOA ns.c.com. qq.c.com. (
        2024061217
        10800
        900
        604800
        86400
)

c.com.          IN      NS      ns1.c.com.
ns1.c.com.      IN      A       192.168.99.5

wp.c.com.       IN      CNAME   blue.yn.cn.
zb.c.com.       IN      CNAME   zabbix.dot.com.
js.c.com.       IN      CNAME   jumpserver.dot.com.

2.检查区域数据库文件配置

named-checkzone c.com /var/named/c.com.zone
zone c.com/IN: loaded serial 2024061217
OK

3.重载DNS服务
rndc reload

客户端测试解析域名
dig wp.c.com @192.168.99.5 +short
blue.yn.cn.
192.168.99.7

nslookup
> server 192.168.99.5
Default server: 192.168.99.5
Address: 192.168.99.5#53
> wp.c.com
Server:         192.168.99.5
Address:        192.168.99.5#53

wp.c.com        canonical name = blue.yn.cn.
Name:   blue.yn.cn
Address: 192.168.99.7

BIND实战场景-3

  • 配置反向解析PTR:IP-->FQDN
    • 1.反向区域文件名称为逆向网络地址.in-addr-arpa.后缀组成
    • 2.例如192.168.99.5,完成格式为99.168.192.in-addr-arpa.
新增区域配置文件

1.在主配置文件/etc/named.conf,新增一个反向区域配置

vim /etc/named.conf
zone "99.168.192.in-addr.arpa" IN {
        type master;
        file "99.168.192.zone";
};

2.检查配置文件语法
named-checkconf

新增区域数据库文件

1.配置反向解析数据文件

cat /var/named/99.168.192.zone
$TTL 600
@ IN SOA 99.168.192.in-addr.arpa. qq.com. (
        2024061220
        10800
        900
        604800
        86400
)

@               IN      NS      DnsChronyAsible.com.
5               IN      PTR     dnsChronyAsible.com.

3               IN      PTR     ZabbixDB.com.
4               IN      PTR     ZabbixServer.com.
6               IN      PTR     jumpserver.com.
7               IN      PTR     wordpress.com.
8               IN      PTR     openvpn.com.

2.测试数据文件是否正确

named-checkzone 99.168.192.in-addr.arpa. /var/named/99.168.192.zone
zone 99.168.192.in-addr.arpa/IN: loaded serial 2024061220
OK
客户端测试解析域名
dig -x 192.168.99.3 +short
ZabbixDB.com.

host 192.168.99.3
3.99.168.192.in-addr.arpa domain name pointer ZabbixDB.com.

nslookup 192.168.99.3
3.99.168.192.in-addr.arpa       name = ZabbixDB.com.

DNS客户端工具

通用性 使用难易度
nslookup 支持多平台、应用广泛 使用简单、易懂
dig 常用于linux系统 比较专业
host linux系统 简单、明了
host
# 查询SOA记录
host -t SOA baidu.com
baidu.com has SOA record dns.baidu.com. sa.baidu.com. 2012148209 300 300 2592000 7200
# 查询NS记录
host -t NS baidu.com
baidu.com name server ns7.baidu.com.
baidu.com name server ns2.baidu.com.
baidu.com name server ns4.baidu.com.
baidu.com name server dns.baidu.com.
baidu.com name server ns3.baidu.com.
# 查询A记录
host -t A baidu.com
baidu.com has address 39.156.66.10
baidu.com has address 110.242.68.66

host 192.168.99.3
3.99.168.192.in-addr.arpa domain name pointer ZabbixDB.com.
host blue.yn.cn
blue.yn.cn has address 192.168.99.7
nslookup
# 解析域名对应的ip地址
nslookup baidu.com
Server:         192.168.99.5
Address:        192.168.99.5#53

Non-authoritative answer:
Name:   baidu.com
Address: 110.242.68.66
Name:   baidu.com
Address: 39.156.66.10
# 解析域名SOA记录
nslookup
> set q=soa
> baidu.com
Server:         192.168.99.5
Address:        192.168.99.5#53

Non-authoritative answer:
baidu.com
        origin = dns.baidu.com
        mail addr = sa.baidu.com
        serial = 2012148209
        refresh = 300
        retry = 300
        expire = 2592000
        minimum = 7200

Authoritative answers can be found from:
baidu.com       nameserver = ns2.baidu.com.
baidu.com       nameserver = ns7.baidu.com.
baidu.com       nameserver = dns.baidu.com.
baidu.com       nameserver = ns4.baidu.com.
baidu.com       nameserver = ns3.baidu.com.
ns4.baidu.com   internet address = 111.45.3.226
ns4.baidu.com   internet address = 14.215.178.80
ns2.baidu.com   internet address = 220.181.33.31
ns7.baidu.com   internet address = 180.76.76.92
dns.baidu.com   internet address = 110.242.68.134
ns3.baidu.com   internet address = 36.155.132.78
ns3.baidu.com   internet address = 153.3.238.93
ns7.baidu.com   has AAAA address 240e:940:603:4:0:ff:b01b:589a
ns7.baidu.com   has AAAA address 240e:bf:b801:1002:0:ff:b024:26de

nslookup 192.168.99.8
8.99.168.192.in-addr.arpa       name = openvpn.com.
dig
# 通过哪个dns来解析域名,正向解析
dig @192.168.99.5 js.c.com +short
jumpserver.dot.com.
192.168.99.6
# 通过ip解析对应的域名,反向解析
dig -x 192.168.99.7 +short
wordpress.com.

DNS递归查询

什么是递归查询

file

  • 如果你要建立一个授权域名服务器,仅提供本地已存在域名解析,那么将recursion参数设置为no
  • 如果你要建立一个递归DNS服务器,那么需要将recursion参数设置为yes
  • 如果递归dns服务器有公网ip地址,则需要开启访问控制功能,只有合法的用户才可以发起查询

递归查询配置参数

参数 选项 作用
recursion yes/no 是否开启递归查询请求
allow-recursion {address_match_list any none}; 限制客户端递归请求的范围

递归查询场景实践

开启递归查询
  • BIND默认配置中的recursion参数是启用的
    • 1.配置仅允许192.168.99.010.168.99.0网段用户可以查询
    • 2.使用客户端查询系统中存在的域名
    • 3.使用客户端查询系统中不存在的域名(让BIND进行递归查询)

1.修改/etc/named.conf配置文件

vim /etc/named.conf
recursion yes;
allow-recursion {192.168.99.0/24;10.168.99.0/24;};

rndc reload

2.查询存在BIND服务中的域名

dig jumpserver.dot.com +short
192.168.99.6

3.查询不存在BIND服务中的域名;能获得正确返回,原因是BIND进行了递归查询

dig qq.com +short
203.205.254.157
123.150.76.218
113.108.81.189
关闭递归查询

1.修改/etc/named.conf配置文件,关闭递归查询

vim /etc/named.conf
recursion no;

rndc reload

2.查询本地存在域名会成功返回;因为本地无需进行递归查询,即可返回权威解析

dig zabbix.dot.com +short
192.168.99.4

3.由于本地无法返回权威结果,同时也禁用了递归查询,所以查询本地不存在域名会有WARNING提示

dig blue.yn.cn
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blue.yn.cn.                    IN      A
最后修改日期: 2024年6月13日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。