专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
InfoQ架构头条  ·  新旧交替:AI 时代架构师的进阶之路 ... ·  2 天前  
51好读  ›  专栏  ›  运维帮

链路负载均衡DNS四层及七层代理解决方案

运维帮  · 公众号  · 运维  · 2016-12-23 08:38

正文

一、 概述


当前,很多应用前端都部属了基于智能DNS技术的全局或入向链路负载均衡设备,引导不同运营商用户从同属的运营商链路访问。假设某用户在内网出口部署了出向链路负载均衡设备,此时,内网终端设定的LDNS地址的不同将直接影响不同运营商链路的带宽占用。具体有如下两种情况:

1)     内网终端指向某一运营商的LDNS。

2)     内网终端指向企业DNS,企业DNS设定转发器,加入几条链路的运营商LDNS地址。


以上两种情况都将导致不同链路的带宽占用出现较大的差别。


二、问题分析


1)     内网终端指向某运营商的LDNS问题:例如指向电信的LDNS,由于部署了全局负载均衡的应用的智能DNS牵引作用,将引导用户访问这些应用的时候,都走电信链路,导致电信链路占用过大,而其他链路空闲。

2)     内网DNS的转发器问题: 内网DNS优先使用转发器设定的第一个LDNS地址,与1)的原因一样,导致第一个LDNS地址所属的运营商链路带宽占用过大。


三、A10  Networks解决方案


A10 Networks针对以上问题提供两种解决方案:DNS四层代理和DNS七层代理。下面的解决方案以电信和联通两条链路为例来描述。


3.1  DNS四层代理方案


3.1.1  DNS四层显示代理

显示代理需要用户终端或内部DNS将所指的转发DNS设成A10设备的VIP地址,实现步骤如下:

  • A10设备将电信和联通等LDNS映射为一个VIP,根据链路带宽比例设定LDNS的分发比例。

  • 若内部终端原来所指的DNS为某运营商LDNS,则将该DNS地址改为上述的VIP。

  • 若内部终端的DNS指向企业内网DNS,则把内网DNS的转发IP改为A10的VIP。

  • A10设备收到DNS查询请求,将通过负载均衡算法均衡分发到各个运营商LDNS。

  • A10设备选择了某运营商的LDNS,会自动选择相应运营商链路并用该运营商的地址做NAT。

  • 由于A10设备根据两条运营商链路的带宽比例来分发DNS请求,解决了之前由于DNS解析地址集中在某个运营商而引起的链路过度占用,使得两条链路的访问比例得到了均衡,进而保证了带宽占比的均衡。


3.1.2     DNS四层透明代理

透明代理无需改变内网终端和内网DNS的配置,只需要DNS的查询请求流经A10设备,A10设备即可截获用户请求,实现强行负载均衡,实现步骤如下:

  • A10设备建立服务组包含两条链路的LDNS,A10设备设置wildcard VIP对应LDNS服务组。

  • 内部终端/内网DNS向所设定的DNS发出DNS查询请求。

  • A10设备收到DNS查询请求,将通过负载均衡算法均衡分发到各个运营商LDNS。

  • A10设备选择了某运营商的LDNS,会自动选择相应运营商链路并用该运营商的地址做NAT。

  • 由于A10设备根据两条运营商链路的带宽比例来分发DNS请求,解决了之前由于DNS解析地址集中在某个运营商而引起的链路过度占用,使得两条链路的访问比例得到了均衡,进而保证了带宽占比的均衡。


3.2   DNS七层代理方案

四层代理只是在连接层面对DNS请求做了负载分发,但现实情况中,用户的网络复杂度可能比较复杂,这个时候,简单的四层负载无法完全满足需求,或者解决方案四层代理方案解决起来并不完美,例如如下两种情况:

1)     客户部署有海外链路,要求能够翻墙访问被国内封禁的域名。国内禁止访问某个国外网站,一般有两种方式:

  • IP封禁,国内运营商网络禁止访问被封禁的目标网站地址。

  • DNS劫持(污染),用户查询封禁的国外域名时,国内的LDNS返回一个错误的地址。

2)     某个集团型客户的内网自建DNS跟办公网络不在同一区域,各自都有自己的网络出口,内部用户访问集团自己的域名发给内网DNS解析,访问Internet域名发给运营商DNS解析。

针对以上两种情况,采用七层DNS代理的方式可以完美的解决用户需求。

A10的七层DNS代理方式同样支持显示代理和透明代理两种方式,都可以解决上述的两种情况。下面用DNS七层显示代理来描述第一种需求的实现,用DNS七层透明代理来描述第二种需求的实现。


3.2.1     DNS七层显示代理

同四层显示代理一样,七层显示代理需要用户终端或内部DNS将所指的转发DNS设成A10设备的VIP地址,针对第一种需求的实现步骤如下(假设部署的访问国外网站的链路为香港链路):

  • A10设备建立需要翻墙访问的国外域名列表

  • A10设备建立国内DNS服务组,包含电信和联通LDNS,同样建立一个国外LDNS服务组,包含香港链路所属运营商的LDNS或第三方DNS(8.8.8.8或114.114.114.114等)

  • 编写aFlex脚本,解析DNS请求数据包,如果请求域名包含在国外域名列表中,从香港链路转发给国外LDNS,否则转发给国内运营商LDNS。

  • A10设备配置一个DNS VIP关联aFlex脚本。

  • 内部终端的DNS指向A10的VIP。

  • 用户发起的DNS请求到达A10设备,A10设备执行aFlex,实现基于域名的策略转发,此时如果访问列表内的国外域名,将解析回国外域名所对应的真实地址(解决了DNS劫持问题),A10设备会把这些域名对应的IP地址建立一个IP表。

  • 内部用户访问解析到的IP地址,如果地址属于国外IP表,则从香港链路转发(此时不会发生IP封禁情况),如果地址属于电信则从电信链路转发,如果地址属于联通则从联通链路转发…….

  • 上述步骤完美的实现了国外域名翻墙访问的需求,同时也对国内的两条运营商链路实现了负载分担。


3.2.2     DNS七层透明代理

七层透明代理同样无需改变内网终端和内网DNS的配置,只需要DNS的查询请求流经A10设备,A10设备需要对DNS数据包做深层解析和判断,以上面的第二种需求情况为例,处理步骤如下:

  • A10设备建立客户公司自己拥有的域名/域的列表。

  • A10设备建立一个服务组包含电信和联通的LDNS并根据带宽设定分发比例,再建立一个服务组包含客户公司的内网DNS地址。

  • 用户终端所指的DNS为用户自己的DNS Server地址。

  • 用户的DNS请求将首先到达A10设备,A10解析DNS请求包,匹配请求域名是否属于客户自己公司的域名,如果是,转发给用户自己的DNS。如果不是则通过负载均衡算法转发给电信或联通的LDNS。

  • 客户端查询任何非客户公司的域名,都由A10设备通过负载均衡方式转发给运营商LDNS做解析。如此处理,有如下收益:

    • 减少了网络环绕路径,提高了DNS查询速度。

    • 可以把用户自己DNS的工作解放出来,只作为公司本身域名的授权DNS来用,降低用户内网DNS的负载。


四、总结


由于DNS七层代理可满足用户任何情况的需求,因此DNS七层代理方案为最优的方案,建议设备选型时,充分考虑当前以及未来的需求,将支持DNS七层代理作为应用交付设备选择的基本要求。


快乐分享,快乐生活

商务合作,请加微信yunweibang555