1、DNS工作原理
- 主机先查询本地DNS缓存及hosts文件是否有域名对应IP地址,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性;如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责.com域名解析的顶级域名服务器的一个IP。
- 这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个负责.baidu.com域名解析的权限DNS服务器地址给本地DNS服务器
- 本地域名服务器然后向权限域名服务器dns.baidu.com进行查询。权限域名服务器dns.baidu.com告诉本地域名服务器所查询的域名的IP地址。本地域名服务器最后把查询结果告诉本地主机。完成访问过程
2、搭建DNS主从
2.1 环境准备
10.0.0.146 主DNS服务器
10.0.0.147 从DNS服务器
10.0.0.148 web服务器
10.0.0.149 DNS客户端
2.2 实现步骤
主DNS配置
[root@DNS-1 ~]#yum install bind -y
[root@DNS-1 ~]#vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#只允许从服务器进行区域传输
allow-transfer { 从服务器IP;};
[root@DNS-1 ~]#vim /etc/named.rfc1912.zones
#加上这段
zone "jiangfeng.org" {
type master;
file "jiangfeng.org.zone";
};
[root@DNS-1 ~]#cp -p /var/named/named.localhost /var/named/jiangfeng.org.zone
[root@DNS-1 ~]#vim /var/named/jiangfeng.org.zone
$TTL 1D
@ IN SOA master admin.jiangfeng.org (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 10.0.0.146
slave A 10.0.0.147
www A 10.0.0.148
[root@DNS-1 ~]#chgrp named /var/named/jiangfeng.org.zone
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
从DNS配置
[root@DNS-2 ~]#yum install bind -y
[root@DNS-2 ~]#vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
[root@DNS-2 ~]#vim /etc/named.rfc1912.zones
zone "jiangfeng.org" {
type slave;
masters { 10.0.0.146; };
file "slaves/jiangfeng.org.slave";
};
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
web端安装httpd
[root@web ~]#yum install httpd -y
[root@web ~]#systemctl enable --now httpd
[root@web ~]#echo test > /var/www/html/index.html
[root@web ~]#curl 10.0.0.148
test
客户端测试主从DNS服务架构
[root@client ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
IPADDR=10.0.0.149
GATEWAY=10.0.0.2
DNS1=10.0.0.146
DNS2=10.0.0.147
PREFIX=24
NAME=eth0
DEVICE=eth0
ONBOOT=yes
[root@client rpm-gpg]#dig www.jiangfeng.org
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.jiangfeng.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12745
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b0cec8bdbaf31a43b9b678a56134794d5aa9ab2c19a4455c (good)
;; QUESTION SECTION:
;www.jiangfeng.org. IN A
;; ANSWER SECTION:
www.jiangfeng.org. 86400 IN A 10.0.0.148
;; AUTHORITY SECTION:
jiangfeng.org. 86400 IN NS slave.jiangfeng.org.
jiangfeng.org. 86400 IN NS master.jiangfeng.org.
;; ADDITIONAL SECTION:
master.jiangfeng.org. 86400 IN A 10.0.0.146
slave.jiangfeng.org. 86400 IN A 10.0.0.147
;; Query time: 2 msec
;; SERVER: 10.0.0.146#53(10.0.0.146)
;; WHEN: Sun Sep 05 16:01:17 CST 2021
;; MSG SIZE rcvd: 163
在主服务器上停止DNS服务
[root@DNS-1 ~]#systemctl stop named
[root@client ~]#dig www.jiangfeng.org
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.jiangfeng.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7526
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 8298f021556e1505755280f56134a04c74e9ea8dd3446f5f (good)
;; QUESTION SECTION:
;www.jiangfeng.org. IN A
;; ANSWER SECTION:
www.jiangfeng.org. 86400 IN A 10.0.0.148
;; AUTHORITY SECTION:
jiangfeng.org. 86400 IN NS slave.jiangfeng.org.
jiangfeng.org. 86400 IN NS master.jiangfeng.org.
;; ADDITIONAL SECTION:
master.jiangfeng.org. 86400 IN A 10.0.0.146
slave.jiangfeng.org. 86400 IN A 10.0.0.147
;; Query time: 1 msec
;; SERVER: 10.0.0.147#53(10.0.0.147)
;; WHEN: Sun Sep 05 18:47:40 CST 2021
;; MSG SIZE rcvd: 163
测试web
[root@client ~]#curl www.jiangfeng.org
test