DNS域名解析服务器

一、DNS简介

DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式 数据库,能够使人更方便的访问互联网。

DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使用的是53端口,在/etc/services(搜索domain)这个文件中能看到。通常DNS是以UDP这个较快速的数据传输协议来查 询的,但是没有查询到完整的信息时,就会再次以TCP这个协议来重新查询。所以启动DNS时,会同时 启动TCP以及UDP的port53。

1、因特网的域名结构

由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在 因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(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,用于反向域名解析,因 此称为反向域名

2、域名服务器的类型划分

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

  • **根域名服务器:**最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所 有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域 名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服 务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多 情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一 步应当找哪一个顶级域名服务器进行查询。 现如今全球一共投放13个根服务器 根服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余 12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名 根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网Explorer这样的Web 浏览器和电子邮件程序控制互联网通信。换句话说------攻击整个因特网最有力、最直接,也是最致 命的方法恐怕就是攻击根域名服务器了。 在与现有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. icescon.com 域名,操作系统会先检查自己本地的hosts文件是否有这个网 址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系, 如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的 首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。 本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理icrscon.com的DNS服务器地址给本地DNS服务器。当本地DNS服务 器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www . icescon.com主机。
  6. 如果用的是转发模式,本地DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器 进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。找到最后 把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
  7. 注:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询。
  8. 114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告, 解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用 的DNS。
  9. 8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外 网站的用户使用。

三、DNS服务器配置

提供DNS服务的软件叫bind,服务名是named。
[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
[root@localhost ~]# vim /etc/named.conf
options {
#定义监听端口,如果所有地址都监听,则只写端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
#定义数据文件目录
directory "/var/named";
#只允许本地主机进行查询
allow-query { localhost; };
};
#定义区域
zone "." IN {
type hint;
file "named.ca";
};

实验一:配置DNS正向解析

[root@Server ~]# vim /etc/named
named/               named.rfc1912.zones
named.conf           named.root.key
[root@Server ~]# vim /etc/named.conf
[root@Server ~]# cat /etc/named
cat: /etc/named: 是一个目录
[root@Server ~]# cat /etc/named.conf
options{
        listen-on port 53 {any;};
        directory   "/var/named";
};
 
zone "baidu.com" IN{
        file  "named.baidu.com";
        type   master;
};
[root@Server ~]# cd  /var/named
[root@Server named]# ll
总用量 16
drwxrwx---. 2 named named    6  9月  5 22:12 data
drwxrwx---. 2 named named    6  9月  5 22:12 dynamic
-rw-r-----. 1 root  named 2112  9月  5 22:12 named.ca
-rw-r-----. 1 root  named  152  9月  5 22:12 named.empty
-rw-r-----. 1 root  named  152  9月  5 22:12 named.localhost
-rw-r-----. 1 root  named  168  9月  5 22:12 named.loopback
drwxrwx---. 2 named named    6  9月  5 22:12 slaves
[root@Server named]# vim 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       170.247.170.2
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    2801:1b8:10::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
 
[root@Server named]# vim named.localhost
 
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1

|--------|----|-----------|-------------------------------------|
| domain | IN | RR type | RR data |
| 主机名. | IN | A | IPv4的IP地址 |
| 主机名. | IN | AAAA | IPv6的IP地址 |
| 域名. | IN | NS | 管理这个域名的服务器主机名字,即由哪一台主机去解析当 前所定义的域主机 |
| 域名. | IN | SOA起始授权记录 | 管理这个域名的七个重要参数 |
| 域名. | IN | MX | 顺序数字,接收邮件的服务器主机名字 |
| 主机别名. | IN | CNAME | 实际代表这个主机别名的主机名字 |

SOA主要是与区域有关,所以domain要写域名。而SOA后面会接七个参数,这七个参数的意义如下:

  • Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思。

  • 管理员的Email,发生问题可以联系这个管理员。由于@在数据库文件中有特殊含义,所以将用"." 代替@

  • 序号(Serial),这个序号代表的是这个数数据库文件的新旧,序号越大代表越新。所以当你更改 了数据库内容时,需要将这个数值放大。

  • 更新频率(Refresh)定义slave多久向Master要求数据更新。

  • 失败重新尝试时间(Retry),如果Slave无法对Master实现连接,那么在多长时间内,Slave会尝 试重新连接到Master。

  • 失效时间(Expire),如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续 尝试连接,并且尝试删除这份下载的zone file信息。

  • 缓存时间(Minumum TTL),如果这个数据库zone file中,每条记录都没有写到TTL缓存时间的 话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记 录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。

    [root@Server named]# vim named.baidu.com
    $TTL 1D
    baidu.com. IN SOA zs.baidu.com. admin.baidu.com. (20241030 1D 1H 1W 3H )
    IN NS zs.baidu.com.
    zs IN A 192.168.72.129
    haha.baidu.com. IN A 192.168.72.1
    hahaha.baidu.com. IN A 192.168.72.2
    wahaha IN CNAME hahaha

    [root@localhost ~]# systemctl restart named
    [root@localhost ~]# systemctl disable firewalld --now
    [root@webserver ~]# setenforce 0

    #客户端测试
    host [-a] FQDN [server]
    nslookup [FQDN] [server]
    dig [options] FQDN [@server]

    [root@Client red1]# host zs.baidu.com 192.168.72.129
    Using domain server:
    Name: 192.168.72.129
    Address: 192.168.72.129#53
    Aliases:

    zs.baidu.com has address 192.168.72.129
    [root@Client red1]# nslookup admin.baidu.com 192.168.72.202
    Server: 192.168.72.202
    Address: 192.168.72.202#53

    ** server can't find admin.baidu.com: NXDOMAIN
    [root@Client red1]# nslookup admin.baidu.com 192.168.72.129
    Server: 192.168.72.129
    Address: 192.168.72.129#53
    ** server can't find admin.baidu.com: NXDOMAIN

    [root@Client red1]# dig -t A hahaha.baidu.com @192.168.72.101

    ; <<>> DiG 9.16.23-RH <<>> -t A hahaha.baidu.com @192.168.72.101
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40438
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ; COOKIE: d885b218c9dd87a4010000006721d6666aea49ab310f9f0a (good)
    ;; QUESTION SECTION:
    ;hahaha.baidu.com. IN A
    ;; ANSWER SECTION:
    hahaha.baidu.com. 86400 IN A 192.168.72.2
    ;; Query time: 6 msec
    ;; SERVER: 192.168.72.101#53(192.168.72.101)
    ;; WHEN: Wed Oct 30 14:47:03 CST 2024
    ;; MSG SIZE rcvd: 89

实验二:反向解析

#主配置为文件
[root@Server ~]# vim /etc/named.conf
options {
#监听端口为53,大括号内数据内容可以为any
        listen-on port 53 { any; };
        directory "/var/named";
};
 
 
 
zone "72.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.72";
};
;
#反向区域文件
[root@Server ~]# cd /var/named/
[root@Server named]# vim named.192.168.72
$TTL 1D
@ IN SOA ns.baidu.com. admin.baiddu.com. (0 1D 1H 1W 3H )
  IN NS ns.baidu.com.
129 IN PTR ns.baidu.com.
129 IN PTR www.baidu.com.
129 IN PTR mail.baidu.com.
#反解需要注意:主机名尽量使用完整的FQDN,即要写上"."
[root@Server named]# systemctl restart named
[root@Server named]# ll
总用量 32
drwxrwx---. 2 named named    6  9月  5 22:12 data
drwxrwx---. 2 named named    6  9月  5 22:12 dynamic
-rw-r--r--. 1 named named  297 10月 31 14:42 managed-keys.bind
-rw-r--r--. 1 named named 2609 10月 31 14:41 managed-keys.bind.jnl
-rw-r--r--. 1 root  root   167 10月 31 16:34 named.192.168.72
-rw-r--r--. 1 root  root   229 10月 30 14:30 named.baidu.com
-rw-r-----. 1 root  named 2112  9月  5 22:12 named.ca
-rw-r-----. 1 root  named  152  9月  5 22:12 named.empty
-rw-r-----. 1 root  named  152  9月  5 22:12 named.localhost
-rw-r-----. 1 root  named  168  9月  5 22:12 named.loopback
drwxrwx---. 2 named named    6  9月  5 22:12 slaves
#客户端测试
[root@Server named]# host 192.168.72.129 192.168.72.129
Using domain server:
Name: 192.168.72.129
Address: 192.168.72.129#53
Aliases:
 
129.72.168.192.in-addr.arpa domain name pointer www.baidu.com.
129.72.168.192.in-addr.arpa domain name pointer mail.baidu.com.
129.72.168.192.in-addr.arpa domain name pointer ns.baidu.com.
[root@Server named]# nslookup 192.168.72.129 192.168.72.129
129.72.168.192.in-addr.arpa     name = www.baidu.com.
129.72.168.192.in-addr.arpa     name = mail.baidu.com.
129.72.168.192.in-addr.arpa     name = ns.baidu.com.
 
[root@Server named]# dig -x 192.168.72.129 @192.168.72.129
 
; <<>> DiG 9.16.23-RH <<>> -x 192.168.72.129 @192.168.72.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23302
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 3a23224067c67dc20100000067234288bc70dd448901a00f (good)
;; QUESTION SECTION:
;129.72.168.192.in-addr.arpa.   IN      PTR
;; ANSWER SECTION:
129.72.168.192.in-addr.arpa. 86400 IN   PTR     www.baidu.com.
129.72.168.192.in-addr.arpa. 86400 IN   PTR     ns.baidu.com.
129.72.168.192.in-addr.arpa. 86400 IN   PTR     mail.baidu.com.
;; Query time: 0 msec
;; SERVER: 192.168.72.129#53(192.168.72.129)
;; WHEN: Thu Oct 31 16:40:40 CST 2024
;; MSG SIZE  rcvd: 147

实验3:主从DNS服务器

1、完全区域传送:复制整个区域文件

#主DNS服务器的配置【主dns服务器的ip地址为192.168.72.129】
[root@Server named]# vim /etc/named.conf
options {
#监听端口为53,大括号内数据内容可以为any
        listen-on port 53 { 192.168.72.129; };
        directory "/var/named";
        allow-transfer{ 192.168.72.134; };
};
 
zone "baidu.com" IN {
        type master;
        file "named.baidu.com";
};
 
[root@Server named]# vim /var/named/named.baidu.com
$TTL 1D
@  IN SOA @  admin.baidu.com. (20241030 1D 1H 1W 3H )
   IN NS ns.baidu.com.
   IN NS slave.baidu.com.
ns IN A 192.168.72.129
slave IN A 192.168.72.134
 
#从DNS服务器的配置【从dns服务器的ip地址为192.168.72.134】
[root@Client red1]# yum install bind -y
 
[root@Client red1]# cd /var/named
[root@Client named]# vim /etc/named.conf
[root@Client named]# systemctl restart named
 
#测试
[root@Client named]# host ns.baidu.com 192.168.72.129
Using domain server:
Name: 192.168.72.129
Address: 192.168.72.129#53
Aliases:
 
ns.baidu.com has address 192.168.72.129

2、增量区域传送:仅复制区域里变化的文件

[root@Server named]# vim named.baidu.com
$TTL 1D
@  IN SOA @  admin.baidu.com. (20241031 1D 1H 1W 3H )
   IN NS ns.baidu.com.
   IN NS slave.baidu.com.
ns IN A 192.168.72.129
slave IN A 192.168.72.134
www IN A 192.168.72.129
ftp IN CNAME www
[root@Server named]# systemctl restart named


#测试
[root@Client ~]# systemctl restart named
[root@Client ~]# tail -f /var/log/messages
相关推荐
小冷爱学习!4 分钟前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
技术小齐43 分钟前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风1 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕1 小时前
C语言-进程
linux·运维·服务器
chenbin5202 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯2 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹2 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
sszdzq3 小时前
Docker
运维·docker·容器
book01213 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
bugtraq20214 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu