2023年了,路由器DHCP服务里面DNS用运营商的好,还是用公共的好? 您所在的位置:网站首页 最快的网关 2023年了,路由器DHCP服务里面DNS用运营商的好,还是用公共的好?

2023年了,路由器DHCP服务里面DNS用运营商的好,还是用公共的好?

2023-10-07 12:15| 来源: 网络整理| 查看: 265

摘要

介绍关于在园区网多运营商多出口切换问题分析,同时引出DNS多出口流量均衡等问题分析,并给出比较好的方法和建议。

引言

在企业、数据中心等环境,多运营商出口线路是很普遍存在的场景,同时DNS那就更是无处不在,作为互联网基础设施,可谓是重中之重,DNS解析的结果的好坏更是直接影响网络体验,故如何均衡多出口链路带宽利用效率同时又解决DNS流量均衡成为矛盾的突出点。

背景

出口电信两条,分别为100Mbps和300Mbps,移动一条500Mbps。都是独享带宽,固定IP,上下行对等。线路分别都连接到深信服AD上,并分别做了智能(策略)路由和DNS代理。

内网客户端有公网域名解析服务需求以及内网域名解析服务需求,故搭建内网DNS(缓存)转发器和权威解析服务器以及管理权威解析的Web服务器。

内网有海外域名解析需求,故有海外链路加速服务(SD-WAN),在DNS解析这块需要考虑海外域名解析问题。

现在需求就是内网客户端如何实现最优的解析记录和出口链路如何实现更好的负载效果,实现链路利用效率最优。下面是简单的拓扑图:

bind作为内网DNS服务器,所有客户端和服务器的都配置这两台bind作为DNS解析;内网域名转发到权威服务器解析,通过zone设置内网域名转发到权威服务器或者设置为中间转发服务器中做递归转发;公网域名通过bind转发到深信服AD中,深信服AD开启DNS代理功能,代理目的地址为任何地址的DNS查询请求,深信服AD修改DNS目的地址来均衡流量,主要解决跨运营商写死的运营商明细路由中DNS导致的流量不均衡问题,同时还要解决海外链路DNS解析问题。

问题多运营商多线路流量负载分担问题,如何保障多条路径下,可以均衡流量并互为备份?本质上就是多出口动态切换问题多出口带宽是不相同的,如何解决带宽不对称,但是尽可能提高每条链路的带宽利用率?由于是不同的运营商,如何解决访问移动的流量走移动出口,访问电信的流量走电信出口?当跨运营商问题解决了,如果使用运营商DNS有会带来DNS导致的流量不均衡问题?海外链路(SD-WAN)一般都有自己优化的DNS或者使用海外公共DNS,所以又带来访问海外链路的流量必须使用指定的DNS解析问题?方法针对问题1:

其实就是IP路由层面的选路问题,其核心就是保证在多条路径下,可以均衡流量的同时保证互为备份的作用。最简单的方式就是「ECMP」就可以做到了;当然OSPF、BGP动态路由默认就有这方面的能力。本质上都是选路问题,因此多运营商多出口动态切换这个问题是很好解决的。因为NAT和防火墙都是基于五元组(或者session)进行操作和策略控制的,故很多厂商的设备都是按照「session」进行均衡转发,保证在相同五元组的情况下,从同一个接口转发出去。

针对问题2:

在多出口的情况下,每条链路的带宽不一定一致,在ECMP的基础上又出现了不对称的问题,站在管理员和用户角度肯定希望链路的带宽利用率尽可能高。故在该问题上,出现了基于权重选择和策略路由,在深信服AD上主要体现在链路负载的智能路由上,智能路由主要用于具有多条WAN口线路时,根据源/目的IP地址、链路选择策略等条件,设定基于某些策略的路由,以确定数据从哪个WAN口转发,实现智能选路功能,达到对多链路实现流量分隔,优化带宽的目的。

针对问题3:

在多运营商上,又会出现流量跨运营商的问题,跨运营商有很多问题出现,带宽流量的限制,路由跳数增加,网络延迟等等问题。特别是在现在CDN的场景下,肯定是希望电信走电信,移动走移动。为了实现这个功能,我们可以根据目的地址引入精确路由表,也就是所谓的运营商路由,这样可以满足需求,提升用户上网体验。在深信服AD中的智能路由中,可以设置运营商路由:

新增职能路由,实现电信走电信,移动走移动:

针对问题4:

当跨运营商问题解决了,相应的又会出现DNS解析问题导致报文负载不均衡。为什么会出现这个问题呢:

网络中一个数据包如果需要在网络上流动,那么就必须要对包做一定的封装和解封装,在路由交换的过程,源目IP的处理是最重要的过程,而访问某个资源对象的时候,必须知道对应的目的IP,而目的IP需要通过DNS解析返回的结果得到,从而发起对资源对象的访问,最终通过目的IP和端口到达目的地。而我们要捋清楚,现在很多的大型服务和资源对象都是分布式的多集群部署的,IP可能分布在不同运营商,特别像CDN加速的某些静态资源,不同运营商出口DNS解析的地址访问的速度其实是影响很明显的。

目前内网客户端中的DNS都是获取DHCP中绑定的bind转发服务器地址,客户端即可以得到内网域名解析记录,又可以得到公网解析记录,简单列出bind配置:

acl "trusted" { 127.0.0.1; 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16; localhost; }; options { directory "/var/cache/bind"; version "not currently available"; recursive-clients 10000; // max-cache-size 70%; // max-ncache-ttl 10; max-cache-ttl 600; recursion yes; allow-recursion { trusted; }; allow-query { trusted; }; allow-query-cache { trusted; }; listen-on port 53 { 172.17.40.188; 127.0.0.1; }; allow-transfer { none; }; // empty-zones-enable yes; forward only; forwarders { 192.168.2.1; // 深信服AD接口地址 // 223.5.5.5; // 223.6.6.6; }; send-cookie no; dnssec-validation no; auth-nxdomain no; listen-on-v6 { none; }; };

公网解析记录直接forwarders到深信服AD接口地址,深信服AD开启「DNS Proxy」功能,代理所有公网出口DNS查询流量。

下面所说的都是本地智能DNS,非全局智能DNS(异地多数据中心 多AD出口场景)。

在深信服DNS代理中,有个DNS代理优先级处理逻辑,DNS代理的优先级:

「内网DNS记录 > 会话保持 > 优先代理策略 > 普通调度」

深信服AD的DNS代理全局配置如下:

代理内网所有网段,也就是会劫持所有内网访问公网的域名解析,选择策略为优先级,始终选择权值最高的DNS服务器,只有在权值较高的DNS离线或繁忙时才会选择权值较低的DNS服务器,设置IPv4监听地址后,内网用户可以将DNS服务器设置为该监听地址,这里把bind公网转发监听设置为该值,而内网客户端的DNS服务器设置为bind两台转发服务器监听地址。启用优先代理策略,用于将特定用户的访问调度到指定的服务器上,这里解决「问题5」,解决访问海外链路选择指定的DNS。

在DNS列表中,WAN口启用了运营商链路DNS,设置电信DNS权值优先级最高,发现DNS解析CDN的结果永远是电信的CDN节点IP,而如果多链路把移动DNS优先级和电信DNS优先级设置为权值一致,深信服反馈是随机选择,但是我测试下来发现是权值一致谁在最上面就选择谁作为DNS解析,这个是通过不断测试和抓包确定的,故这里还是不够优化,阿里CDN反馈出口是什么运营商,一般节点就会返回对应运营商的节点IP,故最终还是DNS问题,最后根据阿里建议把WAN口的DNS都改为阿里公共DNS:「223.5.5.5和223.6.6.6」最终测试下来确定每次得到的都是对应运营商出口返回对应运营商IP节点。

实验测试验证: 分别设置电信出口和移动出口为阿里公共DNS:

随便打开网页,获取CDN节点IP,查找IP的运营商,浏览器打开开发者工具:

CDN节点的IP运营商:

在深信服AD中做路由测试,确定该CDN是通过电信出去,并得到电信CDN的节点IP:

测试发现命中会话保持,出口是电信。因为深信服AD是基于会话,智能路由是有会话保持的,这里默认设置了30分钟,因为刚刚在浏览器中请求了该地址,故会话还没失效,继续命中该会话,那我们现在删除会话保持,查询下是否可以命中策略,实现电信走电信:

不断反复上面的步骤并测试,可以确定设置阿里云公共DNS可以得到运营商出口对应的CDN节点IP,可能阿里云DNS对源IP做了规则匹配对应运营商CDN的节点IP,当然以上情况都是在特定的多出口多运营商场景下,如果你只有一条线路,那么也就不存在该问题,或者你的线路都是某一个运营商的场景下,就不需要考虑这么多。

针对问题5

海外链路(SD-WAN)一般都有自己优化的DNS或者使用海外公共DNS,如果内部存在这个问题,该如何解决呢?其实深信服AD的优先代理策略就可以做到,当然如果不启用深信服AD的DNS代理,通过bind也是可以做到的,直接通过view模块就能实现智能DNS解析,但是为了好管理和统一,而且配置链路负载均衡,故在我这个场景下链路负载和DNS代理都放在深信服AD中。

有两个海外链路加速(SD-WAN),DNS如下所示:

注意这些DNS的优先级必须低于你WAN口设置的DNS权值。

根据对应的DNS调度策略优先调度DNS,因为逻辑就是:

「内网DNS记录 > 会话保持 > 优先代理策略 > 普通调度」

而内网DNS是通过bind解决,会话保持禁用,故每次优先代理策略都忧于普通调度,也就是全局配置中的DNS列表。

可能有人会说,为什么不用国内公共DNS解析呢,这是因为海外链路的出口固定了,有些可能在不同国家,而DNS解析的好与坏都决定着资源访问的质量和延迟,而指定DNS是因为这些DNS要么是通过自己内部优化后的解析返回给你,要么就是国际公共DNS在某些国家出口解析最优。

以上都是通过测试得到的实际结论,如有不同意见,可以共同探讨。

结论

多出口和多运营商以及DNS都影响内部客户端客户端上网体验,如果遇到该场景,我们应该重视该问题并做出对应的优化。

关于更多bind搭建DNS问题或者其他问题可以查看往期文章或者知乎。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有