DNS简单介绍与正反向解析的配置

DNS简介

DNS(Domain Name System)是互联网上的一项服务,是一种将域名和IP地址相互映射的一个分布式数据库

DNS使用的是53端口

查看与DNS服务器相关服务及端口号:grep 'domain' /etc/services

[root@RHEL9-B .ssh]# grep 'domain' /etc/services
domain          53/tcp                          # name-domain server
domain          53/udp
domain-s        853/tcp                 # DNS query-response protocol
domain-s        853/udp                 # DNS query-response protocol
domaintime      9909/tcp                # domaintime
domaintime      9909/udp                # domaintime

通常DNS以UDP这个较快速的数据传输协议来查询,但没有查询到完整信息时,就会再次以TCP来重新查询,启动DNS时,会同时启动TCP以及UDP的port53

因特网的域名结构

因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法

任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)

“域”(domain)是名字空间中一个可被管理的划分

域名可分为三大类:

  • 国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码contry-code)。
  • 通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
  • 基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。

根据域名服务器起的作用,可以把域名服务器划分为以下类型:

  • 根域名服务器:

    根域名服务器是最高级别的域名服务器,具有至关重要的作用。所有根域名服务器都了解顶级域名服务器的域名和IP地址。当本地域名服务器无法解析特定域名时,它们首先向根域名服务器请求帮助。因此,根域名服务器在整个DNS系统中扮演着至关重要的角色。如果所有的根域名服务器都发生故障,整个DNS系统将瘫痪。

    根域名服务器通常并不直接解析域名为IP地址,而是指导本地域名服务器应向哪个顶级域名服务器发送查询请求。

    目前,全球共有13台根服务器。其中1台是主根服务器,位于美国,其余12台是辅助根服务器,其中9台位于美国,2台分别位于英国和瑞典,还有1台位于日本。这些根服务器由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名系统和IP地址的管理。

    在与现有IPv4根服务器体系架构充分兼容基础上,由我国下一代互联网国家工程中心领衔发起的“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。

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

  • 权限域名服务器:负责一个“区”的域名服务器。

  • 本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

  • 主从DNS服务器:为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

  • 缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。

DNS域名解析过程

DNS解析方式 正向解析:将FQDN----->IP 反向解析:将IP----->FQDN

1、在浏览器中输入www.qq.com 域名,首先查询浏览器的缓存(chrome://net-internals/#dns可查询浏览器缓存,chrome会对每个域名默认缓存60s),若没有则下一步

2、操作系统检查本地的hosts文件(linux:/etc/hosts),若没有则下一步

3、查找本地DNS服务器(设置中的首选DNS服务器,114.114.114.114或8.8.8.8),待查询域名包含在本地区域解析中,则返回解析结果给客户机,此解析具有权威性,若没有则下一步

4、若查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了相关映射信息,则返回该映射关系,完成域名解析,此解析不具有权威性,若没有则下一步

5、若未使用转发模式,本地DNS服务器将请求发至13台根DNS,根DNS服务器收到请求后判断这个域名(.com)是谁来授权管理,并返回一个负责该顶级域名服务器的IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理qq.com的DNS服务器地址给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机 6、若使用转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询。 114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS。 8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用。

配置

软件名:bind

服务名:named

工作目录:/var/named

[root@RHEL9-A ~]# tree /var/named
/var/named
├── 233.168.192.zone
├── data #数据目录
│   └── named.run
├── dynamic
│   ├── managed-keys.bind
│   └── managed-keys.bind.jnl
├── named.ca #存储根服务器相关信息,缓存时间
├── named.empty
├── named.localhost #解析localhost
├── named.loopback #解析loopback
├── openlab.zone
└── slaves #dns服务器作为从服务器时存放解析记录

配置目录:/etc/named

/etc/logrotate.d/named
/etc/named
/etc/named.conf #dns服务配置文件,配置的区域称为域,如baidu.com就是百度的各种网站的域,每个域中有多个服务
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf #rndc是一种远程管理DNS服务器的工具,rndc服务器默认监听在tcp的953端口,默认监听于127.0.0.1,即默认仅允许本地使用
/etc/rndc.key
/etc/rwtab.d/named
/etc/sysconfig/named

一些文件详解

/var/named/named.ca

;; ANSWER SECTION:
.			518400	IN	NS	a.root-servers.net.
.			518400	IN	NS	b.root-servers.net.
.			518400	IN	NS	c.root-servers.net.
.			518400	IN	NS	d.root-servers.net.
.			518400	IN	NS	e.root-servers.net.
.			518400	IN	NS	f.root-servers.net.
.			518400	IN	NS	g.root-servers.net.
.			518400	IN	NS	h.root-servers.net.
.			518400	IN	NS	i.root-servers.net.
.			518400	IN	NS	j.root-servers.net.
.			518400	IN	NS	k.root-servers.net.
.			518400	IN	NS	l.root-servers.net.
.			518400	IN	NS	m.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net.	518400	IN	A	198.41.0.4
b.root-servers.net.	518400	IN	A	199.9.14.201
c.root-servers.net.	518400	IN	A	192.33.4.12
d.root-servers.net.	518400	IN	A	199.7.91.13
e.root-servers.net.	518400	IN	A	192.203.230.10
f.root-servers.net.	518400	IN	A	192.5.5.241
g.root-servers.net.	518400	IN	A	192.112.36.4
h.root-servers.net.	518400	IN	A	198.97.190.53
i.root-servers.net.	518400	IN	A	192.36.148.17
j.root-servers.net.	518400	IN	A	192.58.128.30
k.root-servers.net.	518400	IN	A	193.0.14.129
l.root-servers.net.	518400	IN	A	199.7.83.42
m.root-servers.net.	518400	IN	A	202.12.27.33
a.root-servers.net.	518400	IN	AAAA	2001:503:ba3e::2:30
b.root-servers.net.	518400	IN	AAAA	2001:500:200::b
c.root-servers.net.	518400	IN	AAAA	2001:500:2::c
d.root-servers.net.	518400	IN	AAAA	2001:500:2d::d
e.root-servers.net.	518400	IN	AAAA	2001:500:a8::e
f.root-servers.net.	518400	IN	AAAA	2001:500:2f::f
g.root-servers.net.	518400	IN	AAAA	2001:500:12::d0d
h.root-servers.net.	518400	IN	AAAA	2001:500:1::53
i.root-servers.net.	518400	IN	AAAA	2001:7fe::53
j.root-servers.net.	518400	IN	AAAA	2001:503:c27::2:30
k.root-servers.net.	518400	IN	AAAA	2001:7fd::1
l.root-servers.net.	518400	IN	AAAA	2001:500:9f::42
m.root-servers.net.	518400	IN	AAAA	2001:dc3::35

正向解析文件资源记录字段含义:

FQDNDNS缓存时间资源记录的类别(Class),通常为"IN",表示Internet资源记录的类型资源记录数据
a.root-servers.net.518400INA198.41.0.4
domainINRR typeRR data
主机名.INAIPv4的IP地址
主机名.INAAAAIPv6的IP地址
域名.INNSNS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析
域名.INSOA起始授权记录指定七个重要参数:管理该域名的主DNS服务器地址、管理员邮箱、区域文件序列号、刷新时间、重试时间、失效时间、最小缓存时间
域名.INMX顺序数字,接收邮件的服务器主机名字
主机别名.INCNAME实际代表这个主机别名的主机名字

/etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
	listen-on port 53 { 192.168.235.129; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named"; #指定工作目录,下文提到的路径都是相对路径,绝对路径要在前面加上这个配置项指定的路径
	dump-file 	"/var/named/data/cache_dump.db"; #备份文件,指定服务器在收到rndc dump命令时,转出数据到指定路径
	statistics-file "/var/named/data/named_stats.txt"; #统计文件,指定服务器在收到rndc stats命令时,追加统计数据的文件路径
	memstatistics-file "/var/named/data/named_mem_stats.txt"; #服务器在退出时,将内存统计写到指定路径
	secroots-file	"/var/named/data/named.secroots"; #指定DNSSEC根密钥存储文件路径,DNSSEC是一种用于增强DNS安全性的技术,它通过数字签名来验证DNS数据的完整性和真实性,以防止DNS中的潜在攻击,如DNS缓存污染和中间人攻击。DNSSEC的安全性依赖于一组根密钥,这些密钥用于验证各级域名服务器上的数字签名
	recursing-file	"/var/named/data/named.recursing"; #指定服务器在收到rndc recursing命令时转出当前递归请求到某路径
	allow-query     { 192.168.235.0/24; };

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes; #如果正在建立权威域名服务器,则需要关闭递归,权威域名服务器就是递归查询中最后查询的那个能真正返回域名解析结果的服务器

	dnssec-validation yes; #开启DNSSEC在权威或者递归服务器之间的信任服务

	managed-keys-directory "/var/named/dynamic";
	geoip-directory "/usr/share/GeoIP";

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

	/* <https://fedoraproject.org/wiki/Changes/CryptoPolicy> */
	include "/etc/crypto-policies/back-ends/bind.config";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

#根区域
zone "." IN {
	type hint; #区域类型
	file "named.ca"; #区域对应的数据解析文件
};

zone "233.168.192.in-addr.arpa" IN {
	type master;
	file "233.168.192.zone";
};
include "/etc/named.rfc1912.zones"; #也是区域配置文件
include "/etc/named.root.key"; #密钥文件

区域类型表

hint提示作用,一般仅用于根区域
master主域名服务器
slave从域名服务器

反向解析示例

注意IP域的写法要倒着写,在服务端root@192.168.235.134:/etc/named.rfc1912.zones加上下面一段区域配置

#235.168.192.in-addr.arpa是IP域(192.168.235倒着写),in-addr.arpa是IP域的根,其为固定写法
zone "235.168.192.in-addr.arpa" IN {
  type master;
  file "235.168.192.zone";
};

在服务端192.168.235.134的/var/named下创建并编辑233.168.192.zone文件

$TTL 1D
@      IN    SOA    dns.openlab.com.    2996296637.qq.com    (  0  1D  1H  1W  3H  )
       IN    NS     dns.openlab.com.
dns.openlab.com.    IN    A    192.168.235.134
134    IN    PTR    dns.openlab.com.
129    IN    PTR    www.openlab.com.

PTR类型的记录就是反向解析记录

检验区域配置文件是否有误:named-checkzone 192.168.235.129 /var/named/235.168.192.zone

反向解析检验

[root@RHEL9-B ~]# host 192.168.235.129 192.168.235.134 #第一个地址是待解析地址,第二个地址是DNS服务器地址
Using domain server:
Name: 192.168.235.134
Address: 192.168.235.134#53
Aliases:

129.235.168.192.in-addr.arpa domain name pointer www.openlab.com.

[root@RHEL9-B ~]# dig -x 192.168.235.129 @192.168.235.134
; <<>> DiG 9.16.23-RH <<>> -x 192.168.235.129 @192.168.235.134
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58935
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 1dc7066bb9b46a33010000006533d67e7e47543281e92849 (good)
;; QUESTION SECTION:
;129.235.168.192.in-addr.arpa.  IN      PTR

;; ANSWER SECTION:
129.235.168.192.in-addr.arpa. 86400 IN  PTR     www.openlab.com.

;; Query time: 1 msec
;; SERVER: 192.168.235.134#53(192.168.235.134)
;; WHEN: Sat Oct 21 21:47:42 CST 2023
;; MSG SIZE  rcvd: 114

正向解析示例

1、域:openlab.com

2、域中需解析的名称:

www.openlab.com 192.168.235.129 dns.openlab.com 192.168.235.134

在DNS服务器(192.168.235.134)上配置区域及区域解析文件

zone "openlab.com" IN {
		type master;
		file "openlab.zone";
};

进入named的工作目录/var/named下新建并编辑文件openlab.zone作为openlab.com这个域的解析文件

$TTL 1D
;为所有的RR设置缓存时间,也可以为单条记录设置缓存时间
;第一条记录是SOA记录(起始授权记录)
;记录的格式:name TTL IN value
;记录的第一个字段指定记录所在的域,由于文件已被/etc/named.conf中的openlab.com域绑定,所以规定用@指代管理的根域openlab.com,SOA记录的第三个字段主DNS服务器的域名也可以用@代替,默认在根域之前加上dns,即dns.openlab.com.
;第五个字段指定管理员的邮箱,不能使用@符号,用.代替
;第六个字段设置主从同步:
;serial 标识区域文件的版本,确保从服务器知道何时需要更新数据,当主服务器对区域文件进行更改是,必须递增序列号以指示数据更新,从服务器检查序列号若小于主服务器记录的序列号则触发区域内传输  
;refresh 服务器隔多久检查主服务器的区域文件的序列号,定义了从服务器向主服务器发起的区域数据更新请求的时间间隔
;retry 定义了如果从服务器连接不上主服务器,将等待多长时间后再次尝试
;expire 从服务器若始终未能和主服务器通讯,则多久后将停止提供区域数据,即从服务器不再相应查询
;minimum 最小缓存时间,这是记录在DNS缓存中保持有效的最短时间,若没有特定的TTL值给定记录且顶部没有给定TTL值,则使用该字段指定的值
;NS记录指定有哪些DNS服务器参与解析,此处也可用@表示,说明只有一个DNS服务器参与解析且该DNS服务器也是主DNS服务器
@      IN      SOA      dns.openlab.com.      2996296637.qq.com    ( 0 1D 1H 1W 3H )
;若多条连续的记录使用相同的name,则可以省略
       IN      NS       dns.openlab.com.
;      IN      MX 11    mail.openlab.com.
;      IN      MX 10    mail2.openlab.com.
       
dns.openlab.com.    IN    A     192.168.235.134
www.openlab.com.    IN    A     192.168.235.129
;ftp                 IN    A     192.168.235.134
;web                 IN    CNAME www

检查区域配置文件的命令:named-checkzone [dns.openlab.com](<http://dns.openlab.com>) /var/named/openlab.zone

检查配置文件命令:named-checkconf /etc/named.conf

启动named服务:systemctl restart named

测试命令:host, nslookup, dig

[root@RHEL9-B named]# host www.openlab.com 192.168.235.134
Using domain server:
Name: 192.168.235.134
Address: 192.168.235.134#53
Aliases:

www.openlab.com has address 192.168.235.129

每次修改配置文件后重新刷新配置:rndc reload

如果上网或着ping要使用目前配置的dns服务,则需要在客户端将/etc/resolv.conf中指定的本地DNS服务器改为目前配置的DNS服务器的IP地址

在客户端192.168.235.129上修改之后再ping www.openlab.com​​​​​​

[root@RHEL9-A Downloads]# ping www.openlab.com
PING www.openlab.com (192.168.235.129) 56(84) bytes of data.
64 bytes from RHEL9-A (192.168.235.129): icmp_seq=1 ttl=64 time=0.043 ms
64 bytes from RHEL9-A (192.168.235.129): icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from RHEL9-A (192.168.235.129): icmp_seq=3 ttl=64 time=0.062 ms

注意在实验过程中,要关闭客户端和服务端的selinux和firewalld

setenforce 0 #关闭selinux
systemctl stop firewalld #关闭防火墙

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值