DNS域名解析服务器-- Linux中

DNS域名解析服务器

1. DNS简介

  • DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。
  • DNS使用的是53端口,
  • 通常DNS是以UDP这个较快速的数据传输协议来查询的,但是没有查询到完整的信息时,就会再次以TCP这个协议来重新查询所以启动DNS时,会同时启动TCP以及UDP的port53。

2. 因特网的域名结构

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

3. 域名服务器的类型划分

​ 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的*域名服务器的域名和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的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

4. DNS域名解析的过程

在这里插入图片描述

例子

[root@localhost ~]# nslookup
> set type=ns			#设置查询类型为查询域名的权威名称服务器(Name Server,简称 NS)记录
> .
Non-authoritative answer:
. nameserver = b.root-servers.net.
*** ***
# 设置查询类型为查询域名对应的 A 记录,A 记录(Address Record)也叫主机记录,它主要是将域名映射到对应的 IPv4 地址上
> set type=a			
> b.root-servers.net.
Non-authoritative answer:
Name: b.root-servers.net
Address: 170.247.170.2
> server 170.247.170.2
> set type=ns
> com.
Authoritative answers can be found from:
com nameserver = a.gtld-servers.net.
*** ***
a.gtld-servers.net internet address = 192.5.6.30
> server 192.33.14.30
Default server: 192.33.14.30
Address: 192.33.14.30#53
> set type=ns
> bilibili.com.
> server 1.12.0.17
> set type=a
> www.bilibili.com
www.bilibili.com 		canonical name = a.w.bilicdn1.com.
> a.w.bilicdn1.com.

5. DNS服务器配置

  • 关于服务端

    软件安装包 bind
    服务名称 named
    主配置文件 /etc/named.conf
    数据目录 /var/named
    端口 tcp/53 udp/53
  • dns服务的安装与启用

    • 安装

      dnf install bind -y
      
    • 启用

      systemctl enable --now named
      firewall-cmd --permanent --add-service=dns #用于向防火墙的永久配置规则里添加允许 DNS 服务相关流量通过的规则
      firewall-cmd --reload	#重新加载 firewalld 防火墙的配置,使得之前添加的永久规则能够立即生效
      
    • 开放服务

      [root@localhost ~]# vim /etc/named.conf
      listen-on port 53 { any; } 		##在本地所有网络接口上开启53端口
      allow-query { any; }; 			##允许查询A记录的客户端列表
      dnssec-validation no; 			##禁用dns安全校验,使dns能够缓存外部信息到本机
      forwarders  { 114.114.114.114; };		##用于指定转发器(Forwarders)的 IP 地址列表	
      [root@localhost ~]# systemctl restart named
      

6. DNS企业级高级配置

  • 高速缓存dns

    • 高速缓存dns是一个非权威的dns,在dns服务器中本身并没有数据;

    • 当客户需要解析域名时首先查询缓存中是否有数据,如果没有就会从指定的dns服务器中缓存;

    • 高速缓存dns可以大大节省内网在做地址解析上所需要花费的时间;

  • 高速缓存配置参数

    [root@localhost ~]# vim /etc/named.conf
    forwarders { 114.114.114.114; };
    systemctl restart named
    
  • DNS的正向解析

    • 作用:当客户设定当前dns服务器为dns解析服务器时,正向解析即为客户提供A记录客户提供域名,dns服务器负责把域名解析成对应IP

    • 实施方法:

      • 编写zones文件设定要维护的域

        [root@localhost ~]# vim /etc/named.rfc1912.zone
        zone "easylee.org" IN { 		##维护的域名
            type master; 		##当前服务器位主dns
            file "easylee.org.zone"; 		##域名A记录文件
            allow-update { none; }; 		##允许更新主机列表
        };
        
      • 根据zones文件中的指定生成A记录文件

        [root@localhost ~]# cd /var/named/
        [root@localhost named]# cp -p named.localhost easylee.org.zone
        [root@localhost named]# vim easylee.org.zone
        ## 在此文件中,@=easylee.org,也就是@相当于维护的域名;
        ## 在此文件中,所有(除了A记录)不是以 . 结尾的都会在末尾默认加上@,也就是维护的域名,
        $TTL 1D ##TIME-TOLIVE(dns地址保存时间长度默认是“S”)
        @ 		IN SOA dns.easylee.org. root.easylee.org. ( ##SOA授权起始(Start of Authority)
                ##负责管理管理员邮箱,NS服务器名称等7个信息
                    0 ; serial 		#域名版本序列号
                    1D ; refresh 	#刷新时间(辅助dns)
                    1H ; retry 		#重试时间(辅助dns)
                    1W ; expire 	#过期时间
                    3H ) ; minimum 		#A记录最短有效期,如果$TTL被设定那么一设定值为准
            	NS 		dns.easylee.org. 	#nameserver 域名
        dns 	A 		172.25.254.100 	#nameserver A记录
        www 	CNAME 	node.a.easylee.org. 	#Canonical Name(规范名称,A记录别名)
        node.a 	A 		172.25.254.101 		#A记录
        node.a 	A 		172.25.254.102
        easylee.org. MX 1 172.25.254.111. 	#邮件解析记录
        

        当更改完毕DNS服务的配置文件后一定要重启服务后更改内容才能生效

        重启服务的命令为:systemctl restart namd

        如果重启服务失败基本可以确定为配置文件的内容更改的有问题可以使用的查看命令为:journalctl -xeu named.service

      • 测试实验结果

        [root@localhost ~]# dig -t A www.easylee.org @172.25.254.100 	##查询A记录
        [root@localhost ~]# dig -t mx easylee.org @172.25.254.100 		##查询MX记录
        

        在查询结果时会有几种反馈值

        状态码 含义
        NOERROR 查询成功
        REFUSED 查询被拒绝
        SERVFAIL 查询失败
        NXDOMAIN 查询无此结果
  • DNS的反向解析

    • 作用:当客户设定当前dns服务器为dns解析服务器时,正向解析即为客户提供PRT记录客户提供域名,dns服务器负责把域名解析成对应IP。

    • 实施方法:

      • 编写zones文件设定要维护的域

        [root@localhost ~]# vim /etc/named.rfc1912.zones
        ...
        zone "254.25.172.in-addr.arpa" IN {
            type master;
            file "172.25.254.ptr";
            allow-update { none; };
        };
        ...
        
      • 根据zones文件中的指定生成A记录文件

        [root@localhost ~]# cd /var/named/
        [root@localhost named]# cp -p named.loopback 172.25.254.ptr
        [root@localhost named]# vim 172.25.254.ptr
        $TTL 1D
        @ IN SOA dns.easylee.org. root.easylee.org. (
                                    0 ; serial
                                    1D ; refresh
                                    1H ; retry
                                    1W ; expire
                                    3H ) ; minimum
        		NS 	dns.easylee.org.
        dns 	A 	172.25.254.100
        111 	PTR bbs.easylee.org.
        

        注意配置完成后需要重启named服务,否则不生效!!

      • 测试实验结果

        [root@localhost ~]# dig -x 172.25.254.111 @172.25.254.100
        
  • DNS的多向解析方案

    • 配置实验环境

      ## 在当前网卡中添加所需网段IP
      [root@localhost ~]# ip addr add 192.168.0.100/24 dev ens160
      

      在添加完毕这个IP后ens160这块网卡上就有两个IP

      172.25.254.100

      192.168.0.100

      我们用这两个不同网段的IP来模拟多网段

      当前用ip addr 命令添加的IP是临时添加,当网卡被刷新后该IP失效

    • 实施方法

      [root@localhost ~]# vim /etc/named.conf
      
      • 注释在主配置文件中默认的zone语句块

        /*
        zone "." IN {
        type hint;
        file "named.ca";
        };
        include "/etc/named.rfc1912.zones";
        */
        
      • 添加view语句块来限制访问数据走向

        view net-172 {
            match-clients { 172.25.254.0/24; };
                zone "." IN {
                    type hint;
                    file "named.ca";
            };
            include "/etc/named.rfc1912.zones";
        };
        view net-192 {
            match-clients { 192.168.0.0/24; };
                zone "." IN {
                type hint;
                file "named.ca";
            };
            include "/etc/named.rfc192.zones";
        };
        

        view中的match-clients是用来匹配访问来源的

        匹配访问来源可以填写多个,每个之间用空格分隔

      • 生成并配置zones文件

        [root@localhost ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc192.zones
        [root@localhost ~]# vim /etc/named.rfc192.zones
        zone "easylee.org" IN {
            type master;
            file "easylee-192.org.zone";
            allow-update { none; };
        };
        
      • 生成并配置A记录文件

        [root@localhost ~]# cp -p /var/named/easylee.org.zone /var/named/easylee-192.org.zone
        [root@localhost ~]# vim /var/named/easylee-192.org.zone
        $TTL 1D
        @ IN SOA dns.easylee.org. root.easylee.org. (
                        0 ; serial
                        1D ; refresh
                        1H ; retry
                        1W ; expire
                        3H ) ; minimum
                    NS dns.easylee.org.
        dns A 192.168.0.100
        www CNAME node.a.easylee.org.
        node.a A 192.168.0.101
        node.a A 192.168.0.102
        easylee.org. MX 5 192.168.0.111.
        

        修改完毕配置文件后一定要重启服务

  • 主从DNS服务器

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

    • 配置实验环境:

      • 新建一台主机作为辅助DNS主机,并配置好网络和软件仓库;

      • 在新建主机中安装DNS服务并保证服务可以被访问。

        安装
          dnf install bind -y
        启用
          systemctl enable --now named
          firewall-cmd --permanent --add-service=dns #用于向防火墙的永久配置规则里添加允许DNS服务相关流量通过的规则
          firewall-cmd --reload	#重新加载 firewalld 防火墙的配置,使得之前添加的永久规则能够立即生效
        开放服务
          [root@localhost ~]# vim /etc/named.conf
          listen-on port 53 { any; } 		##在本地所有网络接口上开启53端口
          allow-query { any; }; 			##允许查询A记录的客户端列表
          dnssec-validation no; 			##禁用dns安全校验,使dns能够缓存外部信息到本机
          forwarders  { 114.114.114.114; };		##用于指定转发器(Forwarders)的 IP 地址列表	
          [root@localhost ~]# systemctl restart named
        
    • 对辅助DNS进行设置

      • 修改zones文件设定要做主从的域

        [root@localhost ~]# vim /etc/named.rfc1912.zones
            zone "easylee.org" IN {
            type slave;
            masters { 172.25.254.100; };
            file "slaves/easylee.org.zone";
        // 	allow-update { none; };
        };
        
    • 启动服务并测试

      [root@localhost ~]# systemctl enable --now named
      [root@localhost ~]# dig -t A www.easylee.org @172.25.254.200
      

      以上操作除了测试命令外都在辅助dns中进行,在实验进行时一定要分清楚那个是主dns那个是辅助dns

    • 解决数据时间同步问题

      • 问题:主从dns经过上述设定后存在数据同步延迟,在主dns中更改数据后要等到下个同步周期的时间到来才能进行同步,下面是解决数据同步的延迟问题:

      • 在主dns中设置数据更改后主动通知对象

        [root@localhost ~]# vim /etc/named.rfc1912.zones
        zone "easylee.org" IN {
            type master;
            file "easylee.org.zone";
            allow-update { none; };
            also-notify { 172.25.254.200; };
        };	
        
      • 更改A记录文件测试结果

        [root@localhost ~]# vim /var/named/easylee.org.zone
        $TTL 1D
        @ IN SOA dns.easylee.org. root.easylee.org. (
                            2023032901 ; serial #更改A记录后一定要更新serial值
                            1D ; refresh
                            1H ; retry
                            1W ; expire
                            3H ) ; minimum
        				NS 			dns.easylee.org.
        dns 			A 		172.25.254.100
        www 			CNAME 	node.a.easylee.org.
        node.a 			A 		172.25.254.200
        node.a 			A 		172.25.254.202
        easylee.org. 	MX 5 	172.25.254.111.
        

        serial值必须是增量更改,其最大位数为10位,在企业中一般会用这个数字来记录更改时间

      • 测试数据同步性

        [root@localhost ~]# dig -t A www.easylee.org @172.25.254.100
        [root@localhost ~]# dig -t A www.easylee.org @172.25.254.200
        

        A 172.25.254.100
        www CNAME node.a.easylee.org.
        node.a A 172.25.254.200
        node.a A 172.25.254.202
        easylee.org. MX 5 172.25.254.111.

        
        > serial值必须是增量更改,其最大位数为10位,在企业中一般会用这个数字来记录更改时间
        
        
      • 测试数据同步性

        [root@localhost ~]# dig -t A www.easylee.org @172.25.254.100
        [root@localhost ~]# dig -t A www.easylee.org @172.25.254.200
        

        回顾练习—具体实践步骤:

  • 解析过程:

vim   /etc/resolv.conf(查看dns设定)
[root@localhost 桌面]# nslookup
> set   type=ns(先访问根是谁,所以要指定解析域名服务器)
> .(问根是谁,回车里有.	nameserver = m.root-servers.net.)
> set   type=a
> m.root-servers.net.(问他是谁,出现他的地址)
> server   202.12.27.33(使用这个地址)
访问www.bilibili.com解析过程(解析快慢影响客户访问快慢)
> set   type=ns
> com.
> server   192.5.6.30
> set   type=ns
> bilibili.com
> server   1.12.0.17
> set   type=a
> www.bilibili.com.
> a.w.bilicdn1.com.

  • dns高速缓存服务器
实验环境(两台主机,彼此通信,100的为dns服务器)
100的安装dnf  install   bind   -y
 rpm   -qc   bind  (查看文件)
[root@localhost 桌面]# vim    /etc/resolv.conf
[root@localhost 桌面]# cat    /etc/resolv.conf
# Generated by NetworkManager
search    timinglee.org
nameserver 172.25.254.100(两台主机的dns都要指定为100的ip,要测谁,就指定谁)
systemctl    start   named(100的服务启动)
netstat   -antlupe   |   grep   named(查看named的使用端口)
dig   www.baidu.com(测能否通,这里不能,因为端口在回环上开,没在100上开)
vim    /etc/named.conf(编辑他主配置文件,在里面改成listen-on port 53 { any; };,是端口在所有网络接口上开开启)
systemctl    restart   named(改完重启服务)(100的访问成功)
allow-query     { any; };(允许谁用当前dns来查询A记录)
dnssec-validation no;(因为是私有的,要关闭安全校验)(这样200的访问也成功)
在文件里也可插入forwarders       {114.114.114.114;   };(当我这里没客户要的,从这台主机去,默认是到根服务器)(加快访问,这台主机没有,从指定的主机缓存信息)

  • dns的正向解析
A记录就是address
构建内部dns
 vim   /etc/named.rfc1912.zones(在100的维护文件里改)
zone "timinglee.org" IN {
        type master;
        file "timinglee.org.zone";
        allow-update { none; };(被访问timinglee.org这个域名时访问timinglee.org。zone这个文件)
};
建这个文件编辑
[root@localhost 桌面]# cd   /var/named/
[root@localhost named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@localhost named]# cp  -p    named.localhost    timinglee.org.zone(权限特殊,必须加p)
root@localhost named]# vim   timinglee.org.zone(里面记得结尾加.不加会补齐@)
tail   /var/log/messages(报错查看日志)
SOA  dns.timinglee.org.  (授权机制)

  • dns的记录类型-规范域名解析

内部服务器有好多(内部域名),对外域名只有一个(外部域名)
需要做一个规范域名(CNAME)--映射记录--把规范的域名映射到内部域名,再域名进行解析
vim   /var/named/timinglee.org.zone(编辑这个文件
www     CNAME    node1.a.timinglee.org.
node1.a  A       172.25.254.111
node1.a  A       172.25.254.222
)
systemctl    restart   named(重启服务)
dig   www.timinglee.org


  • dns的记录类型-邮件解析记录

邮件发送协议--用smtp协议(两服务器端口之间,163到qq,问dns,dns告诉一个Ip,这个ip就是qq.com域的mx(邮件解析记录)记录,到qq.com里的163.com是个数据包,包头有个ip,要把ip解析成域名(163.com)叫做ptr(反向邮件解析记录),才知道邮箱是啥,并存到这个邮箱里)
from  lee@163.com(后面都是域名)
to    lee@qq.com
dig   -t   mx   timinglee.org(mx记录是空)
做mx记录
vim   /var/named/timinglee.org.zone(加入timinglee.org   MX   1    172.25.254.100.后面注意必须加.)
重启服务
dig   -t   mx   timinglee.org(再检测)
做ptr记录
 vim   /etc/named.rfc1912.zones(加入zone "254.25.172.in-addr.arpa" IN {
        type master;
        file "172.25.254.ptr";
        allow-update { none; };
};
)
root@localhost named]# cp   -p   named.loopback   172.25.254.ptr(复制)
vim   172.25.254.ptr(改这个文件)
重启服务
dig   -x    172.25.254.111(反向解析,检测)


  • dns多向解析
两台主机,第二台主机仅主机,两个网段192.168.0.200,172.200第一台是双网卡,一个仅主机eth1  192.168.0.100(不需要网关),一个nat172.100
172.100得到dns的172
192.200得到dns的192
 nmcli   networking on
在172.100里设定dns
[root@localhost ~]# vim  /etc/resolv.conf
(dns为172.25.254.100)
测试dig   www.timinglee.org(172得172)
在192.200里设定dns
[root@localhost ~]# vim  /etc/resolv.conf
(dns为192.168.0.100)
测试dig    www.timinglee.org(192得192)
需要两套解析满足
复制,编辑文件,全文替换(2文件)
172.100里
[root@localhost ~]# cd   /var/named/
[root@localhost named]# cp   -p   timinglee.org.zone   timinglee.org.192
[root@localhost named]# vim   timinglee.org.192
[root@localhost named]# cp   /etc/named.rfc1912.zones   /etc/named.rfc1912.zones.192  -p
[root@localhost named]# vim    /etc/named.rfc1912.zones.192
编辑主配置文件(,之前注释掉,指定两个,所有和192的)
[root@localhost named]# vim   /etc/named.conf(指定多个zones)
重启服务
两个测试dig   www.timinglee.org(172得172,192得192)
如果说是没有servers,关火墙 systemctl  stop    firewalld
,dns打开,dns配置,看能ping通不


  • dns主从
(同步东西,减少主dns压力,从dns叫salf),辅助dns的配置及优化
怎样将主dns数据同步到从dns,用192网段来做
192.200(充当辅助dns)里做的zones.192这个文件
安装bind
编辑主配置文件,改3个
[root@localhost ~]# vim    /etc/named.conf
再编辑一个文件
添加[root@localhost ~]# vim   /etc/named.rfc1912.zones
zone "timinglee.org" IN {
        type slave;
        masters{192.168.0.100; };
        file "slaves/timinglee.org.192";
};
(这里的salves指的是/var/named/下的一个目录)
重启服务
slaves,同步,
在172.100里
[root@localhost named]# vim   /etc/resolv.conf(改成192.100)
在192.200里
[root@localhost ~]# cat   /etc/resolv.conf
# Generated by NetworkManager
search   timinglee.org
nameserver 192.168.0.200
需要两台测试主机,一个测试192.168.0.100(主),一个测试192.200(从)
但是有一个问题
当改变172.100里
[root@localhost named]# vim    timinglee.org.192
主改了,但从没改,因为数据不能及时同步
[root@localhost named]# vim    /etc/named.rfc1912.zones.192
    also-notify  {192.168.0.200  ;};(通知200)
再改个文件里东西[root@localhost named]# vim    timinglee.org.192
 1       ; serial
如果在改变timinglee.org.192这个文件下的内容,就要改变 serial值(可以为2,最多数字为10位)
上一篇:PYTHON开发IM聊天工具


下一篇:AIGC-------AI生成内容如何赋能AR和VR体验?