返回总目录页

dns详解

获取localdns工具

#获取localdns可以使用https://huatuo.qq.com/
http://nstool.netease.com/这两个工具

理论

 

 

 

部署架构

部署架构,如下图,不过这里的ip改一下。

10.0.0.18   mcw08  客户端
10.0.0.19   mcw09  服务端
10.0.0.20   mcw10   httpd

 准备httpd服务

yum intall httpd 

修改页面

 测试访问的页面

 

 

dns服务端(mcw09操作):

yum安装

yum install -y bind

 

修改配置文件:

vim /etc/named.conf

先修改为any,作为测试功能使用

 

 

 第一个是正向解析的,第二个是反向解析的

 named.ca记录了13台根域的位置

 看下内容

 我a-m,好像不是13台啊。下面那个是ipv6地址吗,如过只算ipv4,好像是13台

 slaves目录是主从同步的时候,从保持自己的配置等信息的

 此时我们将/etc/named.conf,先改为any

下面这个是区域配置文件,主配置文件调用区域配置文件

/etc/named.conf它包含了下面这个配置文件。我们这里将下面的文件保留正向模板和反向模板就好

只保留了正向和反向解析的模板了

 正向解析这里,写的是要解析的域,而不是域名,我们这里的要解析的域是atguigu.com。反解是从.in前面开始改,一般写ip 网段的分析,比如mcw09域名服务器ip是10.0.0.19,网段是10.0.0,这里要解析的网段是10.0.0.0 ,上面就是正向反向标签名字的写法。反向解析的名字,网段要倒着写

正向解析这里,写的是要解析的域,而不是域名,我们这里的要解析的域是atguigu.com。反解是从.in前面开始改,一般写ip 网段的分析,比如mcw09域名服务器ip是10.0.0.19,网段是10.0.0,这里要解析的网段是10.0.0.0 ,上面就是正向反向标签名字的写法。

file 就是正向解析和反向解析对应的配置文件的文件名。allow-update,是否实时同步更新,这里没有做主从,暂时不需要实时更新,none就可以。也就是这个文件这里只需要改标签名和文件名。

 主配置文件修改了any,区域配置文件修改如上,现在开始需要修改数据文件了。分为正向数据文件和反向数据文件。

 无论是正向还是反向解析上面都是一样的配置,有区别的是下面的这些

 生成配置文件

 修改正向解析的配置,修改前如下

我们修改一下正向的配置文件。将@改为要解析的域,atguigu.com.。时间周期不用改,域后面要加个点。
下面在NS后面,添加域名dns.atguigu.com.,域名后面也要加点。
在A前面写域名的三级域,这里的三级域是dns,所以前面写dns。A后面写解析的ip地址。
下面还有个www主机,解析到另外一个ip。
如果还有其它记录,继续往下写
dns 10.0.0.19
www 10.0.0.20

$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.19
www     A       10.0.0.20
正向解析

 

 

 反向解析修改前

 正向解析是A和 4A,反向解析是PTR,因此反向解析,可以把A和4A两行删除掉。

反向解析,因为生成了dns.atguigu.com,因此必须先给它添加上反向解析。
因为我们在区域配置文件的反向解析配置中,添加了10.0.0网段的解析,因此这里就不需要写网段了,只需要写主机位,dns服务器的ip是10.0.0.19,主机位是19,因此PTR前面就写它的主机位19. ,不需要写完整的ip。
我们还有个httpd服务器,是10.0.0.20的ip,我们给它一个PTR记录,网段在区域配置里面设置了,这里设置20主机位数字,PTR后面就是域名www.atguigu.com。

记得域名后面要有点

 正反向解析都配置好之后,就可以启动域名服务了,tcp的有三个。

 我们先将mcw08我们作为客户端的主机上原来的域名去掉

 删除重启之后就不能解析域名了

 我们将ens33的域名,设置为mcw09域名服务器,重启网络之后,我们可以看到,已经实现了之前配置的两个域名的解析。可以通过域名,解析出来域名服务器是mcw09服务器,httpd是mcw20服务器ip。

 

 

 

 我们再看下,resolve.conf配置文件,已经写入了域名服务器位置为我们部署了域名服务的mcw09主机,此时这个dns客户端,可以解析出dns服务端的解析记录www.atguiqu.com,也能解析出外网www.baidu.com的域名,至于为什么能解析出来,可以是mcw09域名服务是作为localdns,mcw09是通外网的,它可能是做了迭代查询,将解析结果返回给dns客户端mcw08主机吧,因此才能获取到百度域名的ip。

nslookup命令

我们要使用nslookup命令

bind-utils 这个bind-utils包,就包含了nslookup命令 

yum install -y bind-utils 

 

正向解析

然后执行命令。查看一下这个域名。可以看的,域名服务器是我们在mcw09虚拟机,域名地址是mcw09上部署的域名服务的地址。

再往下就是我们想要解析的域名是什么,域名解析后的地址是什么。这里是解析到了httpd服务器的ip上了。

 反向解析

报错了,它将域配置里面和 我们在域名数据反解文件里面设置的20主机位拼接起来后,倒着念的结果是10.0.0.02这个ip,而我们反解析的是10.0.0.20这个ip,因此应该将数据文件的主机位,倒着写才对吧。

反解析失败如下:

下面的区域配置文件的反向解析这里写错了。虽然是倒着写,但不是ip整体倒着写,而是ip点分的每8位都是倒着写,但是8位的数值是正着写的

如下案例配置:192.168.88.30网段的ip反解,反解析配置区域配置名称如下,

因此要改成如下:

如下。Mcw08客户端反解析,成功获得域名

 

主从dns部署

部署架构

 

 部署规划

10.0.0.16 mcw06 dns master服务端
10.0.0.17 mcw07 dns slave服务端
10.0.0.18 mcw08 dns客户端
10.0.0.20 mcw10 httpd

httpd部署

mcw10 上安装httpd,作为web服务器,并修改index文件如下

yum install -y httpd

vim /var/www.html/index.html

systemctl start httpd

 在mcw08 dns客户端上访问网站,测试成功访问。

 主从dns服务器部署

主从服务器都安装包bind

yum install -y bind

部署过程和上面的单台dns服务器部署一样,但是这里就暂时不做dns反向解析了。二者的区别是,在主dns的区域配置文件中,需要允许更新,设置为从服务器的ip地址,而不是之前的none

 监听端口之前是any,好像会多出其它类型的协议吗还是,回头研究。现在先改成使用mcw06本机ip。ipv6的先不改,允许查询的,改成any。

 看下区域配置的修改,我们还是atguigu.com这个域,file也改成下面那样,我们的从dns服务器mcw07的ip是10.0.0.17,因此允许更新,需要设置为从dns服务器。

 创建并配置数据文件,跟上面单台的配置过程相同。dns服务,是本机ip。www服务是web服务器mcw10主机,IP是10.0.0.20

[root@mcw06 ~]# cd /var/named/
[root@mcw06 named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@mcw06 named]# cp -a named.localhost atguigu.localhost
[root@mcw06 named]# vim atguigu.localhost 
[root@mcw06 named]# cat 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.16
www    A    10.0.0.20
[root@mcw06 named]# 
[root@mcw06 named]# systemctl start named 
[root@mcw06 named]# 

从服务器部署配置

 安装好bind后,从服务器的主配置文件,跟主服务器一样的修改,改为监听本机ip,allow-qeury改为any

 修改从服务器的区域配置文件,这里同样把其它的删掉了,只保留了正向解析的配置。下面是修改前的配置

 看下从服务器的配置,将类型改为从,并添加主的ip地址,ip放在花括号内,前后得有空格,内部ip也是分号结尾。allow-update,暂时不用修改。

[root@mcw07 ~]# tail -7 /etc/named.rfc1912.zones
zone "atguigu.com" IN {
    type slave;
    master { 10.0.0.16; };
    file "atguigu.localhost";
    allow-update { none; };
};

[root@mcw07 ~]# 

从服务器,生成的会自动放到slaves目录下,下面配置错了,少了个s,是masters

它的主配置文件中,定义了bind的根目录是/var/named下,

 我们配置的指定正向解析的文件,要添加上slaves,不然生成到bind指定根目录下了。

 然后启动从服务器的dns,发现报错,不能有允许更新字段吧,那就删除掉这一个配置,然后重新启动

[root@mcw07 named]# systemctl start named
Job for named.service failed because the control process exited with error code. See "systemctl status named.service" and "journalctl -xe" for details.
[root@mcw07 named]# journalctl -xe
-- Unit named.service has begun starting up.
May 08 13:10:46 mcw07 bash[2755]: /etc/named.rfc1912.zones:17: option 'allow-update' is not allowed in 'slave' zone 'atguigu.com'
May 08 13:10:46 mcw07 systemd[1]: named.service: control process exited, code=exited status=1
May 08 13:10:46 mcw07 systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).
-- Subject: Unit named.service has failed

[root@mcw07 named]# vim /etc/named.rfc1912.zones 
[root@mcw07 named]# systemctl start named
[root@mcw07 named]# 

删除区域配置中的这一项allow-update,启动之后,发现生成了这个配置文件,但是和主服务器的文件内容不是同

 客户端测试主服务器mcw06,成功解析

 从dns也能成功解析

 不过从dns生成的这个配置,和视频里看的不一样,但是依然能从从dns mcw07解析出来。视频中,从dns跟主的基本上一致,我这里不同

别人的如下

 访问页面测试,也是成功的

 主的挂掉,

 从的还是能访问,我这里配置的谁,如果谁挂掉,那么服务就不可以用了,不知道怎么回事

 dns缓存服务器

我们就用上面的主从dns来做。把从dns改成dns缓存服务器

10.0.0.16   mcw06  dns master服务端
10.0.0.17   mcw07  dns 缓存服务器 #原来是dns从服务器
10.0.0.18   mcw08  dns客户端
10.0.0.20   mcw10   httpd

之前的可以参考上面的部署。下面就在上面部署的基础上进行修改

将mcw06 dns服务启动,将mcw07的dns服务停掉

然后在mcw07上安装dns缓存服务,dnsmasq

[root@mcw07 named]# yum install -y dnsmasq

配置文件只需要修改下面三个就行

 添加我们的域

 dns服务器ip

 缓存大小,这里暂且用150吧,这里是测试用

 启动dns缓存服务

 此时,我们将客户端请求的地址,改为mcw07 dns缓存服务器,这样是可以正常解析ip的。

 当我们将dns主服务器mcw06 的dns服务stop掉,客户端mcw08依然是请求的dns缓存服务器,依然是能解析的,但是会多出一条错误信息如下:

Non-authoritative answer
[root@mcw08 ~]# tail -2 /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1="10.0.0.17"
IPV6_PRIVACY="no"
[root@mcw08 ~]# nslookup www.atguigu.com
Server:        10.0.0.17
Address:    10.0.0.17#53

Non-authoritative answer:
Name:    www.atguigu.com
Address: 10.0.0.20

[root@mcw08 ~]# 

注意:此时我们解析另一个域名,发现无法解析。

这是因为,www的域名在stop主域名服务之前,客户端mcw08已经请求过mcw07这个dns缓存服务器了,mcw07自己没有,就去dns主服务器要解析地址,要到之后自己保存一个记录,结果也发给客户端mcw08,因此即使dns主服务器停掉之后,dns缓存服务器已缓存的域名还是能解析出来。而dns这个域名,在stop 域名主服务之前,没有被请求过,因此dns缓存服务器没有保存dns域名的解析记录,然后又无法请求到域名主服务的解析结果,因此就不能反向这个域名的解析结果。

[root@mcw08 ~]# 
[root@mcw08 ~]# nslookup dns.atguigu.com
Server:        10.0.0.17
Address:    10.0.0.17#53

** server can't find dns.atguigu.com: NXDOMAIN

[root@mcw08 ~]# 

主从是为了降低主的访问压力,并且可以作为备份;主缓是为了加快解析速度,提高工作效率。

 智能DNS

 正常情况下,主从还是主缓都是如下过程。是否允许访问,就是主配置文件中allow-query。然后找到区域配置下的正向和反向解析的配置,然后是找到数据配置文件。如果是正向解析,那么找正向解析的数据配置文件,如果是反向解析请求,就找反向解析的数据配置文件。数据配置文件里面存放了解析记录。

 下面的就是智能dns解析。如下:

分离解析服务器有两个网卡,不同的客户端,在主配置文件中会匹配到不同的区域配置文件,假设是内网的客户端,就匹配到内网的区域配置文件;外网的客户端,就匹配到外网的区域配置文件。每个区域配置文件又有数据文件,数据文件又分为正向和反向。

 如下架构图,dns解析器,也是个dns路由器。

 因此需要两个服务器需要有双网卡

 

10.0.0.16   mcw06  dns master服务端
10.0.0.17   mcw07  外网测试机
10.0.0.18   mcw08  内网测试机
10.0.0.20   mcw10   httpd

mcw10开启内网网卡

[root@mcw10 html]# ifup ens34
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/22)
[root@mcw10 html]# 
[root@mcw10 html]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8a:f0:27 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.20/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f32c:166d:40de:8f2e/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::495b:ff7:d185:f95d/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::9335:fbc:5cf6:ad83/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:8a:f0:31 brd ff:ff:ff:ff:ff:ff
    inet 172.168.1.20/24 brd 172.168.1.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::c7c4:97e9:a77b:a70b/64 scope link 
       valid_lft forever preferred_lft forever
[root@mcw10 html]# 

mcw06开启内网网卡

[root@mcw06 named]# ifup ens34
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15)
[root@mcw06 named]# 
[root@mcw06 named]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4b:ed:20 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.16/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::f32c:166d:40de:8f2e/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::495b:ff7:d185:f95d/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::9335:fbc:5cf6:ad83/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4b:ed:2a brd ff:ff:ff:ff:ff:ff
    inet 172.168.1.16/24 brd 172.168.1.255 scope global ens34
       valid_lft forever preferred_lft forever
    inet6 fe80::428e:4a2b:802a:fccc/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::c7c4:97e9:a77b:a70b/64 scope link tentative dadfailed 
       valid_lft forever preferred_lft forever
[root@mcw06 named]# 

mcw10能ping通mcw06的内网ip

[root@mcw10 html]# ping -c 2 172.168.1.16
PING 172.168.1.16 (172.168.1.16) 56(84) bytes of data.
64 bytes from 172.168.1.16: icmp_seq=1 ttl=64 time=1.03 ms
64 bytes from 172.168.1.16: icmp_seq=2 ttl=64 time=0.733 ms

--- 172.168.1.16 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.733/0.882/1.032/0.152 ms
[root@mcw10 html]# 

mcw06能ping通mcw10的内网ip

 

[root@mcw06 named]# 
[root@mcw06 named]# ping -c 2 172.168.1.20
PING 172.168.1.20 (172.168.1.20) 56(84) bytes of data.
64 bytes from 172.168.1.20: icmp_seq=1 ttl=64 time=0.428 ms
64 bytes from 172.168.1.20: icmp_seq=2 ttl=64 time=0.438 ms

--- 172.168.1.20 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.428/0.433/0.438/0.005 ms
[root@mcw06 named]# 

 

 我们已经还在之前的环境,因此mcw06已经安装了bind软件

开启内核转发。

 下面就是分离解析实验当中所使用的内容。主配置文件中除了修改监听的地址,允许那里来的进行访问之外。还需要在主配置文件添加下面的配置,需要声明两个视图。

视图一个是内网,一个是外网,分别起了名字。视图内需要匹配客户端网段,比如192.168.10网段的,匹配上就走lan内网的lan.zones区域配置文件;如果匹配客户端请求来的网段是192.168.2网段的,匹配到那么就让它走wan视图,wan视图就会走wan.zones区域配置文件。

视图中的zone,必须有.表示根域

因为内网外网ip匹配到了就走内网外网的视图,找里面的zones区域配置文件,因此主配置文件倒数第二行的区域配置文件就需要注释掉,不需要了。

 接下来开始配置。

这里两个地方都先写any

 下面就是声明两个视图,每个视图都需要把 zone包含进去

 匹配时自伤而下匹配的,当匹配到是内网ip,就找lan视图,否则的话,都算外网ip,找wan视图,wan视图接收所有,也即是匹配不到内网ip的。

 我们cd /etc下面,-a复制出lan的区域配置文件,不要其它的,只保留区域配置文件,域还是跟上面的一样,数据文件改为lan.localhost,允许更新设置为none。

 配置wan的区域配置文件。这两个区域文件和之前的区域文件都是放在/etc下。

 和之前的一样配置,但是内网的要解析成内网ip,外网的需要解析成外网ip。

 记得把主配置文件指定的区域配置文件的路径补全。然后就可以启动 named服务了

 

10.0.0.16 mcw06 dns master服务端
10.0.0.17 mcw07 外网测试机
10.0.0.18 mcw08 内网测试机
10.0.0.20 mcw10 httpd

 

开始测试。

先测试外网的mcw07主机。将域名服务器改为我们自己部署的域名服务器之后,然后在外网测试机上测出,域名服务器的外网ip,域名的解析记录,也是外网ip。

 我们把mcw08的外网网卡停掉,从mcw10上面通过内网ip连接。可以看的,用的是ens34内网网卡。

 重启网络之后发现可以解析了,但是域名不是被解析为内网ip,不符合预期

 这是因为dns服务器之前的主配置文件网段写错了

 改正为网段为168的才对,这样才能匹配到lan

 dns的主配置文件改正确之后,就可以在内网服务器mcw08上面成功解析出是内网IP了,也就是我是172内网访问dns,然后匹配到lan视图,在视图中又匹配到客户端是内网的网段,并且找到的an的区域配置文件。区域配置文件中指定了lan的数据文件的位置,里面有lan对应的内网ip的解析记录。

 由上可知,dns成功实现了根据网段不同。然后将域名解析指定解析成不同的ip结果,这就是实现了智能DNS解析。智能dns,可以根据客户端ip的地址不同,将域名解析到离客户最近的地域的服务器ip。

使用dig查询域名解析结果

dig查询域名解析结果,解析结果是10.0.0.20,域名服务器是10.0.0.16

[root@mcw07 named]# dig www.atguigu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> www.atguigu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45556
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.atguigu.com.        IN    A

;; ANSWER SECTION:
www.atguigu.com.    86400    IN    A    10.0.0.20

;; AUTHORITY SECTION:
atguigu.com.        86400    IN    NS    dns.atguigu.com.

;; ADDITIONAL SECTION:
dns.atguigu.com.    86400    IN    A    10.0.0.16

;; Query time: 0 msec
;; SERVER: 10.0.0.16#53(10.0.0.16)
;; WHEN: Tue May 09 12:57:32 CST 2023
;; MSG SIZE  rcvd: 94

[root@mcw07 named]# 
[root@mcw07 named]# nslookup www.atguigu.com
Server:        10.0.0.16
Address:    10.0.0.16#53

Name:    www.atguigu.com
Address: 10.0.0.20

[root@mcw07 named]# 

 

posted @ 2023-05-07 01:08  马昌伟  阅读(142)  评论(0编辑  收藏  举报
博主链接地址:https://www.cnblogs.com/machangwei-8/