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]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
2019-05-07 网络编程