完整的查询请求流程
当主机请求一个域名时
1 先查询本地 hosts 文件,是否有对应IP地址,如果有,则直接访问该IP地址,域名解析服务结束;
2 如果本地 hosts 文件中没有对应IP地址,则查询本地DNS缓存,如果本地DNS缓存中有对应IP地址, 则直接访问该IP地址,域名解析服务结束;
3 如果没有本地DNS缓存,或本地DNS缓存中没有该域名的IP地址,则请求主机配置的DNS服务器来解 析该域名;
4 DNS服务器经过迭代查询,将查询结果返回给主机,主机根据返回结果访问对应IP地址
设置全局DNS (ubuntu)
/etc/systemd/resolved.conf
systemctl restart systemd-resolved.service (#设置完重启)
bind安装和配置
[root@ubuntu ~]# apt install -y bind9
[root@ubuntu ~]# systemctl enable --now named.service
(#安装完要重启)
查看端口占用 named默认会占用TCP和UDP的53端口, 953是给管理工具使用的
[root@ubuntu ~]# ss -tunlp | grep named
#去掉全局配置,在该文件中注释掉DNS行
[root@ubuntu ~]# vim /etc/systemd/resolved.conf
#生效
[root@ubuntu ~]# netplan apply
[root@ubuntu ~]# systemctl restart systemd-resolved.service
bind9的主配置文件 /etc/bind/named.conf
bind9的选项配置文件 /etc/bind/named.conf.options
内容:
配置 | 配置字段 | 备注 |
---|---|---|
全局配置 | options{}; | 全局配置选项 |
日子子系统配置 | logging{}; | 运行日志 |
网络自定义集合 | acl | 将某个网段或某个具体IP地址定义在一个集合里面 |
视图 | view | 配合acl将不同的请求来源用不同的解析规则返回,实现智能 |
中间配置文件 /etc/bind/named.conf.default-zones
allow 访问控制指令
在named配置中有四个allow开头的字段,主要用来实现访问控制
acl 地址集合
ACL:将一个或多个网段(或具体IP地址)定义在一个集合里面,并通过统一的名称进行调用。
ACL 只能先定义后调用,因此一般放在配置文件的最上面,在 options 之前定义。
具体解析规则 /etc/bind/db.*
缩写为 RR
TYPE字段说明 常用的TYPE字段值有A,AAAA,CNAME,MX,NS,PTR,SOA 等
实现DNS自解析的主从
在现实环境中,一台主机通常需要配置多个DNS服务器,如果只有单个DNS服务器,则有可能会出现因 为DNS服务当机,而无法解析域名的情况出现。
DNS主从同步的原理
主从服务之间数据同步,有两种方式
\1. 主服务器向从服务器推送数据(PUSH)
\2. 从服务器向主服务器拉取数据(PULL)
TCP和UDP的53端口的区别
TCP53端口主要用于主从之间的数据同步,UDP53端口主要用于对外提供域名解析服务(监视服务),所以禁掉TCP53,并不会影响DNS服务对外提供查询服务。 实事上UDP端口也要参与数据同步
实现DNS缓存
在客户端实现DNS缓存,可以保证在DNS服务不可用时,还能使用DNS在本地的缓存数据。 另外,本地缓存的存在,也加快了DNS的查询速度。
GLSB 全局负载均衡
GLSB 的实现有三种方式:基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS的实现。
CDN 工作原理
1. 客户端请求 www.a.com ,如果是第一次请求,则需要向DNS服务器请求解析
2. www.a.com 的运维人员设置了chanme 解析,将 www.a.com 解析到 www.acdn.com
3. www.acdn.com 会根据客户端IP地址,返回一个响应速度最快的IP节点给客户端
4. 客户端根据DNS解析得到的IP地址,访问该节点,该节点一般都是CDN服务器节点
5. 如果该CDN节点被访问时没有相关数据,则会将客户端请求通过内部网络转发到原站点获取数据, 同时该CDN节点会将此次请求的内容缓存起来,这样下次该节点被访问时,就不用再去请求源站点