1 名字解析介绍和DNS
1.1 DNS简介(分布式)
当前TCP/IP网络中的设备之间进行通信, 是利用和依赖于IP地址实现的. 但数字形式的IP地址是很难记忆的. 当网络设备众多, 想要记住每个设备的IP地址, 可以说是"不可能完成的任务". 那么如何解决这一难题呢? 我们可以给每个网络设备起一个友好的名称, 如: www.wangxiaoning.com, 这种由文字组成的名称, 显而易见要更容易记忆. 但是计算机不会理解这种名称的, 我们可以利用一种名字解析服务将名称转化成(解析成)ip地址. 从而我们就可以利用名称来直接访问网络中的设备了. 除此之外还有一个重要功能, 利用名称解析服务可以实现主机和IP的解耦, 即: 当前主机IP变化时, 只需要修改名称服务即可, 用户仍可以通过原有的名称进行访问而不受影响.
实现此服务的方法是多样的. 如下面所述:
本地名称解析配置文件: /etc/hosts
Linux: /etc/hosts
Windows: %WINDOR%/system32/drivers/etc/hosts
#格式
122.10.117.2 www.baidu.com
93.46.8.89 www.google.com
DNS: Domain Name System 域名系统, 应用层协议, 是互联网的一项服务. 它作为将域名和IP地址相互映射的一个分布式数据库, 能够使人更方便地访问互联网, 基于C/S架构, 服务端: 53/udp(DNS查询), 53/tcp(主从复制)
BIND: Bekerley Internet Name Domain, 由ISC (www.isc.org) 提供的DNS软件实现DNS域名结构
![](https://img.haomeiwen.com/i18380359/9f51b51d22800275.png)
- 根域
- 一级域名: Top Level Domain: TLD
三类: 组织域, 国家域,(cn,au,...), 反向域
com, edu, mil, gov, net, org, int, arpa - 二级域名: wangxiaoning.com
- 三级域名: www.wangxiaoning.com
- 最多可达到127级域名
- 上级域名服务区存放了下级域名的信息
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称和数字地址分配机构, 负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理,以及根服务器系统的管理
1.2 DNS服务工作原理
![](https://img.haomeiwen.com/i18380359/c7d8c515756497b2.png)
1.3 DNS查询类型
- 递归查询: 客户端向本地DNS服务器的查询, 返回的是最终结果, 负责到底
- 迭代查询: 本地的DNS服务器向其他DNS服务器的查询, 返回的不是最终结果, 而是最好结果, 不负责到底
1.4 名称服务器
Name Server, 域内负责解析本域内的名称的DNS服务器
IPv4的根名称服务器: 全球共13个负责解析根域的DNS服务器, 美国10个, 荷兰1个, 瑞典1个, 日本1个
IPv6的根名称服务器: 全球共25个, 中国1主3从, 美国1主2从
1.5 解析类型
- FQDN >>> IP 正向解析
- IP >>> FQDN 反向解析
注意: 正反向解析是两个不同的名称空间, 是两棵不同的解析树
注意:
- 本地 /etc/hosts 不适合管理大规模架构, 因为每次服务器ip修改了就要到每台主机去修改/etc/hosts文件
- 可以通过修改本地hosts文件绑定ip和域名关系
- Linux默认是没有dns缓存的, 除非安装特定软件
- 可以修改hosts和本地dns服务器优先级关系 /etc/nsswitch
- 公网和内网域名不要一样,否则会有冲突,造成外网域名无法访问
# In order of likelihood of use to accelerate lookup.
passwd: sss files systemd
shadow: files sss
group: sss files systemd
hosts: files dns myhostname
#files代表本地hosts文件, 把files和dns对调位置即可调整优先级, 但一般不改优先级, 让hosts文件优先
- DNS服务器软件bind安装好后, 会生成/var/named/named.ca文件, 包含13个根服务器的地址, 所以任何一个DNS服务器都是天生知道根服务器地址的
;; ANSWER SECTION:
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS m.root-servers.net.
;; ADDITIONAL SECTION:
a.root-servers.net. 518400 IN A 198.41.0.4
b.root-servers.net. 518400 IN A 199.9.14.201
c.root-servers.net. 518400 IN A 192.33.4.12
d.root-servers.net. 518400 IN A 199.7.91.13
e.root-servers.net. 518400 IN A 192.203.230.10
f.root-servers.net. 518400 IN A 192.5.5.241
g.root-servers.net. 518400 IN A 192.112.36.4
h.root-servers.net. 518400 IN A 198.97.190.53
i.root-servers.net. 518400 IN A 192.36.148.17
j.root-servers.net. 518400 IN A 192.58.128.30
k.root-servers.net. 518400 IN A 193.0.14.129
l.root-servers.net. 518400 IN A 199.7.83.42
m.root-servers.net. 518400 IN A 202.12.27.33
#也可以通过dig +bufsize=1200 +norec @a.root-servers.net命令查询根服务器地址
- /var/named/:存放数据库文件
[21:16:40 root@centos-8-2-2004-1 ~]#ll /var/named
total 16
drwxrwx--- 2 named named 6 Jul 8 00:14 data
drwxrwx--- 2 named named 6 Jul 8 00:14 dynamic
-rw-r----- 1 root named 2253 Jul 8 00:14 named.ca
-rw-r----- 1 root named 152 Jul 8 00:14 named.empty
-rw-r----- 1 root named 152 Jul 8 00:14 named.localhost
-rw-r----- 1 root named 168 Jul 8 00:14 named.loopback
drwxrwx--- 2 named named 6 Jul 8 00:14 slaves
#库文件所有者是named和root, 所属组是named, 而named组只有named用户, 以此来保护DNS解析库文件安全性.
#DNS数据库放的是公司服务器名称和IP地址对应关系, 所以即使普通用户也不能查看数据库文件, 如果黑客看到数据库文件信息可以直接发起攻击
#创建数据库文件时, 要按照库文件模板创建权限
- 修改本机DNS服务器地址, 修改网卡配置文件
[21:37:49 root@centos-8-2-2004-1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33"
BOOTPROTO=static
IPADDR=10.0.0.81
NETMASK=255.255.255.0
GATEWAY=10.0.0.2
DNS1=127.0.0.1
ONBOOT=yes
1. 添加DNS1=a.b.c.d,添加DNS服务器地址需要指定编号
2. 保存配置文件,重启网络服务
3. 如果添加了多个DNS服务器地址,但是编号重复,则后添加的DNS服务器会生效
4. 添加多个DNS服务器时,要从1开始编号, DNS1, DNS2...否则未编号的DNS服务器不会生效
6. 重启网络服务后,打开 cat /etc/resolv.conf 文件验证
7. 支持注释
2 DNS 服务相关的概念和技术
2.1 DNS服务器的类型
- 主DNS服务器
- 从DNS服务器
- 缓存DNS服务器(转发器)
2.1.1 主DNS服务器
管理和维护所负责解析的域内解析库的服务器
2.1.2 从DNS服务器
从主服务器或从服务器"复制"(区域传输)解析库副本
- 序列号: 解析库版本号, 主服务器解析库变化时, 其序列增加
- 刷新时间间隔: 从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔: 从服务器请求同步失败时, 再次尝试时间间隔
- 过期时长: 从服务器联系不到主服务器时, 多久会停止服务
- 通知机制: 主服务器解析库发生变化时, 会主动通知从服务器
2.2 区域传输
- 完全传输: 传递整个解析库
- 增量传输: 传递解析库变化的那部分内容
2.3 解析形式
- 正向: FQDN (Fully Qualified Domain Name) >>> IP
- 反向: IP >>> FQDN
2.4 负责本地域名的正向和反向解析库
- 正向区域
- 反向区域
2.5 解析答案
- 肯定答案: 存在对应的查询结果
- 否定答案: 请求的条目不存在等原因导致无法返回的结果
- 权威答案: 直接由存有从查询结果的DNS服务器(权威服务器)返回的答案
- 非权威答案: 由其他非权威服务器返回的查询答案
2.6 各种资源记录
区域解析库: 由众多资源记录RR(Resource Record组成)
记录类型: A, AAAA, PTR, SOA, NS, CNAME, MX
- SOA: Start Of Authority, 起始授权记录; 一个区域解析库必须有且仅能有一个SOA记录, 必须位于解析库的第一条记录, SOA记录了该区域数据库的元数据,属性
- A: Internet Address, 作用, FQDN >>> IP
- AAAA: FQDN >>> IPv6
- PTR: PoinTeR, IP >>> FQDN
- NS: Name Sever, 专用于标明当前区域的DNS服务器
- CNAME: Canonical Name, 别名记录
- MX: Mail Exchange, 邮件交换器
- TXT: 对域名进行标识和说明的一种方式, 一般做验证记录时会使用此项, 如: SPF (反垃圾邮件)记录, https验证等, 如下示例:
_dnsauth TXT 2012011200000051qgs69vwoh4h6nht4n1h01r038x
2.6.1 资源记录定义的格式
name(资源记录名称) [TTL] IN(关键字) rr_type(资源记录类型) value(值)
A记录格式
- name
#格式1: 域名加.
www.anshan.org.
#格式2: 直接写主机名, 后面会自动补全.anshan.org. 因为, 一个区域数据库就是给一个域名用的
www
- [TTL]生命缓存时间
DNS服务器可以缓存从别处查看的DNS信息的, TTL就是设置了缓存的时长
默认以秒为单位
#格式1:
从全局继承
#格式2:
每条A记录里单独指定
注意:
- TTL可从全局继承, DNS记录缓存时长, 默认86400秒
- 使用"@"符号可用于引用当前区域的名字
- 同一个名字可以通过多条记录定义多个不同的值; 此时DNS服务器会以轮询方式响应
- 同一个值也可能有多个不同的定义名字; 通过多个不同的名字指向同一个值进行定义; 此仅表示通过多个不同的名字可以找到同一个主机
- 如果name没有带".",那么会自动补全www.wangxiaoning.org.wangxiaoning.org.
- 必备的三条记录是 SOA, A, NS
2.6.2 SOA记录
name: 当前区域的名字, 例如"wangxiaoning.org."
value: 由多部分组成
注意:
- 当前区域的主DNS服务器的FQDN, 也可以使用当前区域的名字
- 当前区域管理员的邮箱地址; 但地址不能使用@符号, 一般用"."替换
例如: admin.wangxiaoning.org - 主从服务区域传输相关定义以及否定的答案的统一的TTL
范例:
wangxiaoning.org.(或者用@符号表示本域的域名) 86400 IN SOA ns.wangxiaoning.org. nsadmin.wangxiaoning.org. (
20200703 ; 序列号
2H ; 刷新时间
10M ; 重传时间
1W ; 过期时间
1D ; 否定答案的TTL值
)
范例: SQA记录
- name: www.wangxiaoning.org. | www, 对于SOA记录来说, name是管理的域名或者用"@"指代本域域名
- TTL: 默认86400, 可以手动指定, 或者在文件开头定义$TTL=86400,这样每条记录的TTL可以从全局继承,不用手动指定
- IN: 只需在SOA行指明即可,后续记录可以从全局SOA继承
- rr_type: 根据当前记录类型指明
- value:
SOA value:
- 主DNS服务器名称(名称无所谓,需要和A记录的name对应,格式正确即可) master | master.wangxiaoning.org.
- master需要有对应的A记录
master TTL(可省略,从全局继承) IN(可省略,从SOA记录继承) A 10.0.0.81
- 邮箱: DNS服务器管理员邮箱 "admin"或者"admin.anshan.org.". 不能用?""[-[]=];@符号, 因为@符号在DNS中是代表区域域名的宏定义
(中间的TTL可以全局指定) - 五项参数:
(
当前DNS数据库版本号 ; serial
20200723 #主从服务器数据同步比的就是版本号, 当主服务器版本号大于从, 则同步数据,无论是推还是拉,看的都是数据库版本,即使修改了主节点区域数据库文件,并且到了拉的时间,只要版本号一样,那么从节点就不会同步主节点信息. 该版本号需要人工维护, 并且最多10位数字.
刷新时间 ; refresh
1D #主从服务器多久同步一次, 这里是定期从服务器从主服务器拉取的时间间隔
推: 主服务器发生变化后主动推送,根据数据变化触发. 只要主服务器版本号比从服务器版本大, 那么数据发生更新, 就会自动推送给从服务器
拉: 从服务器定期询问主服务器, 根据时间变化触发
重拉等待时间 ; retry
1H #拉取失败后等待再次拉取时间. 避免主或从节点因为故障, 从节点无法定期拉取主服务器信息
过期时间 ; expire
1W #从节点从主节点拿到DNS数据库后, 如果从DNS始终无法和主DNS建立同步,那么一周后该从服务器就无法供用户提供查询,会认为给用户提供的数据不准确
否定结果的缓存时长 ; minium
3H #如果用户查询的域名在本地数据库不存在, DNS会把这个域名缓存下来, 之后再有相同查询,会直接从内存中返回不存在的否定结果,不会再查数据库, 否则每次都查询, 会浪费资源. 该记录会在内存缓存3个小时
)
2.6.3 NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字, 例如: ns.wangxiaoning.org
注意:
- 相邻的两个资源记录的name相同时, 后续的可省略
- 对NS而言, 任何一个NS记录后面的服务器名字, 都应该在后续有一个A记录
- 一个区域可以有多个NS记录, 区域内, 有几个主从服务器, 就要有几个NS记录
范例: NS记录
- name: 域名, 可以省略,从SOA记录继承
- TTL: 可以省略,从全局继承
- IN: 可以省略,从SOA继承
- NS
- value: master
wangxiaoning.org. IN NS ns1.wangxiaoning.org.
wangxiaoning.org. IN NS ns2.wangxiaoning.org.
注意: DNS区域数据库, 至少要有三天记录, 第一条SOA, 第二天NS,第三天主服务器对应的A记录
2.6.4 MX记录
用于指定企业内邮件服务器的域名解析关系
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
- 一个区域内, MX记录可有多个, 但每个记录的value之前应该有一个数字(0-99), 表示此服务器的优先级, 数字越小优先级越高
- 对MX记录而言, 任何一个MX记录后面的服务器名字, 都应该在后续有一个A记录
范例:
当企业内部一台客户端想通过企业邮件admin@wangxiaoning.org发送邮件给xxx@qq.com
-
客户端编辑邮件发送给企业内部邮件服务器mail.wangxiaoning.org
-
邮件服务器向企业内DNS查询qq邮件服务器地址
-
DNS通过查询得知qq邮件服务器地址,回给内部邮件服务器
-
内部邮件服务器将邮件发给qq邮件服务器
MX记录
@ MX 10 mail1 @代表域名 10:优先级,越小越优先,优先用mail1发邮件
@ MX 20 mail2
mail1 A 10.0.0.11
mail2 A 10.0.0.12
范例: 如何查询某域名下的邮件服务器信息
#内部域名
[06:52:18 root@centos-7-2003-1 ~]#dig -t MX wangxiaoning.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> -t MX wangxiaoning.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62974
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;wangxiaoning.org. IN MX
;; ANSWER SECTION:
wangxiaoning.org. 86400 IN MX 10 mail1.wangxiaoning.org.
wangxiaoning.org. 86400 IN MX 20 mail2.wangxiaoning.org.
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
;; ADDITIONAL SECTION:
mail1.wangxiaoning.org. 86400 IN A 10.0.0.11
mail2.wangxiaoning.org. 86400 IN A 10.0.0.12
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
;; Query time: 2 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Tue Jul 28 06:52:31 AEST 2020
;; MSG SIZE rcvd: 195
#外部域名
[06:53:40 root@centos-7-2003-1 ~]#dig -t MX google.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> -t MX google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19328
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 9
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com. IN MX
;; ANSWER SECTION:
google.com. 600 IN MX 40 alt3.aspmx.l.google.com.
google.com. 600 IN MX 30 alt2.aspmx.l.google.com.
google.com. 600 IN MX 10 aspmx.l.google.com.
google.com. 600 IN MX 20 alt1.aspmx.l.google.com.
google.com. 600 IN MX 50 alt4.aspmx.l.google.com.
;; AUTHORITY SECTION:
google.com. 172799 IN NS ns3.google.com.
google.com. 172799 IN NS ns1.google.com.
google.com. 172799 IN NS ns2.google.com.
google.com. 172799 IN NS ns4.google.com.
;; ADDITIONAL SECTION:
ns2.google.com. 172799 IN A 216.239.34.10
ns1.google.com. 172799 IN A 216.239.32.10
ns3.google.com. 172799 IN A 216.239.36.10
ns4.google.com. 172799 IN A 216.239.38.10
ns2.google.com. 172799 IN AAAA 2001:4860:4802:34::a
ns1.google.com. 172799 IN AAAA 2001:4860:4802:32::a
ns3.google.com. 172799 IN AAAA 2001:4860:4802:36::a
ns4.google.com. 172799 IN AAAA 2001:4860:4802:38::a
;; Query time: 592 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Tue Jul 28 06:53:57 AEST 2020
;; MSG SIZE rcvd: 395
#有些工作的DNS做了安全防护,因次只能显示DNS域名,无法显示ip地址,需要单独用dig,host或者nslookup再去单独查看ip地址
范例: 发假冒邮件
获得公司服务器邮件服务器ip地址后就可用发假冒邮件了
- 利用telnet登录到邮件服务器的25端口
#这里以google为例
[20:24:14 root@centos6-1 ~]#dig alt3.aspmx.l.google.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> alt3.aspmx.l.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50009
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 8
;; QUESTION SECTION:
;alt3.aspmx.l.google.com. IN A
;; ANSWER SECTION:
alt3.aspmx.l.google.com. 293 IN A 209.85.146.27 #邮件服务器ip
[20:59:27 root@centos6-1 ~]#telnet 209.85.146.27 25
Trying 209.85.146.27...
Connected to 209.85.146.27.
Escape character is '^]'.
220 mx.google.com ESMTP u3si12626949ilj.1 - gsmtp
- 编辑邮件,假装自己是google员工发送邮件,这里就不演示了
2.6.5 A记录
name: 某主机的FQDN, 例如: www.wangxiaoning.org.
value: 主机名对应主机的ip地址
避免用户写错名称时给出错误答案, 可通过泛域名解析进行解析至某特定地址
范例:
www.wangxiaoning.org. IN A 1.1.1.1
www.wangxiaoning.org. IN A 2.2.2.2
mx1.wangxiaoning.org. IN A 3.3.3.3
mx2.wangxiaoning.org. IN A 4.4.4.4
$GENERATE 1-254 HOST$ IN A 1.2.3.$
*.wangxiaoning.org. IN A 5.5.5.5
wangxiaoning.org. IN A 6.6.6.6
范例:
![](https://img.haomeiwen.com/i18380359/6980a8fd8f246724.png)
2.6.6 AAAA记录
name: FQDN
value: IPv6
2.6.7 PTR记录
name: IP, 有特定格式, 把IP地址反过来写, 1.2.3.4 要写作 4.3.2.1 而且有特定后缀: in-addr.arpa., 所以完整写法为: 4.3.2.1.in.-addr.arpa.
value: FQDN
注意: 网络地址及后缀可省略, 主机地址依然需要反着写
例如:
4.3.2.1.in-addr.arpa. IN PTR www.wangxiaoning.org.
#假如1.2.3为网络地址, 可简写成
4 IN PTR www.wangxiaoning.org.
2.6.8 CNAME别名记录
name: 别名的FQDN
value: 真正名字的FQDN
例如:
www.wangxiaoning.org. IN CANME websrv.xiaoning.org
2.7 子域授权
实验案例1: 搭建本地局域网DNS服务器为本地客户端提供域名解析服务, 并且提供互联网访问
实验拓扑
![](https://img.haomeiwen.com/i18380359/79dc6cb3d4dd7902.png)
实验环境
- 在CentOS 8.2.2004上搭建DNS服务器
- VMware Workstation 15 Pro
- VMware NAT 网络: 10.0.0.0/24, GW: 10.0.0.2
- CentOS 8.2.2004 : 10.0.0.81 - DNS
- CentOS 7.2003 : 10.0.0.187 - Client1
- CentOS 8.2.2004 : 10.0.0.82 - Client2
- GW: 10.0.0.2 : VMware NAT 模式默认网关
- 服务器软件: bind
- 客户端程序: bind-utils
实验步骤
- 在服务器机(10.0.0.81)下载bind服务器端软件
[13:18:32 root@dns ~]#yum -y install bind
- 检查客户端是否安装了bind客户端软件(bind-utilis), 如果没有, 手动安装
###CentOS 7.2003 : 10.0.0.187 - Client1
[13:18:32 root@Client1 ~]#rpm -ql bind-utils
package bind-utils is not installed
[13:28:38 root@Client1 ~]#yum -y install bind-utils
###CentOS 8.2.2004 : 10.0.0.82 - Client2
[13:18:32 root@Client2 ~]#rpm -ql bind-utils
package bind-utils is not installed
[13:29:17 root@Client2 ~]#yum -y install bind-utils
- 查看DNS服务端口号,开启DNS服务并设置成开机自启
[13:27:30 root@dns ~]#ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
[13:31:17 root@dns ~]#systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
[13:31:23 root@dns ~]#ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:53 0.0.0.0:*
udp UNCONN 0 0 [::1]:53 [::]:*
tcp LISTEN 0 10 127.0.0.1:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:953 0.0.0.0:*
tcp LISTEN 0 10 [::1]:53 [::]:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 [::1]:953 [::]:*
[13:31:25 root@dns ~]#ss -ntlup
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:53 0.0.0.0:* users:(("named",pid=1918,fd=512))
udp UNCONN 0 0 [::1]:53 [::]:* users:(("named",pid=1918,fd=513))
tcp LISTEN 0 10 127.0.0.1:53 0.0.0.0:* users:(("named",pid=1918,fd=21))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=748,fd=4))
tcp LISTEN 0 128 127.0.0.1:953 0.0.0.0:* users:(("named",pid=1918,fd=23))
tcp LISTEN 0 10 [::1]:53 [::]:* users:(("named",pid=1918,fd=22))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=748,fd=6))
tcp LISTEN 0 128 [::1]:953 [::]:* users:(("named",pid=1918,fd=24))
- 修改DNS服务器监听ip
DNS服务器默认是工作在本地127.0.0.1端口, 因此只能为本地客户端提供服务, 即使远程客户端配置了DNS服务器指向DNS服务器, 也无法解析, 所以安装DNS服务程序后要修改监听端口
可以通过DNS客户端命令进行域名解析检验
[13:32:44 root@Client1 ~]#rpm -ql bind-utils
/etc/trusted-key.key
/usr/bin/delv
/usr/bin/dig # Linux
/usr/bin/host # Linux
/usr/bin/mdig
/usr/bin/nslookup # Linux和Windows都支持
/usr/bin/nsupdate
/usr/share/man/man1/delv.1.gz
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/mdig.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz
未修改DNS服务器默认监听端口情况: 即使客户端的DNS服务器指向了服务器,也无法完成解析
[13:36:50 root@Client1 ~]#dig www.baidu.com @10.0.0.81
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.baidu.com @10.0.0.81
;; global options: +cmd
;; connection timed out; no servers could be reached
修改DNS服务器配置文件
[13:31:56 root@dns ~]#vim /etc/named.conf
###初始###
options {
listen-on port 53 { 127.0.0.1; };
# 1. listen-on port 53 { 127.0.0.1;10.0.0.81; };
# 2. listen-on port 53 { localhost; }; #"localhost"是DNS自带关键字,代表当前机器上所有IP
# 3. // listen-on port 53 { 127.0.0.1; }; #注释掉这行, 就相当于监听localhost, 不能写0.0.0.0 不生效
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; };
###修改后###
options {
listen-on port 53 { 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; };
###重启DNS服务
[13:39:40 root@dns ~]#systemctl restart named
补充:
- 利用953管理端口, 使用服务器端工具rndc来管理DNS配置
重新加载配置文件
[13:39:58 root@dns ~]#rndc reload
server reload successful
- DNS服务器配置文件格式语法检查工具 named-checkconf, 修改DNS服务器配置文件后要检查语法格式
[13:40:14 root@dns ~]#named-checkconf
- 修改DNS服务器查询权限
修改服务器监听端口后,还需要修改权限,否则DNS查询请求会被服务器拒绝
![](https://img.haomeiwen.com/i18380359/0a858331aa3ce4f2.png)
再次修改named.conf配置文件
###修改前
options {
listen-on port 53 { 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; }; #默认只允许localhost也就是来自本机的ip发送的DNS查询请求
# 1. allow-query { localhost;10.0.0.0/24; } 允许本机和10网段主机查询DNS
# 2. allow-query { any; } 允许所有ip查询DNS, 互联网的DNS都是允许所有
# 3. // allow-query { localhost; } 注释掉这行就变成允许所有
###修改后
options {
listen-on port 53 { 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
###重启DNS服务
[13:46:43 root@dns ~]#rndc reload
server reload successful
###验证客户端可以完成DNS查询
[13:51:13 root@Client1 ~]#host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 110.242.68.4
www.a.shifen.com has address 110.242.68.3
[13:42:21 root@Client1 ~]#dig www.baidu.com @10.0.0.81
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7 <<>> www.baidu.com @10.0.0.81
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28516
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6 # flags位如果显示aa, 那么表示来自权威服务器, 也就是客户端查询的地址就在本地DNS
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
www.a.shifen.com. 300 IN A 110.242.68.4
www.a.shifen.com. 300 IN A 110.242.68.3
;; AUTHORITY SECTION:
a.shifen.com. 1199 IN NS ns4.a.shifen.com.
a.shifen.com. 1199 IN NS ns2.a.shifen.com.
a.shifen.com. 1199 IN NS ns3.a.shifen.com.
a.shifen.com. 1199 IN NS ns5.a.shifen.com.
a.shifen.com. 1199 IN NS ns1.a.shifen.com.
;; ADDITIONAL SECTION:
ns5.a.shifen.com. 1199 IN A 180.76.76.95
ns2.a.shifen.com. 1199 IN A 220.181.33.32
ns1.a.shifen.com. 1199 IN A 110.242.68.42
ns4.a.shifen.com. 1199 IN A 14.215.177.229
ns3.a.shifen.com. 1199 IN A 112.80.255.253
;; Query time: 2891 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Sun Jun 06 13:47:54 CST 2021
;; MSG SIZE rcvd: 271
[13:51:52 root@Client1 ~]#nslookup www.baidu.com
Server: 10.0.0.81
Address: 10.0.0.81#53
Non-authoritative answer: #利用nslookup解析域名可以提示结果是否来自权威服务器,Non-authoritative answer:表示查询结果来自第三方,并不一定是真实的, 因为是从客户端指向的DNS服务器得来的地址, 而不是直接查询的权威DNS服务器
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.3
Name: www.a.shifen.com
Address: 110.242.68.4
补充:
- 利用dig命令实现临时指定DNS服务器地址,可以用来测试DNS服务器
在客户端安装DNS客户端后, 测试是否能从服务器端10.0.0.81查询到DNS结果
###当前Centos 8 Client2采用的是网络DNS
[13:34:20 root@Client2 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search Prac
nameserver 223.5.5.5
nameserver 223.5.5.6
[13:54:01 root@Client2 ~]#host www.baidu.com 10.0.0.81
Using domain server:
Name: 10.0.0.81
Address: 10.0.0.81#53
Aliases:
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 110.242.68.4
www.a.shifen.com has address 110.242.68.3
[13:54:20 root@Client2 ~]#dig www.baidu.com @10.0.0.81
; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.baidu.com @10.0.0.81
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15858
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b50bdfe2a5a9bb0ae0f3990d60bc6323a1d683fa25444479 (good)
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 788 IN CNAME www.a.shifen.com.
www.a.shifen.com. 277 IN A 110.242.68.4
www.a.shifen.com. 277 IN A 110.242.68.3
;; AUTHORITY SECTION:
a.shifen.com. 790 IN NS ns1.a.shifen.com.
a.shifen.com. 790 IN NS ns3.a.shifen.com.
a.shifen.com. 790 IN NS ns5.a.shifen.com.
a.shifen.com. 790 IN NS ns2.a.shifen.com.
a.shifen.com. 790 IN NS ns4.a.shifen.com.
;; ADDITIONAL SECTION:
ns5.a.shifen.com. 790 IN A 180.76.76.95
ns2.a.shifen.com. 790 IN A 220.181.33.32
ns1.a.shifen.com. 790 IN A 110.242.68.42
ns4.a.shifen.com. 790 IN A 14.215.177.229
ns3.a.shifen.com. 790 IN A 112.80.255.253
;; Query time: 1 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Sun Jun 06 13:54:43 CST 2021
;; MSG SIZE rcvd: 299
[13:54:43 root@Client2 ~]#nslookup
> server 10.0.0.81
Default server: 10.0.0.81
Address: 10.0.0.81#53
> www.baidu.com
Server: 10.0.0.81
Address: 10.0.0.81#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.3
Name: www.a.shifen.com
Address: 110.242.68.4
到此一个简易的局域网本地DNS服务器已经搭建完毕
- 客户端可以通过10.0.0.81上搭建的DNS服务器进行DNS解析,访问互联网
总结:
本地局域网DNS服务器通常充当DNS缓存作用, 提高DNS解析速度, 以及减少广域网带宽消耗, 所以一般公司都是有自己的DNS本地服务器
缺点:
本地DNS服务器性能问题, 内部搭建的局域网DNS服务器性能没有公网DNS服务器性能好
搭建本地DNS步骤:
1. DNS服务器安装bind软件
2. 修改配置文件, 监听端口, 以及允许的权限
3. 启动服务
4. 客户端修改DNS, 指向DNS服务器监听的IP地址
5. 客户端dig测试
故障案例:
网页打不开但是qq聊天正常, 就是因为DNS解析出了问题导致无法解析到网站ip,但是qq不是走的DNS所以不受影响,因为走的是服务器ip地址
实验案例2: 搭建企业内部DNS服务, 为企业内部用户提供互联网访问, 并且为企业内部服务器做名字解析,使得内部不同主机之间利用名称互访
实验拓扑
![](https://img.haomeiwen.com/i18380359/8fc0b7da51c208e8.png)
实验环境
在CentOS 8.2.2004上搭建DNS服务器
VMware Workstation 15 Pro
VMware NAT 网络: 10.0.0.0/24, GW: 10.0.0.2
CentOS 8.2.2004 : 10.0.0.81 充当主DNS服务器
CentOS 6.0 : 10.0.0.61 #DNS客户机
CentOS 6.0 : 10.0.0.62 #充当局域网db服务器
CentOS 7.2003 : 10.0.0.71 #DNS客户机
CentOS 7.2003 : 10.0.0.72 #充当局域网www服务器
GW: 10.0.0.2 : VMware NAT 模式默认网关
服务器软件: Bind DNS
客户端程序: bind-utils
- 创建wangxiaoning.org区域数据库文件
###DNS区域数据库文件存放在/var/named目录下
[11:04:43 root@centos-8-2-2004-1 ~]#cd /var/named
[11:04:50 root@centos-8-2-2004-1 /var/named]#ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
###创建区域数据库文件
[11:04:52 root@centos-8-2-2004-1 /var/named]#vim wangxiaoning.org.zone #文件名和后缀无所谓,能区分是哪个域的区域数据库文件即可
$TTL 86400
@ IN SOA master admin ( 20200723 1D 1H 3D 1H )
NS master
master A 10.0.0.81
www A 10.0.0.72
db A 10.0.0.62
#10.0.0.72 是Cento7虚拟机, 充当www服务器
#10.0.0.62是Centos6虚拟机,充当db服务器
- 修改数据库文件权限
[12:45:15 root@centos-8-2-2004-1 /var/named]#chgrp named wangxiaoning.org.zone
[12:45:28 root@centos-8-2-2004-1 /var/named]#chmod o-r wangxiaoning.org.zone
[12:45:36 root@centos-8-2-2004-1 /var/named]#ll
total 20
drwxrwx--- 2 named named 23 Jul 26 21:26 data
drwxrwx--- 2 named named 60 Jul 27 11:04 dynamic
-rw-r----- 1 root named 2253 Jul 8 00:14 named.ca
-rw-r----- 1 root named 152 Jul 8 00:14 named.empty
-rw-r----- 1 root named 152 Jul 8 00:14 named.localhost
-rw-r----- 1 root named 168 Jul 8 00:14 named.loopback
drwxrwx--- 2 named named 6 Jul 8 00:14 slaves
-rw-r----- 1 root named 135 Jul 27 12:45 wangxiaoning.org.zone
- 将创建的数据库文件与DNS服务器关联, 否则DNS服务器不知道要用该数据库文件, 以下两种方法都可以
- 修改DNS服务器配置文件
[12:47:59 root@centos-8-2-2004-1 ~]#vim /etc/named.conf
zone "wangxiaoning.org" IN { #zone写的是域名
type master; # master区域数据库
file "wangxiaoning.org.zone"; #无需指明绝对路径, 配置文件已经标识了存放路径/var/named
};
#配置文件中定义的数据库文件存放的默认路径
options {
directory "/var/named";
- 修改/etc/named/rfc1912.zones文件(专门放区域数据库配置文件信息,也可以用named-checkconf来检查语法格式错误,改命令来自于bind包)
[12:53:34 root@centos-8-2-2004-1 ~]#vim /etc/named.rfc1912.zones
zone "wangxiaoning.org" IN { #这里的IN是可以省略的
type master;
file "wangxiaoning.org.zone";
};
4 检查区数据库文件格式语法/var/named/wangxiaoning.org.zone, named-checkzone, 该命令来自于bind-utils工具包
[12:56:57 root@centos-8-2-2004-1 ~]#named-checkzone wangxiaoning.org /var/named/wangxiaoning.org.zone
[13:00:11 root@centos-8-2-2004-1 ~]#named-checkzone wangxiaoning.org /var/named/wangxiaoning.org.zone
zone wangxiaoning.org/IN: loaded serial 20200723
OK
5 重新加载DNS服务
[13:01:45 root@centos-8-2-2004-1 ~]#rndc reload
server reload successful
6 验证
#在Centos 6, 10.0.0.61客户机验证,能通过10.0.0.81内部DNS服务器解析出www.wangxiaoning.org的服务器ip
[13:07:29 root@centos6-1 ~]#dig www.wangxiaoning.org
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> www.wangxiaoning.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34909
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.wangxiaoning.org. IN A
;; ANSWER SECTION:
www.wangxiaoning.org. 86400 IN A 10.0.0.72
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
;; Query time: 2 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 13:16:20 2020
;; MSG SIZE rcvd: 91
#在Centos 7, 10.0.0.11客户机验证,能通过10.0.0.81内部DNS服务器解析出db.wangxiaoning.org的服务器ip
[23:08:12 root@centos-7-2003-1 ~]#dig db.wangxiaoning.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> db.wangxiaoning.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28962
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;db.wangxiaoning.org. IN A
;; ANSWER SECTION:
db.wangxiaoning.org. 86400 IN A 10.0.0.62
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
;; Query time: 0 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 23:17:51 AEST 2020
;; MSG SIZE rcvd: 101
7 在Centos 7 10.0.0.72 搭建httpdWeb服务,验证内部客户端能通过10.0.0.81解析出www.wangxiaoning.org地址
[root@centos-7-2003-2 html]# yum -y install httpd ;systemctl start httpd; echo "www.wangxiaoning.org" >> /var/www/html/index.html
[23:43:16 root@centos-7-2003-1 ~]#curl www.wangxiaoning.org
www.wangxiaoning.org
[13:36:01 root@centos6-1 ~]#curl www.wangxiaoning.org
www.wangxiaoning.org
#如果用curl命令出现以下报错,请检查web服务器防火墙是否被开启,如果开启了需要关闭
[13:36:01 root@centos6-1 ~]#curl www.wangxiaoning.org
www.wangxiaoning.org
[23:35:10 root@centos-7-2003-1 ~]#curl www.wangxiaoning.org
curl: (7) Failed connect to www.wangxiaoning.org:80; No route to host
至此,一个可供局域网内部使用的DNS服务器已经搭建完成, 对于内部的域名, 可以通过内部DNS服务器完成解析, 对于外部域名, 内部DNS服务器会请求自己配置的互联网DNS服务器完成解析
过程总结:
1. 编辑区域数据库文件,/var/named/xxx.zone
2. 区域数据库文件至少三条记录, SOA指定区域数据库的元数据, NS记录,指定区域数据库有哪些DNS服务器, A记录, 指明NS记录中的DNS服务器地址
3. 在DNS配置文件中指定区域数据库信息, 就是绑定. 可以在named.conf做,也可以在/etc/named/rfc1912.zones做
4. rndc reload
5. 测试
实验案例3: 搭建从节点备用DNS服务器
实验环境
Centos 8 10.0.0.81 DNS主节点服务器
Centos 8 10.0.0.82 DNS从节点服务器
主服务器DNS区域数据库文件放在/var/named文件夹,从服务器从主服务器同步过来的数据库放在/var/named/slaves
[16:54:17 root@centos-8-2-2004-2 ~]#ll /var/named
total 16
drwxrwx--- 2 named named 23 Jul 27 16:42 data
drwxrwx--- 2 named named 60 Jul 27 16:42 dynamic
-rw-r----- 1 root named 2253 Jul 8 00:14 named.ca
-rw-r----- 1 root named 152 Jul 8 00:14 named.empty
-rw-r----- 1 root named 152 Jul 8 00:14 named.localhost
-rw-r----- 1 root named 168 Jul 8 00:14 named.loopback
drwxrwx--- 2 named named 6 Jul 8 00:14 slaves #named对该文件夹有写权限,因为从服务器需要从主服务器自动获得数据放在slaves文件夹里
- 从节点服务器安装软件, 服务设置开机启动
[16:41:48 root@centos-8-2-2004-2 ~]#dny -y install bind;systemctl enable --now named
- 修改从节点DNS配置文件/etc/named.conf
// 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; }; # 直接注释掉
- 关联从节点区域数据库文件,配置/etc/named.rfc1912.zones
- 创建从节点区域信息
- 指明谁是主节点
- 从哪里复制DNS数据信息
[16:44:45 root@centos-8-2-2004-2 ~]#vim /etc/named.rfc1912.zones
zone "wangxiaoning.org" { #域名要和主节点域名一致
type slave; #slave指明这是从服务器
masters { 10.0.0.81; }; # ip地址指明主节点ip
file "slaves/wangxiaoning.org.zone.slave"; #指明从节点区域库文件, 文件名无所谓, 会自动从主节点拉取
}
- 检查DNS配置文件格式语法, 重新加载DNS配置文件
[17:06:15 root@centos-8-2-2004-2 ~]#named-checkconf
[17:06:44 root@centos-8-2-2004-2 ~]#rndc reload
server reload successful
- 验证主服务器区域数据库已经同步到从服务器
[17:07:17 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/
wangxiaoning.org.zone.slave
[17:08:13 root@centos-8-2-2004-2 ~]#file /var/named/slaves/wangxiaoning.org.zone.slave
/var/named/slaves/wangxiaoning.org.zone.slave: data
#该文件不是普通文本文件,是被转换成了而今次, 无法直接打开查看,出于安全考虑,一旦从节点被黑,企业服务器信息会暴露(Centos6从节点是文本文件可以直接打开,从7开始就是无法直接打开的了)
- 验证从节点和主节点冗余成功
在客户端Centos 6, 10.0.0.61配置两个DNS地址,一个指向主节点,一个指向从节点
[16:37:23 root@centos6-1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.81
DNS2=10.0.0.82
重启网络服务,验证DNS地址修改成功
[17:25:23 root@centos6-1 ~]#cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search localdomain linux
nameserver 10.0.0.81
[17:25:27 root@centos6-1 ~]#service network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Determining if ip address 10.0.0.61 is already in use for device eth0...
[ OK ]
[17:25:42 root@centos6-1 ~]#cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search localdomain linux
nameserver 10.0.0.81
nameserver 10.0.0.82
将主节点10.0.0.81停止DNS服务,验证客户端Centos6 10.0.0.61依然能从从节点解析域名
[13:50:37 root@centos-8-2-2004-1 ~]#rndc stop
[17:28:23 root@centos-8-2-2004-1 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[17:26:31 root@centos6-1 ~]#host www.wangxiaoning.org
www.wangxiaoning.org has address 10.0.0.72
[17:29:33 root@centos6-1 ~]#nslookup www.wangxiaoning.org
Server: 10.0.0.82
Address: 10.0.0.82#53
Name: www.wangxiaoning.org
Address: 10.0.0.72
[17:29:40 root@centos6-1 ~]#dig www.wangxiaoning.org
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> www.wangxiaoning.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63158
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.wangxiaoning.org. IN A
;; ANSWER SECTION:
www.wangxiaoning.org. 86400 IN A 10.0.0.72
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
;; Query time: 6 msec
;; SERVER: 10.0.0.82#53(10.0.0.82)
;; WHEN: Mon Jul 27 17:30:10 2020
;; MSG SIZE rcvd: 91
#由结果可见,当主节点DNS服务关闭, 客户端依旧可从从节点获取DNS解析
到此,已经完成DNS冗余的实现,当主节点DNS服务宕机,客户端依旧可通过从节点进行DNS解析
1. 从节点安装DNS软件
2. 从节点配置区域数据库文件, 指明主节点信息, 指明自己是slave节点, 指明区域数据库文件存放路径和名字
3. named-checkconf 检查语法
4. rndc reload
5. 客户端测试
6. 停止主节点, 测试从节点可用
接下来要实现主从数据保持同步
- 先将上一步关闭的DNS服务启动, Centos 8 10.0.0.81
[17:33:42 root@centos-8-2-2004-1 ~]#systemctl start named
- 在主服务器区域数据库文件添加新的DNS记录
[17:40:28 root@centos-8-2-2004-1 ~]#vim /var/named/wangxiaoning.org.zone
$TTL 86400
@ IN SOA master admin ( 20200723 1D 1H 3D 1H )
NS master
master A 10.0.0.81
www A 10.0.0.72
db A 10.0.0.62
k8s A 10.0.0.1 #新增局域网服务器信息
#rndc reload重新加载DNS配置文件
[17:43:11 root@centos-8-2-2004-1 ~]#rndc reload
server reload successful
- 验证此时从节点区域数据库是否有该记录
[16:54:52 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 344 Jul 27 17:06 wangxiaoning.org.zone.slave
#通过文件大小可以看出,新增的记录并没有同步到从节点上.
#因为,主从服务器数据同步比的就是版本号, 当主服务器版本号大于从, 则同步数据
#无论是推还是拉,看的都是数据库版本,即使修改了主节点区域数据库文件,并且到了拉的时间
#只要版本号一样,那么从节点就不会同步主节点信息
- 修改主节点区域数据库版本号, 只要比从节点大就行
[17:40:28 root@centos-8-2-2004-1 ~]#vim /var/named/wangxiaoning.org.zone
$TTL 86400
@ IN SOA master admin ( 20200727 1D 1H 3D 1H )
NS master
master A 10.0.0.81
www A 10.0.0.72
db A 10.0.0.62
k8s A 10.0.0.1 #新增局域网服务器信息
- 重新加载主节点DNS配置文件,验证从节点是否同步
[16:54:52 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 344 Jul 27 17:06 wangxiaoning.org.zone.slave
[17:45:16 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 344 Jul 27 17:06 wangxiaoning.org.zone.slave
#由文件大小可知,从节点依旧没有同步主节点新增信息
#因为即使主节点版本号更新了,但是它不知道从节点服务器地址,主节点的配置文件并没有指明从节点信息,因此无法主动推送更新. 即使第一次同步时从节点从主节点拉取了DNS数据库,但是主节点并没有记录从节点信息, 因此不知道推送给谁
- 修改主节点区域数据库文件,添加从节点记录
添加NS记录和对应A记录, 局域网有几个DNS服务器就应该有几个NS和对应A记录
[17:57:20 root@centos-8-2-2004-1 ~]#vim /var/named/wangxiaoning.org.zone
$TTL 86400
@ IN SOA master admin ( 20200727 1D 1H 3D 1H )
NS master
NS slave1
master A 10.0.0.81
slave1 A 10.0.0.82 #添加从服务器信息
www A 10.0.0.72
db A 10.0.0.62
k8s A 10.0.0.1
- 加载主DNS服务器配置文件
[18:02:48 root@centos-8-2-2004-1 ~]#rndc reload
server reload successful
- 在从服务器验证信息是否同步
[18:08:44 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/wangxiaoning.org.zone.slave
-rw-r--r-- 1 named named 344 Jul 27 17:06 /var/named/slaves/wangxiaoning.org.zone.slave
[18:08:46 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/wangxiaoning.org.zone.slave
-rw-r--r-- 1 named named 470 Jul 27 18:09 /var/named/slaves/wangxiaoning.org.zone.slave
#可以看出从服务器区域数据库文件大小发生变化
#验证客户端可以从slave服务器获取新增的k8s.wangxiaoning.org.域名地址
[18:41:50 root@centos6-1 ~]#dig k8s.wangxiaoning.org @10.0.0.82
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> dig k8s.wangxiaoning.org @10.0.0.82
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 27294
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;dig. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2020072700 1800 900 604800 86400
;; Query time: 552 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 19:09:24 2020
;; MSG SIZE rcvd: 96
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14013
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;k8s.wangxiaoning.org. IN A
;; ANSWER SECTION:
k8s.wangxiaoning.org. 86400 IN A 10.0.0.1
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
;; Query time: 7 msec
;; SERVER: 10.0.0.82#53(10.0.0.82)
;; WHEN: Mon Jul 27 19:09:24 2020
;; MSG SIZE rcvd: 128
#由结果可见, 客户端已经从slave服务器拿到了k8s.wangxiaoning.org.的域名ip地址
到此,已经实现了主从服务器的数据同步
- 主服务器数据一旦发生更改, 必须修改版本号, 然后重新加载DNS服务, 否则更新的信息不会主动推送或者被动拉取给从服务器
主节点修改了区域数据库信息后, 一定要手动修改版本号, 然后重新加载DNS服务, 否则信息不会随送给从服务器, 而且即使到了拉取的时间, 也无法同步
实验4: 实现泛域名解析
只要域名是wangxiaoning.org, 无论主机名输入什么, 只要域名是该域的域名,就都可以转换到泛域名解析对应的ip地址, 比如访问wwww.wangxiaoning.org 会被转换到www.wangxiaoning.org对应的ip地址
- 编辑主DNS服务器区域数据库文件
[19:41:41 root@centos-8-2-2004-1 ~]#vim /var/named/wangxiaoning.org.zone
$TTL 86400
@ IN SOA master admin ( 20200728 1D 1H 3D 1H ) #数据库发生更改要修改版本号
NS master
NS slave1
master A 10.0.0.81
slave1 A 10.0.0.82
www A 10.0.0.72
db A 10.0.0.62
k8s A 10.0.0.1
* A 10.0.0.72 #"*"匹配任意非空字符,兜底,除了其余指定的主机名+域名,只要输入的主机名不存在且其域名是wangxiaoning.org就都重定向到www.wangxiaoning.org
- 主服务器重新加载DNS服务器, 在从服务器验证从服务器区域数据库文件已被更改
[19:56:43 root@centos-8-2-2004-1 ~]#rndc reload
server reload successful
[19:14:31 root@centos-8-2-2004-2 ~]#ll /var/named/slaves/wangxiaoning.org.zone.slave
-rw-r--r-- 1 named named 516 Jul 27 19:59 /var/named/slaves/wangxiaoning.org.zone.slave
[19:59:44 root@centos-8-2-2004-2 ~]#date
Mon Jul 27 19:59:45 AEST 2020
- 在客户端验证泛域名解析已经成功
[19:59:33 root@centos-8-2-2004-1 ~]#dig wwwww.wangxiaoning.org @10.0.0.81
; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> wwwww.wangxiaoning.org @10.0.0.81
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45837
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 0d19a4d2d5cb9061e7c5aab25f1ea6149df88bf3026a107c (good)
;; QUESTION SECTION:
;wwwww.wangxiaoning.org. IN A
;; ANSWER SECTION:
wwwww.wangxiaoning.org. 86400 IN A 10.0.0.72
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
;; Query time: 0 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 20:01:56 AEST 2020
;; MSG SIZE rcvd: 169
[20:01:56 root@centos-8-2-2004-1 ~]#dig wwwww.wangxiaoning.org @10.0.0.82
; <<>> DiG 9.11.13-RedHat-9.11.13-5.el8_2 <<>> wwwww.wangxiaoning.org @10.0.0.82
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19485
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 51aaa41b99912cb2de6d97165f1ea616fab465427c357b8b (good)
;; QUESTION SECTION:
;wwwww.wangxiaoning.org. IN A
;; ANSWER SECTION:
wwwww.wangxiaoning.org. 86400 IN A 10.0.0.72
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
;; Query time: 5 msec
;; SERVER: 10.0.0.82#53(10.0.0.82)
;; WHEN: Mon Jul 27 20:01:58 AEST 2020
;; MSG SIZE rcvd: 169
实验5: 实现浏览器输入wangxiaoning.org时,依然能正常访问www.wangxiaoning.org
- 编辑主DNS区域数据库文件
$TTL 86400
@ IN SOA master admin ( 20200729 1D 1H 3D 1H )
NS master
NS slave1
master A 10.0.0.81
slave1 A 10.0.0.82
www A 10.0.0.72
db A 10.0.0.62
k8s A 10.0.0.1
* A 10.0.0.72
@ A 10.0.0.72 #添加"@", 如果用户只访问了wangxiaoning.org, 也会被转到www.wangxiaoning.org >10.0.0.72. @表示的是本域的域名
- 加载主DNS服务器配置文件, 在客户端验证访问wangxiaoning.org会被解析到www.wangxiaoning.org
[04:41:50 root@centos-7-2003-1 ~]#dig wangxiaoning.org @10.0.0.82
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> wangxiaoning.org @10.0.0.82
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49693
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;wangxiaoning.org. IN A
;; ANSWER SECTION:
wangxiaoning.org. 86400 IN A 10.0.0.72
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
;; Query time: 1 msec
;; SERVER: 10.0.0.82#53(10.0.0.82)
;; WHEN: Tue Jul 28 05:36:55 AEST 2020
;; MSG SIZE rcvd: 135
注意:
- 星号和"@"是两个不同情况, 星号匹配主机名为非空字符, "@"匹配主机名为空的情况,也就是直接访问的是本域的域名, 因为@本身在DNS里就是代表域名本身
- 用了*号匹配时, 最后浏览器的域名显示的还是用户自己输入的错的url, 比如asda.wangxiaoning.org, 而@匹配后, 浏览器会显示正确的url, 比如www.wangxiaoning.org
- 从节点只能读取主节点的DNS数据,无法在从节点发起更改
- 主节点既能读也能写区域数据库文件, 要定期备份主节点DNS区域数据库文件/var/named/wangxiaoning.org.zone
实验6: 解决DNS主从的安全隐患
此前的实验, 在搭建从DNS服务器时并没有获得主服务器的允许,直接就可以拿局域网任意一台主机当作从DNS服务器. 这会产生安全隐患, 尤其是Centos6的从服务器区域数据库是文本格式,只要黑进了内网从服务器就可以看到整个局域网内服务器ip情况
- 利用dig命令抓取内网DNS信息
#即使没有配置DNS服务,只要安装了客户端dig工具就可以在内网主机抓取DNS信息
[19:09:24 root@centos6-1 ~]#dig -t axfr wangxiaoning.org @10.0.0.81 #axrf顺序不能颠倒
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -t axfr wangxiaoning.org @10.0.0.81
;; global options: +cmd
wangxiaoning.org. 86400 IN SOA master.wangxiaoning.org. admin.wangxiaoning.org. 20200729 86400 3600 259200 3600
wangxiaoning.org. 86400 IN A 10.0.0.72
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
*.wangxiaoning.org. 86400 IN A 10.0.0.72
db.wangxiaoning.org. 86400 IN A 10.0.0.62
k8s.wangxiaoning.org. 86400 IN A 10.0.0.1
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
www.wangxiaoning.org. 86400 IN A 10.0.0.72
wangxiaoning.org. 86400 IN SOA master.wangxiaoning.org. admin.wangxiaoning.org. 20200729 86400 3600 259200 3600
;; Query time: 7 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 20:16:16 2020
;; XFR size: 11 records (messages 1, bytes 279)
[20:16:16 root@centos6-1 ~]#dig -t axfr wangxiaoning.org @10.0.0.82
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -t axfr wangxiaoning.org @10.0.0.82
;; global options: +cmd
wangxiaoning.org. 86400 IN SOA master.wangxiaoning.org. admin.wangxiaoning.org. 20200729 86400 3600 259200 3600
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
wangxiaoning.org. 86400 IN NS slave1.wangxiaoning.org.
wangxiaoning.org. 86400 IN A 10.0.0.72
*.wangxiaoning.org. 86400 IN A 10.0.0.72
db.wangxiaoning.org. 86400 IN A 10.0.0.62
k8s.wangxiaoning.org. 86400 IN A 10.0.0.1
master.wangxiaoning.org. 86400 IN A 10.0.0.81
slave1.wangxiaoning.org. 86400 IN A 10.0.0.82
www.wangxiaoning.org. 86400 IN A 10.0.0.72
wangxiaoning.org. 86400 IN SOA master.wangxiaoning.org. admin.wangxiaoning.org. 20200729 86400 3600 259200 3600
;; Query time: 9 msec
;; SERVER: 10.0.0.82#53(10.0.0.82)
;; WHEN: Mon Jul 27 20:16:18 2020
;; XFR size: 11 records (messages 1, bytes 279)
- DNS安全加固
- 编辑主和从DNS服务器配置文件, /etc/named.conf
主:
options {
listen-on port 53 { 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
allow-transfer {10.0.0.82;}; #默认是没有设定transfer的,所有任何内网主机都可以抓取DNS服务器信息, 为了安全, 只允许约定的从节点抓取主节点DNS信息
从:
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; };
allow-transfer {none;}; #从节点配成none, 不允许任何主机从从节点抓取DNS信息
- 重新加载主从服务器DNS配置文件,验证结果
[20:21:30 root@centos6-1 ~]#dig -t axfr wangxiaoning.org @10.0.0.81
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -t axfr wangxiaoning.org @10.0.0.81
;; global options: +cmd
; Transfer failed.
[20:21:32 root@centos6-1 ~]#dig -t axfr wangxiaoning.org @10.0.0.82
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -t axfr wangxiaoning.org @10.0.0.82
;; global options: +cmd
; Transfer failed.
到此,如何搭建简单的本地DNS,已经搭建企业主从DNS服务器已经展示完毕
DNS主从架构总结:
DNS可以一主多从, 也可以一主, 接从, 然后从从
主服务器可以同时读写, 从服务器只能读, 且只能从主服务器定期拉取区域数据库, 或者接受主服务器的推送
DNS的主从架构一旦主服务器down掉, 用户无需在客户端配置DNS指向从服务器即可直接从DNS从服务器获取解析数据
数据同步有两种方式, 主服务器主动推送, 从服务器定期拉取
但是不管是推送还是拉取, 都要求主服务器的版本号比从服务器的版本号大
因此, 每次修改完主上的区域数据库, 都要手动修改版本
DNS会开启tcp的53和udp的53, tcp53用于dns主从复制, udp53用于查询
5 DNS反向解析
5.1 反向解析配置
邮件通讯会用到, 判断邮件是不是合法邮件还是垃圾邮件, 需要调用反向区域实现
反向区域: 即将IP反向解析为FQDN
区域名称: 网络地址反写.in-addr.arpa
![](https://img.haomeiwen.com/i18380359/7f116da4421f1124.png)
示例:
172.16.100. >>> 100.16.172.in-addr.arpa.
(1) 定义区域
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone";
};
(2) 定义区域解析库文件
注意: 不需要MX,以PTR记录为主
范例:
$TTL 86400
$ORIGIN 8.168.192.in-addr.arpa.
@ IN SOA ns1.wangxiaoning.org. admin.wangxiaoning.org. (
20200727
1H
5M
7D
1D )
IN NS ns1.wangxiaoning.org.
11 IN PTR ns1.wangxiaoning.org.
11 IN PTR www.wangxiaoning.org.
12 IN PTR mx1.anshan88.org. #反向解析的域名是x.x.x.in-addr.arpa. , 后面的FQDN是解析的结果, 通过访问ip解析到FQDN, 因为可以是不同的域名, 因为是靠IP解析的
12 IN PTR www.wangxiaoning.org.
13 IN PTR mx2.wangxiaoning.org.
5.2 实战案例: 搭建反向解析主服务器
Centos 8 10.0.0.81 搭建DNS反向解析主服务器: 0.0.10.in-addr.arpa.
- 主服务器主配置文件不变,和前面实验配置一样
options {
listen-on port 53 { 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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
- 添加反向解析域到DNS服务关联文件
[23:49:50 root@centos-8-2-2004-1 ~]#vim /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" IN {
type master;
file "10.0.0.zone";
};
- 编辑主服务器反向解析库文件
利用模板文件
[23:51:01 root@centos-8-2-2004-1 ~]#cd /var/named
[23:52:57 root@centos-8-2-2004-1 /var/named]#cp -p named.loopback 10.0.0.zone
[23:53:16 root@centos-8-2-2004-1 /var/named]#vim 10.0.0.zone
$TTL 1D
@ IN SOA ns1 admin.wangxiaoning.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1.wangxiaoning.org.
100 PTR www.wangxiaoning.org.
200 PTR app.anshan88.org.
- 检查解析库文件语法格式
[00:14:10 root@centos-8-2-2004-1 /var/named]#named-checkzone 0.0.10.in-addr.arpa 10.0.0.zone
zone 100.0.0.10.in-addr.arpa/IN: loaded serial 0
OK
- 验证结果(从Centos6客户端)
[23:49:44 root@centos6-1 ~]#dig -t ptr 100.0.0.10.in-addr.arpa. @10.0.0.81
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -t ptr 100.0.0.10.in-addr.arpa. @10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10962
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.wangxiaoning.org.
;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS ns1.wangxiaoning.org.
;; Query time: 2 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 23:50:08 2020
;; MSG SIZE rcvd: 87
#查看反向解析第二种方法
[23:50:08 root@centos6-1 ~]#dig -x 10.0.0.100 @10.0.0.81
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.7 <<>> -x 10.0.0.100 @10.0.0.81
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21521
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;100.0.0.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.0.0.10.in-addr.arpa. 86400 IN PTR www.wangxiaoning.org.
;; AUTHORITY SECTION:
0.0.10.in-addr.arpa. 86400 IN NS ns1.wangxiaoning.org.
;; Query time: 2 msec
;; SERVER: 10.0.0.81#53(10.0.0.81)
;; WHEN: Mon Jul 27 23:51:02 2020
;; MSG SIZE rcvd: 87
[23:51:02 root@centos6-1 ~]#host 10.0.0.100
100.0.0.10.in-addr.arpa domain name pointer www.wangxiaoning.org.
[23:51:33 root@centos6-1 ~]#nslookup 10.0.0.200
Server: 10.0.0.81
Address: 10.0.0.81#53
200.0.0.10.in-addr.arpa name = app.anshan88.org.
- 修改Windows主机VMnet8网卡DNS服务器指向10.0.0.81, 验证反向DNS解析结果
C:\Users\David>ping -a 10.0.0.100
Pinging www.wangxiaoning.org [10.0.0.100] with 32 bytes of data:
Reply from 10.0.0.1: Destination host unreachable.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.0.0.100:
Packets: Sent = 4, Received = 1, Lost = 3 (75% loss),
C:\Users\David>ping -a 10.0.0.200
Pinging app.anshan88.org [10.0.0.200] with 32 bytes of data:
Reply from 10.0.0.1: Destination host unreachable.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.0.0.200:
Packets: Sent = 4, Received = 1, Lost = 3 (75% loss),
C:\Users\David>
#从结果可以看出, Windows可以通过10.0.0.81,DNS服务器完成对IP地址的反向解析,但是因为本地我没有设置10.0.0.100/200主机,所以ping命令请求超时
补充: DNS只负责对FQDN进行解析或者反向解析,不负责测试网络连通性. ping命令不仅要做DNS解析,也要做连通性检测
6 实现子域
为公司内部环境单独建立一个子域, 搭建专门的DNS服务器, 为子域内的主机做DNS解析. 实现用户通过父域DNS进行查询, 如果父域没有记录, 则查看是不是子域的记录, 如果是, 则向子域DNS服务器查询, 如果不是, 则去互联网DNS查询
子域的情况下, 子域的dns服务器并不提供转发功能, 因此, 如果客户端dns指向了子域, 那么只能查询子域服务器上定义的资源, 因此, 子域的情况下, 子域内部的机器也是把DNS指向父域的DNS服务器, 查询时, 父域会判断用户查询的是子域的服务器, 还是自己内部的服务器, 还是互联网域名, 之后再进行查询.
实验规划:
企业内K8S环境, 搭建子域DNS服务, k8s.wangxiaoning.org
![](https://img.haomeiwen.com/i18380359/fea2e00ffb386029.png)
10.0.0.238 --> wangxiaoning.org域服务器
10.0.0.7 --> 子域k8s.wangxiaoning.org DNS服务器
- 子域DNS服务器安装bind, 开启服务
[14:49:22 root@k8s ~]#yum -y install bind bind-utils; systemctl enable --now named
- 在父域上委派子域信息. 每个DNS父服务器都有下级子域DNS信息. 公网的DNS也是利用子域获取下次DNS信息
$TTL 86400
@ IN SOA master admin ( 20201112 1D 1H 3D 1H)
NS master
k8s NS k8sns #指明k8s子域服务器名称
k8sns A 10.0.0.7 #创建A记录
master A 10.0.0.238
@ A 10.0.0.81
* A 10.0.0.81
www A 10.0.0.81
db A 10.0.0.82
rndc reload
- 子域DNS服务, 创建区域数据库
[14:58:34 root@k8s ~]#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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; };
[14:59:37 root@k8s ~]#vim /etc/named.rfc1912.zones
zone "k8s.wangxiaoning.org" IN {
type master;
file "k8s.wangxiaoning.org.zone";
};
[15:01:08 root@k8s ~]#vim /var/named/k8s.wangxiaoning.org.zone
$TTL 86400
@ IN SOA ns1 admin ( 20201112 1D 1H 3D 1H)
NS ns1
ns1 A 10.0.0.7
master1 A 10.0.0.111
node1 A 10.0.0.222
etcd1 A 10.0.0.99
haproxy1 A 10.0.0.88
[15:08:31 root@k8s ~]#chmod o-r /var/named/k8s.wangxiaoning.org.zone
[15:08:31 root@k8s ~]#chgrp named /var/named/k8s.wangxiaoning.org.zone
[15:09:21 root@k8s ~]#named-checkconf
[15:09:39 root@k8s ~]#named-checkzone k8s.wangxiaoning.org /var/named/k8s.wangxiaoning.org.zone
zone k8s.wangxiaoning.org/IN: loaded serial 20201112
OK
rndc reload
- 客户端验证解析子域服务器
#直接查询子域DNS服务器
[20:49:03 root@CentOS-6-1 ~]#dig master1.k8s.wangxiaoning.org @10.0.0.7
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> master1.k8s.wangxiaoning.org @10.0.0.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41169
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;master1.k8s.wangxiaoning.org. IN A
;; ANSWER SECTION:
master1.k8s.wangxiaoning.org. 86400 IN A 10.0.0.111
;; AUTHORITY SECTION:
k8s.wangxiaoning.org. 86400 IN NS ns1.k8s.wangxiaoning.org.
;; ADDITIONAL SECTION:
ns1.k8s.wangxiaoning.org. 86400 IN A 10.0.0.7
;; Query time: 1 msec
;; SERVER: 10.0.0.7#53(10.0.0.7)
;; WHEN: Thu Nov 12 20:49:45 2020
;; MSG SIZE rcvd: 96
#通过父域DNS服务器查询
[20:55:09 root@CentOS-6-1 ~]#dig master1.k8s.wangxiaoning.org @10.0.0.238
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> master1.k8s.wangxiaoning.org @10.0.0.238
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23385
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;master1.k8s.wangxiaoning.org. IN A
;; ANSWER SECTION:
master1.k8s.wangxiaoning.org. 86400 IN A 10.0.0.111
;; AUTHORITY SECTION:
k8s.wangxiaoning.org. 86400 IN NS k8sns.wangxiaoning.org.
;; ADDITIONAL SECTION:
k8sns.wangxiaoning.org. 86400 IN A 10.0.0.7
;; Query time: 15 msec
;; SERVER: 10.0.0.238#53(10.0.0.238)
;; WHEN: Thu Nov 12 20:55:16 2020
;; MSG SIZE rcvd: 98
补充: 取消DNS加密
修改配置文件:
dnssec-enable yes;
dnssec-validation yes;
|
|
dnssec-enable no; #不能直接注释, 要改为no
dnssec-validation no;
7 实现DNS转发(缓存服务器)
使用场景1:
企业内部业务需要放在独立的域里, 所以需要给该域专门搭建一个DNS服务器, 如果该域中的主机要查询本域内的服务器, 可以通过该域内的服务器查询, 如果要查询其他域的服务器, 可以通过本域的DNS服务器转发到其他域的DNS服务器, 或者通过其他域的DNS服务器去间接查看公网DNS
使用场景2:
大公司各地不同的办公室, 内部通过本域的DNS服务器去做解析, 如果要查询其他域或者公网DNS, 也是转发到公司内部总的DNS去做查询
7.2 转发方式
7.2.1 全局转发
对非本机所负责解析区域的请求, 全转发给指定的服务器
在全局配置块中实现:
Options {
forward first|only;
forwarders { ip;};
};
7.2.2 特定区域的转发
仅转发对特定的区域的请求, 比全局转发优先级高
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
first: 先转发至指定的DNS服务器, 如果指定的DNS服务器无法解析查询请求, 则本服务器再自己去根服务器查询. 配置为first时, 要求本DNS服务器是可以连互联网的, 要不然也没法向根发起查询
only: 先转发至指定DNS服务器, 如果无法解析查询请求, 则本服务器将不再去根服务器查询. 如果指定的DNS服务器,断网了, 或者他自己的DNS解析出现了问题, 那么由DNF转发服务器负责的域内部的主机就无法联网了
实验拓扑
![](https://img.haomeiwen.com/i18380359/0b90e79b8d934ff9.png)
实现全局转发
- 转发DNS服务器配置
[22:00:55 root@CentOS-8-2 ~]#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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
// allow-query { localhost; };
forward only;
forwarders {10.0.0.238;};
rndc reload
- 客户端测试
#查询公网域名
[22:22:04 root@CentOS-6-1 ~]#dig www.baidu.com @10.0.0.228
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.baidu.com @10.0.0.228
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17899
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 13, ADDITIONAL: 13
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1010 IN CNAME www.a.shifen.com.
www.a.shifen.com. 112 IN A 61.135.185.32
www.a.shifen.com. 112 IN A 61.135.169.121
;; AUTHORITY SECTION:
. 517079 IN NS g.root-servers.net.
. 517079 IN NS i.root-servers.net.
. 517079 IN NS l.root-servers.net.
. 517079 IN NS j.root-servers.net.
. 517079 IN NS h.root-servers.net.
. 517079 IN NS c.root-servers.net.
. 517079 IN NS k.root-servers.net.
. 517079 IN NS b.root-servers.net.
. 517079 IN NS m.root-servers.net.
. 517079 IN NS f.root-servers.net.
. 517079 IN NS e.root-servers.net.
. 517079 IN NS a.root-servers.net.
. 517079 IN NS d.root-servers.net.
;; ADDITIONAL SECTION:
h.root-servers.net. 603476 IN A 198.97.190.53
e.root-servers.net. 603476 IN A 192.203.230.10
a.root-servers.net. 603476 IN A 198.41.0.4
b.root-servers.net. 603476 IN A 199.9.14.201
i.root-servers.net. 603476 IN A 192.36.148.17
f.root-servers.net. 603476 IN A 192.5.5.241
j.root-servers.net. 603476 IN A 192.58.128.30
l.root-servers.net. 603476 IN A 199.7.83.42
c.root-servers.net. 603476 IN A 192.33.4.12
g.root-servers.net. 603476 IN A 192.112.36.4
d.root-servers.net. 603476 IN A 199.7.91.13
m.root-servers.net. 603476 IN A 202.12.27.33
k.root-servers.net. 603476 IN A 193.0.14.129
;; Query time: 1 msec
;; SERVER: 10.0.0.228#53(10.0.0.228)
;; WHEN: Thu Nov 12 22:23:00 2020
;; MSG SIZE rcvd: 509
#查询内网域名
#注意, 此时内网的域名是无法解析的, 需要把转发服务器上的DNS安全关闭. 因为局域网内的DNS是非法的, 因此要关闭DNS安全
#如果不关闭安全, 那么客户端查询时, 在转发服务器的/var/log/messages里会显示broken trust chain报错
[23:14:52 root@CentOS-6-1 ~]#dig master1.k8s.wangxiaoning.org @10.0.0.228
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> master1.k8s.wangxiaoning.org @10.0.0.228
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 23102
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;master1.k8s.wangxiaoning.org. IN A
;; Query time: 12 msec
;; SERVER: 10.0.0.228#53(10.0.0.228)
;; WHEN: Thu Nov 12 23:15:28 2020
;; MSG SIZE rcvd: 46
[23:15:28 root@CentOS-6-1 ~]#dig www.wangxiaoning.org @10.0.0.228
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.wangxiaoning.org @10.0.0.228
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 25811
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.wangxiaoning.org. IN A
;; Query time: 4 msec
;; SERVER: 10.0.0.228#53(10.0.0.228)
;; WHEN: Thu Nov 12 23:15:36 2020
;; MSG SIZE rcvd: 38
关闭DNS安全
dnssec-enable no;
dnssec-validation no;
[23:20:43 root@CentOS-6-1 ~]#dig www.wangxiaoning.org @10.0.0.228
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.wangxiaoning.org @10.0.0.228
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28623
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.wangxiaoning.org. IN A
;; ANSWER SECTION:
www.wangxiaoning.org. 86400 IN A 10.0.0.81
;; AUTHORITY SECTION:
wangxiaoning.org. 86400 IN NS master.wangxiaoning.org.
;; ADDITIONAL SECTION:
master.wangxiaoning.org. 86400 IN A 10.0.0.238
;; Query time: 15 msec
;; SERVER: 10.0.0.228#53(10.0.0.228)
;; WHEN: Thu Nov 12 23:20:54 2020
;; MSG SIZE rcvd: 91
实现仅转发特定域的请求
仅转发对特定的区域的请求, 比全局转发优先级高
利用特定域转发, 可以实现客户请求内部域名, 则转发到指定的DNS服务器, 如果请求的是公网域名, 就自己去公网查询
这种请求需要转发DNS服务器自己能连网
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
8 别名技术
将域名映射到别名上, 实现解析别名时, 最终解析的是本身的名字
www CNAME www.wangxiaoning.com.
一般用户购买了cdn服务的域名, 比如: 将www.wangxiaoning.org 映射到 cdn服务商的地址, 用户访问www.wangxiaoning.org时会被转到cdn服务商的域名, 由cdn服务商来实现域名解析, 通过cdn服务来实现智能DNS
举例;
用户在北京, 网站的源服务器在杭州
- 用户向本地dns服务器发起dns查询(www.taobao,com), 本地dns服务器不知道该返回哪个服务器的地址, 因此,会向根服务器发起请求
- 本地dns查询根, 查询www.taobao.com的地址, 根由于没有www.taobao.com的解析记录, 但是会返回com的地址给本地dns, 本地dns查询.com
- 本地dns向.com查询,.com返回taobao.com的地址给本地dns
- taobao.com由于把dns解析的服务交给了cdn服务商, 因此会返回给本地dns服务器一个CNAME别名, www.taobao.com -- CNAME -- cdn服务商dns服务器的域名
- 本地dns向cdn服务商的dns服务器发起dns查询
- cdn服务商的dns服务器会提供智能dns功能, 根据本地dns的地址, 返回一个就近的网站服务器的地址给本地dns服务器
- cdn服务器的服务器上的网站数据来自于www.taobao.com的源服务器. 源服务器页面上线后, 会把内容推送到CDN服务器上, 这样用户访问就可以看到最新的页面
- 如果用户访问时没来的及推送, 那么可以通过智能dns返回的cdn服务商的接入节点, 来访问其他地区的cdn服务器来获取新的内容, 因为cdn服务商内部的网络都是专线通的. 因此不同地区的cdn服务器之间可以连通. 如果所有cdn节点都没有新的数据, 那么在内部会最终转到网站源服务器, 把源服务器上的内容同步到其他节点.
[23:44:17 root@CentOS-6-1 ~]#dig www.wangxiaoning.org @10.0.0.238
;; QUESTION SECTION:
;www.wangxiaoning.org. IN A
;; ANSWER SECTION:
www.wangxiaoning.org. 86400 IN CNAME www.wangxiaoning.com.
www.wangxiaoning.com. 600 IN A 120.78.154.82
;; AUTHORITY SECTION:
wangxiaoning.com. 168837 IN NS dns17.hichina.com.
wangxiaoning.com. 168837 IN NS dns18.hichina.com.
9 实现智能DNS
网站的大页面一定要压缩, 否则如果走cdn按流量计费, 那么费用会很高
如果网站用了cdn, 那么最终服务器返回的cdn地址是根据用户发起请求后的本地dns决定的. 即使用户在北京, 但是如果访问是通过上海的dns进行查询, 那么cdn就返回上海的cdn地址
网友评论