Administrator
Administrator
发布于 2024-08-28 / 5 阅读
0
0

DNS

DNS 是什么?

DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。

你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163.com,首先要通过DNS查出它的IP地址是112.48.162.8

为啥需要DNS

NS服务器: 说白了, 就是一台翻译 名字到IP 的 软件。

IP: IP就是IP, 不解释。

下面, 我们来看一下逻辑关系: 假设某设备(充当DNS客户端)需要解析域名a.b.c.d, 于是就可以向DNS服务器发起请求, 然后然后DNS服务器将解析的IP结果w.x.y.z返回给客户端。

由于比较常见, 所以还是复习了一下, 至于为什么需要DNS, 你只要想想你经常使用的www.baidu.com就可以了, 这个可比其ip(http://36.152.44.95/)方便记忆多了。

域名的形式

域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。 如下图所示:

其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。

国家顶级域名

中国:cn, 美国:us,英国uk…

通用顶级域名

com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织…

反向域名

arpa,用于PTR查询(IP地址转换为域名)

域名的层级

由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解

  • 根域名 :.root 或者 . ,根域名通常是省略的

  • 顶级域名,如 .com.cn

  • 次级域名,如 baidu.com 里的 baidu,这个是用户可以进行注册购买的

  • 主机域名,比如 baike.baidu.com 里的baike,这个是用户可分配的

主机名.次级域名.顶级域名.根域名
​
baike.baidu.com.root

eg :我们熟悉的,www.baidu.com

  1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。

  2. baidu: 二级域名,指公司名。

  3. www: 表示主机域名为 www。

域名是分层结构,域名服务器也是对应的层级结构。 有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

由高向低进行层次划分,可分为以下几大类:

分类

作用

根域名服务器

最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助

顶级域名服务器

负责管理在该顶级域名服务器下注册的二级域名

权限域名服务器

负责一个区的域名解析工作

本地域名服务器

当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器

注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为 区域 (Zone)

DNS 资源记录

在 DNS 服务器上,一个域名及其下级域名组成一个区域 (Zone)。一个 Zone的 相关的 DNS 信息构成一个数据库文件。

下面是一条A类型的资源记录(简称为A记录):域名 www.zdns.cn 的数据为 202.173.11.10

记录一条域名信息映射关系,称之为资源记录(RR)。当我们查询域名www.zdns.cn的时候,查询结果得到的资源记录结构体中有如下数据:

  • TTL,就是生存周期,是递归服务器会在缓存中保存该资源记录的时长。

  • 网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。

  • type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。

  • rdata是资源记录数据,就是域名关联的信息数据。

每个区域(Zone)数据库文件都是由资源记录(RR)构成的,一个资源记录就是一行文本,提供了一组有用的 DNS 配置信息。在DNS系统中,最常见的资源记录是Internet类记录,该记录由包含4个字段的数据构成:Name、Value、Type、TTL。其中Name和Value可以理解为一对键值对,但是其具体含义取决于Type的类型,TTL记录了该条记录应当从缓存中删除的时间。

常见的资源记录类型如表所示。

类型

编码

内容

A

1

将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址

NS

2

权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析

CNAME

5

别名记录,主机别名对应的规范名称

SOA

6

起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器

PTR

12

IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名

MX

15

邮件交换记录,指定负责接收和发送到域中的电子邮件的主机

TXT

16

文本资源记录,用来为某个主机名或域名设置的说明

AAAA

28

将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址

DNS域名解析的过程

1、在浏览器上请求www.baidu.com,实际上请求www.baidu.com.
2、**浏览器**先查询浏览器缓存,有直接返回,没有则进入下一步
3、**浏览器**查询操作系统缓存,有直接返回,没有则进行下一步
4、**浏览器**查询/etc/hosts文件,有直接返回,没有则进行下一步
5、**浏览器**查询本地dns服务器(114.114.114.114),有直接返回,没有则进行下一步
以上为递归操作(Recursion),以下为迭代操作
6、**本地dns服务器**访问根域名服务器(.),根dns服务器会告诉本地dns服务器:顶级域名(com)的ip地址
7、**本地dns服务器**访问顶级dns服务器(com),顶级dns服务器会告诉本地dns服务器:二级域名(baidu)的ip地址
8、**本地dns服务器**访问二级dns服务器(baidu),二级dns服务器会告诉本地dns服务器:三级域名(www)的ip地址
9、**本地dns服务器**访问三级dns服务器(www),三级dns服务器若知道(www.baidu.com)的ip,就会将其告诉本地dns服务器,若不知,则无法解析
10、本地域名服务器将得到的结果返回给浏览器

实战:nslookup 进行IP查看

Nslookup一般是用来确认DNS服务器动作的.

nslookup有多个选择功能用命令行键入nslookup<主机名>执行,即可显示出目标服务器的主机名和对应的IP地址,称之为正向解析.

如果不能使用dig、nslookup,如下:

[root@cdh1 ~]# nslookup www.baidu.com
-bash: nslookup: command not found
​
123

报错,命令找不到,是因为新安装的centos7,没有安装bind-utils,安装后就可以运行nslookup了

安装相应软件包

yum install -y bind-utils

1 使用命令 nslookup 域名 查询IP

[root@cdh1 ~]# nslookup www.baidu.com
Server:         10.0.2.3
Address:        10.0.2.3#53
​
Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 36.152.44.95
Name:   www.a.shifen.com
Address: 36.152.44.96
Name:   www.a.shifen.com
Address: ::1
​
12345678910111213

结果说明如下:

Server: 10.0.2.3 --->指定的dns服务器
Address: 10.0.2.3#53 ------>指定的dns服务器的IP和端口
​
​
Non-authoritative answer: ----->未验证的回答
baidu.com  canonical name = www.a.shifen.com. ------->目标域名的规范名称(正名/别名)记录
Name:   www.a.shifen.com   ------->目标域名
Address: 36.152.44.95     ------->目标返回的Ip
Name:   www.a.shifen.com   ------->目标域名
Address: 36.152.44.96     ------->目标返回的Ip
Name:   www.a.shifen.com  
Address: ::1
123456789101112

没有指定DNS服务器,使用默认的本地DNS服务器,保存在 /etc/resolv.conf 配置文件中。

[root@cdh1 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3

BIND安装部署

BIND(Berkeley Internet Name Daemon)伯克利 Internet 域名服务,BIND不是唯一能够提供域 名服务的DNS服务程序。 默认监听端口:UDP 53 主配置文件: /etc/named.conf 在Centos系统中自带BIND安装软件。 bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm 各软件包的主要作用如下: bind:提供了域名服务的主要程序及相关文件。 bind-utils:提供了对DNS服务器的测试工具程序,如nslookup等。 bind-libs:提供了bind、bind-utils 需要使用的库函数。 bind-chroot:为BIND服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND的根目 录),以提高安全性。 默认已安装bind-utils 和 bind-libs,因此只需要安装bind和bind-chroot即可。 指令: yum -y install bind

/var/named:bind软件-服务名named-工作目录 /var/named/data:数据目录 /var/named/named.ca:根域名文件 /var/named/named.empty:空文件 /var/named/named.localhost:解析localhost /var/named/named.loopback:解析loopback /var/named/slaves:dns服务器作为从服务器存放解析记录的

vim /etc/named.conf

listen-on定义监听端口,如果所有地址都监听,则只写端口

directory 定义数据文件目录

allow-query 允许哪些主机查询

配置

对于配置主DNS需要先配置一个区域,后配置区域解析文件 对于配置从DNS则只需要配置与主一样的区域即可

配置正向解析

第一步配置区域:进入/etc/named.conf
zone "gts.com" IN {
        type master;
        allow-transfer {192.168.10.11;};
        file "gts.com.zone";
};
zone "10.168.192.in-addr.arpa" IN {
        type master;
        allow-transfer {192.168.10.11;};
        file "192.168.10.zone";
};

type: 类型,主要有三种hint(起一个提示作用),master(主dns服务器),slave(从dns服务器) allow-transfer :允许哪个从dns服务器从本主dns服务器同步 file:存储区域解析文件的地址,完整是/var/named/openlab.zone 每个语句完成后加分号(;)当区域完成之后在大括号外加分号(;)

cd /var/named/ #进入/var/named文件夹

cp named.localhost gts.com.zone #复制named.localhost并重命名为gts.com.zone

chown named.named gts.com.zone

vim gts.com.zone

第二步配置区域解析文件,进入/var/named/gts.com.zone,对应区域配置中存储区域解析文件的地址
$TTL 1D
@       IN SOA @  gts.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
​
        NS      dns.gts.com.
dns     A       192.168.10.13
www     A       192.168.10.11
eee     A       192.168.10.10

$TTL 1D:为所有的RR(Resource Record)设置缓存时间,也可以为单条记录设置缓存时间 记录的格式:name TTL IN type value 第一条记录是SOA记录 第二条记录是NS 第三条记录时MX 往下就是解析信息

type:	SOA:授权记录:即我要把哪一个区域交给谁去解析, 还要有主从同步的设置,以及管理员的邮箱
		NS:name server: 来定义我们的本地dns服务器
		MX:邮箱记录
		A:将FQDN -> IP 即正向解析成为ipv4
		AAAA:将FQDN -> IP 即正向解析成为ipv6
		PTR:将IP -> FQDN 即反向解析

SOA记录补充: @ IN SOA dns.openlab.com. test.163.com(0 1D 1H 1W 3H) @:可以用@来代表区域 @==openlab.zone dns.openlab.com. 代表的类型是NS(NameServer) test@.163.com -> test.163.com管理员邮箱地址 (0 1D 1H 1W 3H):主从同步设置,第一个字段是serial(序列号,越大代表文件越新)第二个字段是refresh(刷新时间)第三个字段是retry(重新尝试连接)第四个字段是expire(失效时间)第五个字段是minimum ttl(最小缓存时间)

保存并退出后可检查配置文件是否出错 named-checkconf /etc/named.conf //检查区域 named-checkzone /var/named/openlab.zone //检查区域解析文件

无误后可重起dns服务 systemctl restart named

[root@localhost named]# nslookup eee.gts.com
Server:		192.168.10.13
Address:	192.168.10.13#53

Name:	eee.gts.com
Address: 192.168.10.10

[root@localhost named]# nslookup www.gts.com
Server:		192.168.10.13
Address:	192.168.10.13#53

Name:	www.gts.com
Address: 192.168.10.11

[root@localhost named]# nslookup dns.gts.com
Server:		192.168.10.13
Address:	192.168.10.13#53

Name:	dns.gts.com
Address: 192.168.10.13

配置反向解析

[root@localhost ~]# cd /var/named/ [root@localhost named]# cp named.loopback 192.168.10.zone

chown named.named 192.168.10.zone

vim /var/named/192.168.10.10.zone

$TTL 1D
@       IN SOA  @ gts.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.gts.com.
13      PTR     dns.gts.com.
11      PTR     www.gts.com.
10      PTR     eee.gts.com.

验证

[root@localhost named]# systemctl restart named
[root@localhost named]# nslookup 192.168.10.10
10.10.168.192.in-addr.arpa	name = eee.gts.com.

[root@localhost named]# nslookup 192.168.10.11
11.10.168.192.in-addr.arpa	name = www.gts.com.

[root@localhost named]# nslookup 192.168.10.13
13.10.168.192.in-addr.arpa	name = dns.gts.com.

从DNS服务器搭建

1、配置主文件 vim /etc/named.conf

listen-on port 53 { 192.168.10.11; }; //本机IP

allow-query     { any; };
123

2、配置区域文件 vim /etc/named.rfc1912.zones

zone "aaa.com" IN {
        type slave;   //从模式
        masters { 192.168.0.13; };  //写上主服务器的IP
        file "slaves/gts.com.zone";
        allow-update { none; };
};

zone "10.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.10.13; };
        file "slaves/192.168.10.zone";
};
注意:master 后面的大括号中间外面都要有空格

3、给网卡添加DNS

三、 测试 nslookup

缓存DNS服务器搭建

- 客户端

1、安装

yum install -y dnsmasq

2、配置文件 vim /etc/dnsmasq.conf

domain=aaa.com
server=192.168.18.128
cache-size=150

3、测试 关掉主机之后,缓存机依然可以用解析记录返回给浏览器


评论