dns

Posted cd/yt/

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dns相关的知识,希望对你有一定的参考价值。

一、概念

1.DN和DNS

  域名,Domain Name ,是一串点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用在数据传输时标识计算机的电子方位,具有独一无二不可重复的特性。

  IP地址,网络上标识站点的数字地址,为了方便人们记忆,采用域名来代表IP地址。域名解析,把域名指向网络空间的IP地址,让人们通过注册过的域名可以方便地访问网站。DNS,Domain Name System,

  域名系统,Domain Name System,工作在广域网,域名解析工作由DNS服务器完成,它记录了域名和IP地址之间一一对应的映射关系。

  DNS的解析方式:

     (1)正向解析:域名 ——> IP地址

     (2)反向解析:IP地址 ——>域名    开启白名单功能,域内邮件服务器可以过滤域外的IP地址~较少用到,一般都是正向解析

2.DN的组成分类

  基本语法:local.group.site

  完整语法:local.group.site.

     .    根域        可以省略不写,浏览器会默认补齐。

                 分类:国家地区域名cn/hk/sg  通用顶级域名com/org/edu  新通用顶级域名red/top

  site  顶级域        由ICANN组织来指定管理

  group 注册域(二级域) 可由个人或组织申请注册

  local   子域(三级域)  服务器网站名的代表

  s1.local.group.site.中        s1是主机名,一般用来代表具体某台主机。

镜像根域的数据只能来源于根域服务器,自己没有办法更新数据。

根域分为主根和辅根,辅根域的数据也只能来源于主根域服务器。

3.DNS解析过程

 

 

1.客户端访问www.atguigu.com,浏览器会自动补齐:80,即web服务器的端口

2.客户端首先查询自己的hosts文件,查看该文件内是否有www.atguigu.com的解析记录,若有,则直接返回给浏览器;若无,则下一步查询。

3.客户端继续查看自己的DNS解析缓存,若有,则直接返回给浏览器;若无,则下一步查询。

4.客户端最后查看网卡的DNS服务器地址,通过UDP协议快速访问本地DNS服务器,查询域名的解析结果。那么DNS服务器该怎么查询呢?

 

 

 

5.本地DNS服务器首先查询自己的解析库,查看该库内是否有www.atguigu.com的解析记录,若有,则直接返回给浏览器;若无,则下一步查询。

6.本地DNS服务器继续查看自己的DNS解析缓存,若有,则直接返回给浏览器;若无,递归查询失败,则下一步查询。(注意解析库比缓存的权威性更强,所以优先级更高)

7.本地DNS服务器最后向根域服务器发起迭代请求,根域root转发给顶级域com,顶级域com转发给二级域atguigu,二级域atguigu一定保存着三级域名的解析信息/映射关系,然后返回给浏览器。(虽然有三级域名,但是没有三级域服务器,这里统称所有的服务器为DNS服务器)

8.本地DNS服务器将这条全新的解析记录保存到解析库和DNS解析缓存中。(递归查询:客户端和DNS服务器;迭代查询:DNS服务器和域服务器)

4.分布式DNS服务器

 

 

拓展:大型的分布式DNS服务器需要权威机构授权才能受理。这里了解其模型和概念就好了。

什么叫做分布式:同一个任务,由不同步骤来共同完成。一个业务分拆多个子业务,部署在不同的服务器上。(生产线中某条流水线有很多步骤)

什么叫做负载均衡:将负载任务进行平衡、分摊到多个操作单元上进行运行。把用户的请求,分配到多个功能相同的服务器上。(生产线中有多条流水线)

 

根域中保存的是所有顶级域的IP地址。

顶级域保存的是所有二级域的IP地址。

二级域保存其下DNS服务器的IP地址。

迭代请求DNS解析是分布式任务,由本地主机、DNS服务器、域服务器等共同完成域名解析。DNS负载均衡服务器连接多台DNS服务器,这些DNS服务器之间是主从关系。

5.DNS服务详解

5.1 DNS软件信息

  软件名

      bind

  服务名

      named

  端口号

      UDP 53  数据通信(域名解析)

      TCP 53  数据同步(主从同步)

  配置文件

      主配置文件     /etc/named.conf       (服务器运行参数,主配置会调用区域配置)

      区域配置文件      /etc/named.rfc1912.zones  (服务器解析的区域位置,正反向区域定义信息)

      数据配置文件      /var/named/xx.xx      (主机名和IP地址的对应解析关系,还有主从同步信息)

[root@localhost network-scripts]# yum -y install bind
[root@localhost network
-scripts]# ls -l /etc/named.conf -rw-r----- 1 root named 1806 Apr 7 22:41 /etc/named.conf [root@localhost network-scripts]# ls -l /etc/named.rfc1912.zones -rw-r----- 1 root named 931 Jun 21 2007 /etc/named.rfc1912.zones [root@localhost network-scripts]# cd /var/named/ [root@localhost named]# ls data dynamic named.ca named.empty named.localhost named.loopback slaves name.ca文件:保存着13台根域服务器的IP地址和对应的域名 slaves目录:做主从同步时,从服务器用来保存它的配置文件

5.2主配置文件

[root@localhost named]# vim /etc/named.conf 
options {
        listen-on port 53 { 127.0.0.1; };    #设置服务器的监听网卡,一般填写any或者外网网卡的IP地址(默认监听本地,什么也干不了)
        listen-on-v6 port 53 { ::1; };      #大括号内的前后都有空格,最后还有分号
        directory       "/var/named";      #数据文件的位置
        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";
        allow-query     { localhost; };      #设置可以访问服务器的客户端IP,一般填写any或客户端地址(默认为本地,不允许别人访问他)

include
"/etc/named.rfc1912.zones";        #include是用来进行调用,这是区域配置文件 include "/etc/named.root.key";

5.3区域配置文件

[root@localhost named]# vim /etc/named.rfc1912.zones 
zone "localhost.localdomain" IN {         #正向解析,填写域guigu.com而不是域名www.atguigu.com
        type master;                 #DNS服务器类型(master/slave)
        file "named.localhost";          #正向数据配置文件的名称(默认保存在/var/name/下)
        allow-update { none; };          #是否允许从服务器的数据更新(一般填写从服务器的IP地址)
};
zone "1.0.0.127.in-addr.arpa" IN {         #反向解析,填写IP地址/网段的反写、后缀不动
        type master;              
        file "named.loopback";
        allow-update { none; };
};

5.4数据配置文件

[root@localhost named]# vim /var/named/named.localhost 
$TTL 1D                                     #域名有效解析的生存周期(默认缓存1天)     
@       IN SOA  @ rname.invalid. (                     #第一个@代表域名本身(一般修改为DNS的域名)  SOA是起始授权记录(起始授权机构对资源的记录,默认不用改)  第二个@填写要解析的域(默认后面要带上根域.)
                                        0       ; serial        #主从更新依据(配置文件修改版本,如20200501)
                                        1D      ; refresh       #更新频率(从服务器向主服务器查询周期,默认1天更新1次)
                                        1H      ; retry        #更新失败的重试时间周期(默认1小时重试1次)
                                        1W      ; expire        #无法更新时的失效周期(主服务器同步到从服务器,其数据有效时间,默认1周后失效)
                                        3H )    ; minimum       #缓存服务器无法更新的失效时间(找不到主服务器,其缓存数据,默认3小时后失效)
        NS      @          #NS必须要有,要把@声明DNS服务器本机的域名(如dns.atguigu.com.默认后面要带上根域.)
        A       127.0.0.1     #IPv4 域名IP解析记录
        AAAA    ::1
[root@localhost named]# vim /var/named/named.loopback 
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
        PTR     localhost.

A  指定域名的IPv4地址

AAAA  指定域名的IPv6地址

CNAME  域名别名,对外展示B域名,对内把B域名——>A域名——>DNS服务器IP地址

TXT  一般做反垃圾邮件的

MX  邮件交换记录,做邮件服务器必有

NS  必须要有的,域名服务器记录

PTR  反向解析记录,IP地址——>域名

 

二、DNS基本功能实验 

 1.基本功能实验

  Client    10.0.0.5

  DNS      10.0.0.15

  Httpd     10.0.0.99

  关闭Selinux和iptables和firewalld

2.Web  10.0.0.99

[root@localhost network-scripts]# yum -y install httpd    #安装Web服务器

[root@localhost network-scripts]# cd /var/www/html/
[root@localhost html]# vim index.html              #创建index.html文件,写点东西做标记。
DNS test!
[root@localhost html]# systemctl start httpd          #开启Web服务
[root@localhost html]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-05-01 16:50:14 CST; 5s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 31364 (httpd)
Status: "Processing requests..."
Tasks: 6

3.DNS  10.0.0.15

[root@localhost network-scripts]# yum -y install bind     #安装DNS服务器
[root@localhost network-scripts]# vim /etc/named.conf          #修改主配置文件
options {
listen-on port 53 { any; };      #监听本机所有的网卡
listen-on-v6 port 53 { ::1; };
directory "/var/named";
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";
allow-query { any; };          #允许所有的客户端访问

[root@localhost network-scripts]# vim /etc/named.rfc1912.zones     #修改区域配置文件
zone "atguigu.com" IN {                   #正向解析模板,这里是域,而不是域名
type master;
file "atguigu.localhost";               #正向数据配置文件的文件名,用于调用
allow-update { none; };
};
#zone "localhost" IN {
# type master;
# file "named.localhost";
# allow-update { none; };
#};
#zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
# type master;
# file "named.loopback";
# allow-update { none; };
#};
zone "0.0.10.in-addr.arpa" IN {            #反向解析模板,这里是网段10.0.0.0/24的反写
type master;
file "atguigu.loopback";                #反向数据配置文件的文件名,用于调用
allow-update { none; };
};
#zone "0.in-addr.arpa" IN {
# type master;
# file "named.empty";
# allow-update { none; };
#};

[root@localhost named]# cp -a named.localhost atguigu.localhost    #修改文件名为主配置文件里已经设置好的文件名,使得主配置文件可以调用该数据配置文件
[root@localhost named]# cp -a named.loopback atguigu.loopback
[root@localhost named]# vim atguigu.localhost                  #修改正向数据配置文件
$TTL 1D

@       IN SOA  atguigu.com. rname.invalid. (               #这里是要解析的完整域,而不是域名

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS      dns.atguigu.com.                       #这里是本机的完整域名,而不是域了

dns     A       10.0.0.15                           #要解析的域名的三级域,将dns解析成本机完整IP地址(因为在主配置文件里,已经把二级域、顶级域写好了)

www     A       10.0.0.99                             #要解析的域名的三级域,把www解析成对应完整IP地址
[root@localhost named]# vim atguigu.loopback                  #修改反向配置文件

$TTL 1D

@       IN SOA atguigu.com. rname.invalid. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS      dns.atguigu.com.

15      PTR     dns.atguigu.com.                      #要解析的域名的地址15,把网段的地址解析成对应完整域名(因为在主配置文件里,已经把网段反写0.0.10写好了)

99      PTR     www.atguigu.com.                      
[root@localhost named]# systemctl start named              #开启DNS服务
[root@localhost named]# systemctl status named

● named.service - Berkeley Internet Name Domain (DNS)

   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)

   Active: active (running) since Fri 2020-05-01 17:09:42 CST; 5s ago

  Process: 45795 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)

  Process: 45793 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)

 Main PID: 45797 (named)

    Tasks: 5

   CGroup: /system.slice/named.service

           └─45797 /usr/sbin/named -u named -c /etc/named.conf

4.Clinet  10.0.0.5

[root@localhost named]# curl www.atguigu.com      #curl和elinks都可以连接网站

DNS test!

[root@localhost named]# nslookup wwww.atguigu.com   #测试正向域名解析

Server:        10.0.0.15

Address:    10.0.0.15#53



** server can\'t find wwww.atguigu.com: NXDOMAIN



[root@localhost named]# nslookup 10.0.0.99        #测试反向域名解析

99.0.0.10.in-addr.arpa name = www.atguigu.com.

 

三、DNS主从服务实验

1.初始化配置

目的:从服务器减轻/分担主服务器的压力(一些机器连从服务器,一些机器连主服务器,而不是都连主服务器),并进行数据库备份

Web Server   10.0.0.99

DNS master  10.0.0.15

DNS slave     10.0.0.25

Client        10.0.0.5

2.Web Server   10.0.0.99

[root@localhost network-scripts]# yum -y install httpd 
[root@localhost html]# vim /var/www/html/index.html
master-slave.com!
[root@localhost html]# systemctl restart httpd [root@localhost html]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

3.DNS master  10.0.0.15

[root@localhost network-scripts]# yum -y install bind     #安装DNS服务器
[root@localhost network-scripts]# vim /etc/named.conf          #修改主配置文件
options {
listen-on port 53 { 10.0.0.15; };      #监听本机某个网卡(实际生产时机器至少有2张网卡,1个对内,1个对外)
listen-on-v6 port 53 { ::1; };        #IPv6不使用,可以不改。
directory "/var/named";
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";
allow-query { any; };              #允许所有的客户端访问

[root@localhost network-scripts]# vim /etc/named.rfc1912.zones     #修改区域配置文件
zone "atguigu.com" IN {                   #正向解析模板,这里是域,而不是域名
type master;
file "atguigu.localhost";               #正向配置文件的文件名,用于调用
allow-update { 10.0.0.25; };             #允许从服务器10.0.0.25进行同步更新
};
#zone "localhost" IN {
# type master;
# file "named.localhost";
# allow-update { none; };
#};
#zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
# type master;
# file "named.loopback";
# allow-update { none; };
#};
#zone "0.0.10.in-addr.arpa" IN {            #反向解析模板,这里是网段10.0.0.0/24的反写
#type master;
#file "atguigu.loopback";                #反向配置文件的文件名,用于调用
#allow-update { none; };
#};
#zone "0.in-addr.arpa" IN {
# type master;
# file "named.empty";
# allow-update { none; };
#};

[root@localhost named]# cp -a named.localhost atguigu.localhost    #修改文件名为主配置文件里已经设置好的文件名,使得主配置文件可以调用该数据配置文件
[root@localhost named]# vim atguigu.localhost                  #修改正向数据配置文件
$TTL 1D

@       IN SOA  atguigu.com. rname.invalid. (               #这里是要解析的完整域,而不是域名

                                     20180501       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS      dns.atguigu.com.                       #这里是本机的完整域名,而不是域了

dns     A       10.0.0.15                           #要解析的域名的三级域,将dns解析成本机完整IP地址(因为在主配置文件里,已经把二级域、顶级域写好了)

www     A       10.0.0.99                             #要解析的域名的三级域,把www解析成对应完整IP地址
[root@localhost named]# systemctl start named               #开启DNS服务

4.DNS slave  10.0.0.25

[root@localhost network-scripts]# yum -y install bind     #安装DNS服务器
[root@localhost network-scripts]# vim /etc/named.conf          #修改主配置文件
options {
listen-on port 53 { 10.0.0.25; };      #监听本机某个网卡(实际生产时机器至少有2张网卡,1个对内,1个对外)
listen-on-v6 port 53 { ::1; };        #IPv6不使用,可以不改。
directory "/var/named";
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";
allow-query { any; };              #允许所有的客户端访问

[root@localhost network
-scripts]# vim /etc/named.rfc1912.zones     #修改区域配置文件 zone "atguigu.com" IN {             #正向解析模板,这里是域,而不是域名 type slave;
masters { 10.0.0.15; };               #补上1行,声明master的服务器地址
file "slaves/atguigu.localhost";          #正向配置文件的文件名,用于调用。但是注意,从服务器默认将数据保存在slaves目录1份。 #allow-update { none; };               #slave服务器将此行删除,不需要有!!              }; #zone "localhost" IN { # type master; # file "named.localhost"; # allow-update { none; }; #}; #zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { # type master; # file "named.loopback"; # allow-update { none; }; #}; #zone "0.0.10.in-addr.arpa" IN {            #反向解析模板,这里是网段10.0.0.0/24的反写 #type master; #file "atguigu.loopback";                #反向配置文件的文件名,用于调用 #allow-update { none; }; #}; #zone "0.in-addr.arpa" IN { # type master; # file "named.empty"; # allow-update { none; }; #};
[root@localhost admin]# cd /var/named/         #slave服务器会自动生成/var/named/slaves目录,数据配置文件不再直接保存到/var/named/下了 [root@localhost named]# ls         data dynamic named.ca named.empty named.localhost named.loopback slaves [root@localhost admin]# cd /var/named/slaves/ [root@localhost slaves]# ll total 0

[root@localhost named]# systemctl start named               #开启DNS服务
[root@localhost slaves]# ll                          #原本文件内为空,此时生成数据配置文件。 total 4 -rw-r--r-- 1 named named 245 May 1 19:31 atguigu.localhost

5.Client  10.0.0.5

[root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
YPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3294ba0a-1db5-4076-8ede-8da3b8cfac9c
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.5
NETMASK=255.255.255.0DNS1=10.0.0.25                        #只填写DNS slave的IP地址,不填写DNS master的!!!!!!!!!!!
[root@localhost named]# ifdown ens33; ifup ens33
Device \'ens33\' successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/18)

[root@localhost named]# nslookup www.atguigu.com Server: 10.0.0.15 Address: 10.0.0.15#53 Name: www.atguigu.com Address: 10.0.0.99 [root@localhost named]# curl www.atguigu.com master-slave.com!

 

四、DNS缓存服务器

1.实验准备

上述拓扑结构和其他配置不变,先把DNS主服务关闭,然后把DNS从服务关闭并改为DNS缓存服务。

目的:加快解析速度,提高工作效率

软件:dnsmasq

配置文件:/etc/dhsmasq.conf

      domain=需要解析的域名(如atguigu.com)

      server=DNS服务器IP地址

      cache-size=150000声明缓存条数

 2.DNS Server  10.0.0.15

[root@localhost user1]# systemctl stop named
[root@localhost user1]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

3.DNS Cache  10.0.0.25

[root@localhost admin]# systemctl stop named      #因为接着刚才的实验,所以先关闭DNS slave
[root@localhost admin]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

[root@localhost admin]# yum -y install dnsmsaq     #安装dnsmasq服务
[root@localhost admin]# vim /etc/dnsmasq.conf       #配置3个参数
domain=atguigu.com                      #域名(www.atguigu.com中,不严谨地情况下,www是主机名,atguigu.com是域名)
server=10.0.0.15                        #主DNS服务器地址
cache-size=1500                        #缓存条数

[root@localhost admin]# systemctl start dnsmasq    
[root@localhost admin]# systemctl status dnsmasq
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-05-02 15:38:58 CST; 7s ago
 Main PID: 3837 (dnsmasq)
    Tasks: 1
   CGroup: /system.slice/dnsmasq.service
           └─3837 /usr/sbin/dnsmasq -k

4.Clinet  10.0.0.5

[root@localhost named]# nslookup www.atguigu.com          #使用DNS从服务器的结果
Server:        10.0.0.25
Address:    10.0.0.25#53

Name:    www.atguigu.com
Address: 10.0.0.99

[root@localhost named]# nslookup www.atguigu.com          #使用DNS缓存服务器的结果 Server:
10.0.0.25 Address: 10.0.0.25#53 Non-authoritative answer:             缓存服务器的结果不够严谨,所以显示未认证。              Name: www.atguigu.com Address: 10.0.0.99

五、DNS分离解析

1.普通解析vs分离解析

2.实验环境

目标:将相同域名解析为不同的IP地址,把来自不同运营商的用户解析到

以上是关于dns的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数