DNS主从,转发,及基于ip负载

本公众号内容大多由平时操作记录,如果有错误地方欢迎留言指

接着原来《DNS原理与应用》的文章,本章内容主要通过实现DNS的主从,转发,及基于域名解析不同的ip实现后端服务负载均衡的效果。最后再实现DNS的高级功能:类似CDN原理实现基于IP实现区域分流负载,通过以上内容更好地理解DNS的工作原理以及拓展高性能的web服务实现思路

利用DNS解析实现简单的web负载均衡

我们常说的负载均衡解决方案大多是通过nginx、lvs,haporxy等实现业务或者流程的负载,通过DNS也可以实现简单的负载功能,并且在用户请求解析的过程中就能实现负载,DNS默认会使用轮询的机制轮流将请求解析到后端不同主机:这样就可以将同一站点域名解析到不同的主机IP,让各主机提供相同的服务。在DNS中配置如下即可实现:

上面的配置将一个站点部署在两台主机上,通过定义别名DNS会轮询解析请求到这两台主机上

解析测试:

DNS负载缺点:为了降低DNS请求的次数以提高訪问效率。浏览器经常缓存了DNS查询的结果。假设一个IP处的服务失效。那么浏览器可能仍会依据DNS缓存中所记录的信息向该不可用的服务发送请求(不同的浏览器可能有不同的行为)。尽管说整个服务仅仅有一处IP所相应的服务失效了,可是从用户的角度看来该站点已经不可訪问。因此基于DNS的负载平衡方案并不能作为一个独立的负载平衡解决方式来提供高可用性的保障,而是作为其他负载平衡解决方式的补充方案来使用。

DNS主从同步

要实现DNS的主从复制,必须要在主DNS区域解析库文章中定义从服务器地址:

思路:

主DNS解析库文件中定义从服务器信息

从服务器在区域库定义文件中添加要解析的区域信息,大致与主DNS上相同,但是type是为slave;要指定master是谁,以及同步的解析库文件存放位置

关于安全考虑:在主从的named.conf文件中要添加访问控制:允许区域传送的主机-白名单(allow-transfer {})

实现上面的过程:

主DNS服务器定义从服务器信息/var/named/gudaoyufu.com.zone

在从服务器中定义区域解析信息 /etc/named.rfc1912.zones

注意:从服务器上定义的域必须要与主服务器上相同,从的type类型为:slave,必须要是指定master是谁,否则找不到同步对象,定义的同步解析库文件存放文章默认在/var/named/slaves目录下

在主从的named.conf文件中添加要、区域库传送控制,以保障服务器的信息安全:这个的作用是干嘛的?用一个示列一下就看明白

不做区域传送控制前,用任意一台主机都可以获取到DNS区域解析库文件中的服务器信息

添加传送控制,只允许主从间传送,定义规则:allow-transfer { 192.168.214.134; };

看到区别了吧,如果不做限制,任何人可以获取到服务器的部署情况这是一个很大的安全隐患。

在主DNS服务器中只允许从服务器传送,而对于从服务器,则要拒绝任何主机进行传送

最终在/etc/named.conf中配置如下:

主:allow-transfer { 192.168.214.134; };

备:allow-transfer { none; };

配置好主从服务器后检查配置有没有问题,执行:** named-checkconf**

没问题后重启或重载服务器:rndc reload

如果顺利的话,在从服务器的/var/named/slaves目录中已经有了主服务器中的gudaoyufu.com.zone文件

从服务器已经同步成功,这时可以关闭主服务器,测试解析,先将测试的客户端添加DNS地址

DNS转发

如果客户端向DNS服务器发起的解析请求内容不在本服务器上,那么可以设置DNS转发,将解析请求转发到其他DNS服务器。DNS转发分两种情况,一种是只要本地没有解析内容的都转发到指定的DNS服务器上这种转发叫(全局转发),另一种是进行匹配转发,只要解析请求符合定义的某个域,就把该请求转发到指定的DNS服务器上这种转发叫(区域转发):

要实现上面的过程,要在两台DNS上做相应的配置:

在主DNS上要定义转发规则,

开启请求者做递归,否则转发请求不予进行

recursion yes;

第二台DNS上要有相应的域解析库内容

注意:关闭dnssec功能:

dnssec-enable no;

dnssec-validation no;

配置主DNS转发规则

(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器,在/etc/named.conf中options定义

(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高,在 /etc/named.rfc1912.zones中定义区域信息

下面分别实现这两种转发方式,先看第一种转发:全局转发

全局转发

配主DNS配置文件/etc/named.conf

**注意:recursion yes; 主DNS必须要开启递归查询,否则解析请求转发不出去 **

接收转发DNS端配置:

定义区域文件信息:vim /etc/named.rfc1912.zones

编写区域解析库文件:vim /var/named/abc123.com.zone

重载DNS并测试:

rndc reload

dig测试:

访问测试

区域转发

设置后情况一下DNS缓存再重载服务:

rndc flush

rndc reload

测试访问

智能DNS

智能DNS解析根据客户机IP地址归属地区域进行区别响应,这里根据ip地址网段实现按ip地址区域解析的过程:

在DNS的主配置文件中定义ACL规则,注意,ACL规则必须定义在named.conf的最前面;

acl是根据从上到下顺序查找匹配的,acl中ip存在包含关系,应该小范围地址段先定义,大网段在后面,如果大网段在上面会使下面有包含关系的小网段不生效

定义解析库文件

为每个IP地址范围定义单独的解析库文件

记得修改解析库文件的属组为named

将acl与各区域解析库文件关联起来:使用view

创建view

先创建单独区域文件,在view中要指定

在named.conf中定义view

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604G1WCEN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券