DNS 主从同步配置
DNS 域名解析原理
域名解析过程
- 1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 3.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 4.如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 5.如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。
- 本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
- 6.如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。
- 注:不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS 递归/迭代 原理
递归查询
递归:客户端只发一次请求,要求对方给出最终结果。一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;
迭代查询(反复查询)
迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;
授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。
从递归和迭代查询可以看出:
客户端-本地dns服务端:这部分属于递归查询。
本地dns服务端---外网:这部分属于迭代查询。
递归查询时,返回的结果只有两种:查询成功或查询失败.
迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址.
DNS 缓存机制原理
DNS 缓存机制原理
简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,
如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会递归式的查找域名记录,然后返回。
DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,
而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
Windows访问DNS后会把记录保存一段短暂的时间,可通过ipconfig /displaydns 查看windows的DNS缓存、通过ipconfig /flushdns来清除。
DNS 安装配置
实验环境
一台主机:Linux Centos 6.5 32位
- 安装包:
- DNS服务:bind.i686
- DNS测试工具:bind-utils
DNS 服务安装
yum -y install bind.i686 yum -y install bind-utils
2、清空主配置文件,重新添加内容,添加权限
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
主配置文件
# 修改所属权限
chown named /etc/named.conf
# 文件查找 根 服务器
dig -t NS . > /var/named/named.ca
# 生成 rndc.key,如果没有key namd 无法启动 或 启动慢
rndc-confgen -r /dev/urandom -a
# 将key文件赋值所属权限
chown named:named /etc/rndc.key
3、写入本地域文件,针对127.0.0.1写的zone域(可以不写)
@ IN SOA localhost. admin.localhost. ( 2013081601 1H 10M 7D 1D ) @ IN NS localhost. localhost. IN A 127.0.0.1 localhost.zone文件
vim /var/named/named.local
$TTL 86400 @ IN SOA localhost. admin.localhost. ( 2013081601 1H 10M 7D 1D ) @ IN NS localhost. 1 IN PTR localhost named.local文件
4、检测配置文件,检测解析
# 检查配置是否有问题
named-checkconf
命令:named-checkzone "localhost" /var/named/localhost.zone /var/named/localhost.zone:1: no TTL specified; using SOA MINTTL instead zone localhost/IN: loaded serial 2013081601 OK
命令:named-checkzone "0.0.127.in-addr.arpa" /var/named/named.local
zone 0.0.127.in-addr.arpa/IN: loaded serial 2013081601
OK
5、启动DNS服务
/etc/init.d/named start
命令:netstat -lnp | grep :53 tcp 0 0 192.168.2.10:53 0.0.0.0:* LISTEN 7242/named tcp 0 0 192.168.1.160:53 0.0.0.0:* LISTEN 7242/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 7242/named udp 0 0 192.168.2.10:53 0.0.0.0:* 7242/named udp 0 0 192.168.1.160:53 0.0.0.0:* 7242/named udp 0 0 127.0.0.1:53 0.0.0.0:* 7242/named 查看监听端口
6、测试解析
# @locahost 为 DNS 地址 命令:dig @localhost localhost ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @localhost localhost ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11652 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;localhost. IN A ;; ANSWER SECTION: localhost. 86400 IN A 127.0.0.1 # 解析结果为127.0.0.1 ;; AUTHORITY SECTION: localhost. 86400 IN NS localhost. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Dec 24 08:20:17 2017 ;; MSG SIZE rcvd: 57 测试正向解析
命令:dig @127.0.0.1 -x 127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @127.0.0.1 -x 127.0.0.1 ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59086 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;1.0.0.127.in-addr.arpa. IN PTR ;; ANSWER SECTION: 1.0.0.127.in-addr.arpa. 86400 IN PTR localhost.0.0.127.in-addr.arpa. ;; AUTHORITY SECTION: 0.0.127.in-addr.arpa. 86400 IN NS localhost. ;; ADDITIONAL SECTION: localhost. 86400 IN A 127.0.0.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Dec 24 08:22:31 2017 ;; MSG SIZE rcvd: 103 测试反向解析
DNS 配置自定义域名
DNS 资源记录
资源记录类型 |
起始授权结构(SOA) |
主机(A) |
别名(CNAME) |
邮件交换器(MX) |
名称服务器(NS) |
说明 |
起始授权机构 |
地址 |
标准名称 |
邮件交换器 |
名称服务器 |
解释 |
此记录指定区域的起点。它所包含的信息有区域名、区域管理员电子邮件地址,以及指示辅 DNS 服务器如何更新区域数据文件的设置等。 |
主机(A)记录是名称解析的重要记录,它用于将特定的主机名映射到对应主机的IP地址上。你可以在DNS服务器中手动创建或通过DNS客户端动态更新来创建。 |
此记录用于将某个别名指向到某个主机(A)记录上,从而无需为某个需要新名字解析的主机额外创建A记录。 |
此记录列出了负责接收发到域中的电子邮件的主机 ,通常用于邮件的收发。 |
此记录指定负责此DNS区域的权威名称服务器。 |
DNS 域名配置
1、修改主配置文件,添加域名
# 正向解析 zone "baidu.com" IN { type master; # file名字要与 /var/named/下配置文件文件名字吻合 file "baidu.com.zone"; };
2、编辑域名配置文件
; 更改记录600秒后生效,600秒后再次请求根服务器 $TTL 600 ; 域名baidu.com. 固定格式root.baidu.com. @ IN SOA baidu.com. root.baidu.com. ( ; 序列号,标记 2013081601 ; 刷新缓存 1H ; 更改记录 10M ; 过期时间 7D ; 最小数 1D ) ; NS 将本地IP 解析为 ns.baidu.com. IN NS ns.baidu.com. ; MX(相当于证书)域名支持邮件 添加记录 IN MX 10 mail.baidu.com. ; A 添加域名 绑定IP ns IN A 192.168.1.170 www IN A 192.168.1.171 mail IN A 192.168.1.172 ; CNAME 指定域名,相当于 www 192.168.0.11 bbs IN CNAME www.baidu.com.
3、测试配置文件

named-checkconf
named-checkconf

命令:named-checkzone "baidu.com" /var/named/baidu.com.zone
zone baidu.com/IN: loaded serial 2013081601
OK
命令:named-checkzone "baidu.com" /var/named/baidu.com.zone zone baidu.com/IN: loaded serial 2013081601 OK
4、重启服务
/etc/init.d/named restart
5、测试域名解析
命令:dig @192.168.1.160 www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 www.baidu.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35900 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: # 解析 IP www.baidu.com. 600 IN A 192.168.1.171 ;; AUTHORITY SECTION: # 通过NS ns.baidu.com. 解析 为 www.baidu.com. baidu.com. 600 IN NS ns.baidu.com. ;; ADDITIONAL SECTION: # 通过192.168.1.170 解析为 ns.baidu.com. ns.baidu.com. 600 IN A 192.168.1.170 ;; Query time: 0 msec ;; SERVER: 192.168.1.160#53(192.168.1.160) ;; WHEN: Sun Dec 24 09:09:12 2017 ;; MSG SIZE rcvd: 80 测试正向解析1
命令:dig @192.168.1.160 bbs.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 bbs.baidu.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61015 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;bbs.baidu.com. IN A ;; ANSWER SECTION: # 解析域名通过 www.baidu.com. 解析为 192.168.1.171 bbs.baidu.com. 600 IN CNAME www.baidu.com. www.baidu.com. 600 IN A 192.168.1.171 ;; AUTHORITY SECTION: # 通过NS ns.baidu.com. 解析 为 www.baidu.com. baidu.com. 600 IN NS ns.baidu.com. ;; ADDITIONAL SECTION: # 通过192.168.1.170 解析为 ns.baidu.com. ns.baidu.com. 600 IN A 192.168.1.170 ;; Query time: 0 msec ;; SERVER: 192.168.1.160#53(192.168.1.160) ;; WHEN: Sun Dec 24 09:13:01 2017 ;; MSG SIZE rcvd: 98 测试正向解析2
DNS 主从同步配置
- 主从同步:主每次修改配置文件需要修改一下序列号,主从同步主要 看序列号。
-
从DNS:从是可以单独修改,主从不会报错。但从修改后,主端同步给从后 从端修改数据会丢失
- 主从原理:从会监听主的 TCP 53 端口,它会隔一段时间去探测 序列号如果主端 序列号更新后 从端探测到会 将主端内容 同步到本地。
- 同步模式:从主动探测时间比较缓慢,可以设置主端,每次变更序列号时主动将,数据信息,推送给从DNS端。
主 DNS 配置
1、配置主配置文件
# 正向解析
zone "baidu.com" IN {
# 定义master主类型
type master;
# 设置需要同步的文件路径
file "baidu.com.zone";
# 主动推送
notify yes;
# 写入从DNS端IP
also-notify { 192.168.1.161; };
};
2、添加域配置文件
$TTL 600
@ IN SOA baidu.com. root.baidu.com. (
2013081602
1H
10M
7D
1D
)
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.1.170
www IN A 192.168.1.171
mail IN A 192.168.1.172
bbs IN CNAME www.baidu.com.
域配置文件
3、测试配置,重启服务
# 测试配置文件
named-checkconf
# 启动服务
/etc/init.d/named start
从 DNS 配置
1、配置主配置文件
# 正向解析
zone "baidu.com" IN {
# 主要修改,上边分别为本地解析可以不添加
type slave;
# 编辑文件存放目录
file "slaves/baidu.com.zone";
# 指定master IP
masters { 192.168.1.160; };
};
2、测试配置,重启服务
# 测试配置文件
named-checkconf
# 启动服务
/etc/init.d/named start
3、查看生成域文件
ls /var/named/slaves/baidu.com.zone
测试
$TTL 600
@ IN SOA baidu.com. root.baidu.com. (
2013081602
1H
10M
7D
1D
)
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.1.170
www IN A 192.168.1.171
mail IN A 192.168.1.172
bbs IN CNAME www.baidu.com.
; 随便添加一条aaa 作为主从测试
aaa IN A 2.2.2.2
主:域配置文件
2、从:测试数据是否同步
$ORIGIN . $TTL 600 ; 10 minutes baidu.com IN SOA baidu.com. root.baidu.com. ( 2013081602 ; serial 3600 ; refresh (1 hour) 600 ; retry (10 minutes) 604800 ; expire (1 week) 86400 ; minimum (1 day) ) NS ns.baidu.com. MX 10 mail.baidu.com. $ORIGIN baidu.com. # aaa已经同步 aaa A 2.2.2.2 bbs CNAME www mail A 192.168.1.172 ns A 192.168.1.170 www A 192.168.1.171 从端测试:域配置文件
DNS 转发配置
- 我们配置DNS是只能解析我们定义的zone的,我们没有定义的是不能解析的。
- 配置DNS转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的企业在使用。
- 也就是说这个域名已经被某个DNS服务器解析了。
1、修改DNS主配置文件,options参数下添加
vim /etc/named.conf
options {
# 域文件存放目录
directory "/var/named";
# 开启转发
forward first;
# 转发到哪个DNS
forwarders { 180.76.76.76; };
};
2、测试配置文件,重启
# 测试配置文件,是否正确
named-checkconf
# 重启DNS服务
/etc/init.d/named restart
3、测试转发
dig @192.168.1.160 www.jd.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> @192.168.1.160 www.jd.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50736 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.jd.com. IN A ;; ANSWER SECTION: www.jd.com. 102 IN CNAME www.jdcdn.com. www.jdcdn.com. 5 IN A 218.60.111.1 ;; Query time: 60 msec ;; SERVER: 192.168.1.160#53(192.168.1.160) ;; WHEN: Sun Dec 24 09:31:18 2017 ;; MSG SIZE rcvd: 68 测试域名转发
# 在另一台机器内添加 192.168.1.160 DNS 服务 vim /etc/resolv.conf nameserver 192.168.1.160
测试 ping www.baidu.com # 跳转到 192.168.1.171 说明可以正向解析出IP地址 PING www.baidu.com (192.168.1.171) 56(84) bytes of data. From heartbeat2 (192.168.1.161) icmp_seq=1 Destination Host Unreachable From heartbeat2 (192.168.1.161) icmp_seq=2 Destination Host Unreachable From heartbeat2 (192.168.1.161) icmp_seq=3 Destination Host Unreachable From heartbeat2 (192.168.1.161) icmp_seq=5 Destination Host Unreachable ping www.jd.com # DNS服务器 本地没有解析后,转发到给180.76.76.76DNS PING www.jdcdn.com (218.60.111.1) 56(84) bytes of data. 64 bytes from 218.60.111.1: icmp_seq=1 ttl=56 time=21.5 ms 64 bytes from 218.60.111.1: icmp_seq=2 ttl=56 time=17.7 ms 另一台机器 测试域名转发
以上转自
https://www.cnblogs.com/xiangsikai/p/8438544.html
https://www.cnblogs.com/xiangsikai/p/8438518.html
感谢博主
实现主从复制
主从复制原理:
1、应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的应该保持一致;否则,应该从高,主低;
1、实验前准备:
主DNS服务器A: (IP地址为192.168.34.101)
从DNS服务器B: (IP地址为192.168.34.103)
客户端C: (IP地址为192.168.34.105)
2、配置主DNS服务器相关文件:
(1)在主服务器A中配置文件信息:vim /etc/named.conf
修改完之后并重新启动DNS服务:rndc reload
options { listen-on port 53 { localhost; }; # 将此行写成localhost或者注释掉(//),不写的话会,默认只能本机访问 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; }; # 写成any或者注释掉(//)都可以 allow-transfer { 192.168.34.103; }; # 将从服务器的IP地址写入,默认只能103地址作为当前主服务器的备用服务器,否则任何主机都可以做为从服务器访问主服务器,抓取重要信息
(2)修改主服务器A区域库文件的内容:
vim /var/named/baidu.com.zone
[root@ansiblenamed]#vim /var/named/baidu.com.zone $TTL 1D @ IN SOA dns1 admin.baidu.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1 NS dns2 # 从服务器添加一个NS标记 dns1 A 192.168.34.101 # 主服务器进行域名解析为IP地址 dns2 A 192.168.34.103 # 将从服务器进行域名解析为IP地址 www CNAME webs webs A 6.6.6.6 webs A 8.8.8.8 webs A 7.7.7.7 @ MX 10 mailser1 @ MX 20 mailser2 mailser1 A 11.9.9.9 mailser2 A 9.9.9.9 @ A 8.8.8.8 # 省略二级域名写入 * A 8.8.8.8 # 避免二级域名写错,也可以访问。 $GENERATE 1-200 server$ A 192.168.34.$
3、配置从服务器的文件:
(1)在从服务器B上安装DNS:yum install bind
在配置文件中修改/etc/named.conf相关配置文件
[root@centos7_1 ~]# vim /etc/named.conf options { // listen-on port 53 { 127.0.0.1; }; #将此行注释掉 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; }; # 将此行注释掉 allow-transfer { none;}; # 此行必需写入,不写会不安全,而且其他任何主机都可以作为从服务器进行访问,抓取IP地址
注意:将第一行的listen-on port 53端口注释掉,或者写成localhost,不然只能为本机服务,allow-query那行业注释掉。
(2)将从服务器B的/etc/named.rfc1912.zones配置文件加以修改
[root@centos7_1 ~]# vim /etc/named.rfc1912.zones zone "baidu.com" { # 域名要与主服务器的域名一致 type slave; # 类型为“奴隶的意思” masters {192.168.34.101;}; #将主服务器的IP地址写入 file "slaves/baidu.com.zone.slave"; # 如果从服务器同步了主服务器之后,此时同步的数据就会存放在此目录下/var/named/slaves/ };
(3)重新加载主服务器A的DNS服务:
1
2
|
[root@ansiblenamed] #rndc reload server reload successful |
(4)查询当前从DNS服务器B的同步的数据文件,此时我们可以看到/var/named/slaves目录下已经同步了主DNS服务器的数据内容:
1
2
|
[root@centos7_1 ~] # ls /var/named/slaves baidu.com.zone.slave |
4、配置客户端:
(5)下来我在客户端C配置两个DNS地址,将主从服务器的IP地址都关联起来:
[root@centos6network-scripts]#vim ifcfg-eth0 DEVICE=eth0 PROTOBOOT=static IPADDR=192.168.34.105 GATEWAY=192.168.34.2 ONBOOT=yes DNS1=192.168.34.101 # 主服务器的DNS IP地址 DNS2=192.168.34.103 # 从服务器的DNS IP地址
(6)在客户端C查看当前配置好的DNS服务地址
[root@centos6network-scripts]#cat /etc/resolv.conf 查看当前的配置DNS信息 # Generated by NetworkManager search 10.localdomain nameserver 192.168.34.101 nameserver 192.168.34.103
(7)我们在客户端C用dig命令查看当前的baidu.com 网址,查看当前DNS解析IP地址是来自哪个服务器:
[root@centos6network-scripts]#dig www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24163 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 86400 IN CNAME webs.baidu.com. webs.baidu.com. 86400 IN A 6.6.6.6 webs.baidu.com. 86400 IN A 8.8.8.8 webs.baidu.com. 86400 IN A 7.7.7.7 ;; AUTHORITY SECTION: baidu.com. 86400 IN NS dns1.baidu.com. baidu.com. 86400 IN NS dns2.baidu.com. ;; ADDITIONAL SECTION: dns1.baidu.com. 86400 IN A 192.168.34.101 dns2.baidu.com. 86400 IN A 192.168.34.103 ;; Query time: 6 msec ;; SERVER: 192.168.34.101#53(192.168.34.101) #此时可以看到解析的IP地址来自于主服务器 ;; WHEN: Thu Nov 7 09:38:55 2019 ;; MSG SIZE rcvd: 168
(8)我们将主服务器A的网卡down掉(ifconfig ens33 down),然后在客户端C查看当前内容:
[root@centos6network-scripts]#dig www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54362 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 86400 IN CNAME webs.baidu.com. webs.baidu.com. 86400 IN A 8.8.8.8 webs.baidu.com. 86400 IN A 7.7.7.7 webs.baidu.com. 86400 IN A 6.6.6.6 ;; AUTHORITY SECTION: baidu.com. 86400 IN NS dns1.baidu.com. baidu.com. 86400 IN NS dns2.baidu.com. ;; ADDITIONAL SECTION: dns1.baidu.com. 86400 IN A 192.168.34.101 dns2.baidu.com. 86400 IN A 192.168.34.103 ;; Query time: 12 msec ;; SERVER: 192.168.34.103#53(192.168.34.103) #此时,我们看到的是从服务器的IP地址,访问网站是通过从服务器访问。 ;; WHEN: Thu Nov 7 10:24:16 2019 ;; MSG SIZE rcvd: 168
(9)此时,我们来验证当前的服务器同步情况,修改主服务器区域库文件内容:/var/named/baidu.com.zone
[root@ansible~]#vim /var/named/baidu.com.zone $TTL 1D @ IN SOA dns1 admin.baidu.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1 NS dns2 dns1 A 192.168.34.101 dns2 A 192.168.34.103 www CNAME webs webs A 6.6.6.6 webs A 8.8.8.8 webs A 7.7.7.7 @ MX 10 mailser1 #删除此条配置 @ MX 20 mailser2 #删除此条配置 mailser1 A 11.9.9.9 mailser2 A 9.9.9.9 @ A 8.8.8.8 * A 8.8.8.8 $GENERATE 1-200 server$ A 192.168.34.$
(10)删除之后,将DNS服务重启:rndc reload
[root@ansible~]
#rndc reload
server reload successful
[root@centos6network-scripts]#dig -t mx baidu.com @192.168.34.101 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t mx baidu.com @192.168.34.101 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50791 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN MX ;; AUTHORITY SECTION: baidu.com. 10800 IN SOA dns1.baidu.com. admin.baidu.com. 0 86400 3600 604800 10800 ;; Query time: 7 msec ;; SERVER: 192.168.34.101#53(192.168.34.101) ;; WHEN: Thu Nov 7 10:33:31 2019 ;; MSG SIZE rcvd: 74 [root@centos6network-scripts]#dig -t mx baidu.com @192.168.34.103 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> -t mx baidu.com @192.168.34.103 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48437 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4 ;; QUESTION SECTION: ;baidu.com. IN MX ;; ANSWER SECTION: baidu.com. 86400 IN MX 10 mailser1.baidu.com. baidu.com. 86400 IN MX 20 mailser2.baidu.com. ;; AUTHORITY SECTION: baidu.com. 86400 IN NS dns1.baidu.com. baidu.com. 86400 IN NS dns2.baidu.com. ;; ADDITIONAL SECTION: mailser1.baidu.com. 86400 IN A 11.9.9.9 mailser2.baidu.com. 86400 IN A 9.9.9.9 dns1.baidu.com. 86400 IN A 192.168.34.101 dns2.baidu.com. 86400 IN A 192.168.34.103 ;; Query time: 10 msec ;; SERVER: 192.168.34.103#53(192.168.34.103) ;; WHEN: Thu Nov 7 10:33:34 2019 ;; MSG SIZE rcvd: 179
(12)将序列号(serial)修改为1,改完之后重新加载DNS服务,rndc reload:
[root@ansible~]#vim /var/named/baidu.com.zone $TTL 1D @ IN SOA dns1 admin.baidu.com. ( 1 ; serial #此处的0已经改为1 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1 NS dns2 dns1 A 192.168.34.101 dns2 A 192.168.34.103 www CNAME webs # 此处也做了修改 webs A 66.66.66.66 # 此处也做了修改 mailser1 A 11.9.9.9 mailser2 A 9.9.9.9 @ A 8.8.8.8 * A 8.8.8.8 $GENERATE 1-200 server$ A 192.168.34.$
(13)修改完配置后,重启DNS服务,并在客户端进行dig验证,此时的IP地址已经同步,并且没有了MX配置文件的记录:
[root@ansible~]#rndc reload 重启DNS服务 server reload successful [root@centos6network-scripts]#dig www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22540 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 86400 IN CNAME webs.baidu.com. webs.baidu.com. 86400 IN A 66.66.66.66 此时已经同步为新的IP地址 ;; AUTHORITY SECTION: baidu.com. 86400 IN NS dns2.baidu.com. baidu.com. 86400 IN NS dns1.baidu.com. ;; ADDITIONAL SECTION: dns1.baidu.com. 86400 IN A 192.168.34.101 dns2.baidu.com. 86400 IN A 192.168.34.103 ;; Query time: 1 msec ;; SERVER: 192.168.34.101#53(192.168.34.101) ;; WHEN: Thu Nov 7 10:41:43 2019 ;; MSG SIZE rcvd: 136
以上转自
https://www.cnblogs.com/struggle-1216/p/12582227.html 感谢博主
实验环境
主服务器:192.168.138.200
从服务器:192.168.138.201
bind安装
安装很简单,执行以下命令即可:
yum install -y bind
先看一下bind的版本和配置文件安装路径
# named -v
BIND 9.9.4-RedHat-9.9.4-51.el7_4.2 (Extended Support Version)
# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/etc/named.conf,/etc/named.rfc1912.zones是主配置文件
/var/named/named.ca是根区域解析库文件
/var/named/named.localhost,/var/named/named.loopback 是本机和环回地址的解析库文件
rndc---remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。
配置named.conf文件
这个配置文件主要分3段内容,options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。
# cat /etc/named.conf // 2个双//在这个配置文件中表示注释 options { //下面一行表示监听的端口和IP地址,其中2个{}内部两端都要有空格,IP地址要以;号结尾。 这里的IP地址至少应该包含宿主机可以和外部通迅的地址,也可以包含一个本地回环地址供rndc工具使用。也可以简写成{ any; } 每个语句结束同样都要以;结尾,如果不需要监听IPV6可以注释掉或删除。 listen-on port 53 { 192.168.138.200; 127.0.0.1; }; // listen-on-v6 port 53 { ::1; }; //下面一行表示named的工作目录为/var/named 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"; //下面一行表示允许哪些主机查询,改成any表示所有 allow-query { any; }; //下面一行表示是否允许递归查询. recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; //.表示根区域,这个区域是必须要有的 zone "." IN { type hint; //hint表示根区域类型 file "named.ca"; //指定根区域解析库文件名称所在位置,相对于/var/named }; //指定区域文件名称,所有的区域定义都可以写在named.rfc1912.zones文件中 include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
配置主服务器192.168.138.200
编辑/etc/named.rfc1912.zones在文件末尾添加一个正向解析区域和一个反向解析区域
# cat /etc/named.rfc1912.zones zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; // 添加一个正向解析区域,并定义为主服务器 zone "frank.com" IN { type master; //master表示主服务器 file "frank.com.zone"; //指明区域解析库文件,相对于/var/named/ }; //添加一个反向解析区域,并定义为主服务器 zone "138.168.192.in-addr.arpa" IN { type master; file "138.zone"; };
创建frank.com.zone解析库文件
# cat frank.com.zone $TTL 1D frank.com. IN SOA ns.frank.com. admin.frank.com. ( 201802001 ;序列号 2H ;刷新时间 10M ;重试时间间隔 1W ;过期时间 1D ;无法解析时否定答案的TTL值 ) frank.com. IN NS ns1.frank.com. IN NS ns2.frank.com. ns1.frank.com. IN A 192.168.138.200 ns2.frank.com. IN A 192.168.138.200 frank.com. IN MX 10 mx1.frank.com. IN MX 20 mx2.frank.com. mx1.frank.com. IN A 192.168.138.200 mx2.frank.com. IN A 192.168.138.200 www.frank.com. IN A 192.168.138.200 master IN CNAME www.frank.com. web IN CNAME www.frank.com.
创建138.zone反向解析库文件
# cat 138.zone $TTL 1d @ IN SOA ns.frank.com. admin.frank.com. ( 201802001; 2H; 10M; 1W; 1D; ) IN NS ns.frank.com. 200 IN PTR www.frank.com. 200 IN PTR ns.frank.com.
注意事项:
- 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
- $TTL表示宏定义,TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
- 这个文件里所有的域名结尾的点号一定不能省略。
- 区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,还要让区域解析库文件的属组为named。
# ll /var/named total 16 drwxrwx---. 2 named named 23 Feb 21 13:10 data drwxrwx---. 2 named named 60 Feb 21 13:11 dynamic -rw-r-----. 1 root named 2281 May 22 2017 named.ca -rw-r-----. 1 root named 152 Dec 15 2009 named.empty -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost -rw-r-----. 1 root named 168 Dec 15 2009 named.loopback drwxrwx---. 2 named named 44 Feb 21 13:14 slaves
检查配置文件语法
# named-checkconf
没有任何输出表示 /etc/named.conf没有语法错误
# named-checkzone "frank.com" "frank.com.zone"
zone frank.com/IN: loaded serial 201802001
OK
正向解析区域检查没问题
# named-checkzone "frank.com" "138.zone"
zone frank.com/IN: loaded serial 201802001
OK
反向解析区域检查没问题
启动named服务
# systemctl start named.service
使用dig测试
dig语法使用格式:
dig -t [SOA|A|CNAME|NS|MX] 域名 [@dns服务器地址] [+[no]trace|recurse]
dig -t A web.frank.com @192.168.138.200 ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.frank.com @192.168.138.200 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40444 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;web.frank.com. IN A ;; 下面就是解析出的结果 ;; ANSWER SECTION: web.frank.com. 86400 IN CNAME www.frank.com. www.frank.com. 86400 IN A 192.168.138.200 ;; AUTHORITY SECTION: frank.com. 86400 IN NS ns2.frank.com. frank.com. 86400 IN NS ns1.frank.com. ;; ADDITIONAL SECTION: ns1.frank.com. 86400 IN A 192.168.138.200 ns2.frank.com. 86400 IN A 192.168.138.200 ;; Query time: 0 msec ;; SERVER: 192.168.138.200#53(192.168.138.200) ;; WHEN: Wed Feb 21 12:35:24 CST 2018 ;; MSG SIZE rcvd: 144
到此DNS主服务器已经配置完毕并能正常工作。
从服务器配置192.168.138.201
编辑/etc/named.conf将监听IP地址改一下,其它不需要更改
# cat /etc/named.conf
listen-on port 53 { 192.168.138.201; 127.0.0.1; };
编辑/etc/named.rfc1912.zones将type类型改为slave
# cat /etc/named.rfc1912.zones zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; // 添加一个正向解析区域,并定义为从服务器 zone "frank.com" IN { type slave; //slave表示主服务器 masters { 192.168.138.200; }; //指明主服务器IP file “slaves/frank.com"; //指定从服务区域解析库文件位置 }; //添加一个反向解析区域,并定义为主服务器 zone "138.168.192.in-addr.arpa" IN { type slave; masters { 192.168.138.200; }; file "slaves/138.zone"; };
注意事项:
从服务器的区域解析库文件应当是从主服务器加载过来的,所以无需创建区域解析库文件。
启动named服务
# systemctl start named
检查/var/named/slaves目录
# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 268 Feb 21 13:14 138.zone
-rw-r--r--. 1 named named 554 Feb 21 13:14 frank.com.zone
这2个文件是自动从主服务器同步过来的。
使用dig验证
dig -t MX frank.com @192.168.138.201 ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t MX frank.com @192.168.138.201 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57146 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;frank.com. IN MX ;; ANSWER SECTION: frank.com. 86400 IN MX 10 mx1.frank.com. frank.com. 86400 IN MX 20 mx2.frank.com. ;; AUTHORITY SECTION: frank.com. 86400 IN NS ns1.frank.com. frank.com. 86400 IN NS ns2.frank.com. ;; ADDITIONAL SECTION: mx1.frank.com. 86400 IN A 192.168.138.200 mx2.frank.com. 86400 IN A 192.168.138.200 ns1.frank.com. 86400 IN A 192.168.138.200 ns2.frank.com. 86400 IN A 192.168.138.200 ;; Query time: 0 msec ;; SERVER: 192.168.138.201#53(192.168.138.201) ;; WHEN: Wed Feb 21 13:15:43 CST 2018 ;; MSG SIZE rcvd: 178
rndc命令使用
rndc reload:
重载主配置文件和区域解析库文件,可以不用重启named服务情况下更新主配置文件和区域解析库文件。
rndc reload zone_name:
重域指定区域
rndc retransfer zone:
手动启动区域传送,不管序号是否增加或减少
rndc notify zone:
手动通知区域
rndc reconfig:
重载主配置文件
rndc querylog:
开启或关闭查询日志
关于DNS服务器
- DNS服务器主从服务器,一般情况下主从一同工作,在客户端一般会配有多个DNS地址,如果第一个DNS地址无法解析,那么第二DNS地址也是无法解析的,当第一个DNS地址联系不上时(宕机)才会联系第二个DNS地址并寻求解析。
- DNS服务器如果自已无法解析时会去其它服务器查询,查询到了会缓存下来,当同一用户在缓存失效之前再次请求同一记录时会优先使用缓存回应给客户端。至于缓存多长时间大了和小了都有优点和缺点,一般互联网上的DNS缓存大概要2-4小时,也就是当你在互联网更改记录一般会2-4小时后才能生效。
- DNS服务器也可以部署成为缓存服务器。
- DNS服务器中的转发器,部署过windows服务器的都知道,如果本机解析不了的可以使用转发器将请求转发到当地运营商的DNS服务器请求解析。
windows中的DNS服务器架设完成后,客户端会自动向DNS服务器注册,服务器端也会自动添加相应的A记录和PTR记录,linux系统当中是不是只能手动添加这些记录才能解析到局域网中的计算机名呢?
以上转发自https://www.cnblogs.com/mfyang/p/8467421.html ,感谢博主
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?