DNS服务之BIND-进阶
bind服务:
前言已经介绍了bind服务配置dns解析的基本使用,下面介绍进阶用法:
- dns主从同步
- 子域授权
- dns转发服务器
- dns解析请求控制
- dns的view视图(实现互联网CDN)
如果需要了解dns概念以及bind服务基本使用,点击跳转 DNS服务之BIND
这篇博客有前后关联性,建议从头开始看
主从同步配置
注意:
- 主从机要能通信;
- 每次主解析库修改后序列号都要手动修改一次;
- 主从机时间需同步;
- bind版本应保持一致,否则要:从高主低
1)主dns配置:
可在配置中加同步限制,不加也没事
install -d /etc/named.d --mode=755
echo 'include "/etc/named.d/*.conf";' >> /etc/named.conf
vim /etc/named.d/huangji.com.conf
zone "huangji.com" IN {
type master;
file "huangji.com.zone";
allow-transfer { 从ip ; }; #允许从主机同步,参数可给none(所有人不允许)
}
2)在备dns主机装bind,并做成dns缓存服务即可
yum install -y bind
vim /etc/named.conf
listen-on port 53 { any ; }; #只用修改此行,即作为缓存服务器
vim /etc/named.rfc1912
...
zone "huangji.com" IN {
type slave;
masters { 192.168.65.7; };
file "slaves/huangji.com.zone";
};
zone "168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.65.7; };
file "slaves/192.168.zone";
};
systemctl restart named
子域授权:
也就是层级解析,一级域能找到二级域,二级域能找到三级域
1)父dns的解析zone定义:
任意解析文件添加都可以
NS ziyu.hj.com.
ziyu A 192.168.65.12
2)子dns主配置文件:
vim /etc/named.d/huangji.com.conf
zone "ziyu.hj.com" IN {
type master;
file "ziyu.hj.com.zone";
};
vim ziyu.hj.com.zone
$ORIGIN ziyu.hj.com.
...
NS dns.ziyu.hj.com
dns A 192.168.65.100
转发服务器
接受转发请求的主机,必须可以为发起请求的主机做递归查询,否则无效。也就是说,定义父域,不用每次从根开始找
转发模式:
当两个同时开启,优先使用本地解析到的ip
- 全部转发
- 区域转发
全部转发:
所有不是本机负责解析的,全部转发给指定主机
options { #在这里定义
...
forward { first/only }; ;#first时先转发,没有时再递归根;only只递归根
forwarders { 接收转发请求主机; };
}
区域转发:
只转发特定区域的请求到某主机,把指定域名解析转发
zone " huangji.com" IN { #父域名称
type forward;
forward only;
forwarders { 192.168.65.7; }; #父域ip
}
安全相关配置
acl:
把一个或多个ip当成集合,并用一个名称统一使用。只能放named.conf文件中最前面
默认有4个内置acl:
- none(谁也不允许)
- any(任意主机)
- local(本机)
- localnet(本机同掩码的网段)
例:
acl mynet {
192.168.0.0/16
}
访问控制指令:
控制谁能访问dns服务
allow-query {}; 允许查询的主机。白名单
allow-transfer {}; 允许同步的主机。白名单
allow-recursion {}; 允许递归的主机;在option{}中定义。一般内部使用时做限制
allow-update {}; 允许更新解析库的内容,最好关闭,容易被攻击
GSLB和CND
基于view实现
GSLB(Global Server Load Balance):
全局负载均衡:
- 用来做dns智能调度的
- GSLB是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证
- GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
- GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式
智能dns:
- 根据客户不同运营商,或地区,把请求分别分配给最近的缓存服务器
CDN工作原理:
- 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求
- 网站的DNS域名解析器设置了CNAME,指向了www.a.cdn.com,请求指向了CDN网络中的智能DNS负载均衡系统
- 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
- 用户向该IP节点(CDN服务器)发出请求
- 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容
- 请求结果发给用户

bind view(视图)
视图:
- 一个bind服务器可定义多个视图,每个视图中可定义一个或多个zone;
- 每个视图匹配一组客户端
- 多个视图内可对一个域名进行解析,但解析库文件不同
说明:
- 启用view后,所有zone只在view中生效,未定义其中的全部失效
- 一般只在本地递归请求的客户所在view中定义根区域(内网环境中帮助本地用户做外部域名解析,将内网中定义的域名只在内网中解析。外网用户不需要)
- 客户端请求到达时,是自上而下检查每个view,只会匹配第一次出现的结果
定义方式:
view my_view {
match-clients {}; 匹配客户端
}
1)在named.conf中最前面添加acl:
acl beijing { #定义区域,来自北京的ip是此网段
192.168.0.0/24;
}
acl hubei { #定义区域,来自湖北的ip是此网段
172.16.0.0/24;
}
acl ohter {
any;
}
2)在named.rfc1912中最前面添加:
view bj_view {
match-clients { beijing; };
allow-recursion { beijing; };
...... #囊括文件全部默认的zone和内网自定义的zone
};
view hb_view {
match-clients { hubei; }; #可写any
zone "huangji.com" IN {
type master;
file "hj.com.webnet";
allow-update { none; };
};
};
view ohter_view {
match-clients { other; };
#include "/etc/ohter.zone" 可以每个view导入不同配置文件,非必写参数
}
3)再写外网的hj.com.webnet文件:
解析www.huangji.com时,解析到外部地址,而不是view中定义的内部地址
cp -a huangji.com.zone hj.com.webnet
vim hj.com.webnet
...
NS dns.huangji.com.
dns A 10.0.0.1
www A 2.2.2.2
* A 2.2.2.2
DNS解析相关报错:
错误1:
SERVFAIL:The nameserver encountered a problem while processing the query.
办法:
- 可使用dig +trace排错,可能是网络和防火墙导致
错误2:
NXDOMAIN:The queried name does not exist in the zone.
办法:
- 可能是CNAME对应的A记录不存在导致
错误3:
REFUSED:The nameserver refused the client's DNS request due to policy restrictions.
办法:
- 可能是DNS策略导致

浙公网安备 33010602011771号