技术标签: 网络 缓存 F5 GTM DNS dns服务器
了解一个请求是如何发送到一个dns资源池中的,并且了解如何监控资源池中成员的健康状态
使用dns缓存对dns请求进行加速
使用dns express进行对dns请求进行加速
智能解析dns请求
加速解析(dns express,dns cache,load balance dns queries)
配置监听器
如下图,如果dns请求包目的地址为监听器(listener)ip,则进行域名解析,如果能匹配到wide-ip,则进行智能解析,否则检查是否在dns express 的区域文件中,如果匹配上,进行加速解析处理,否则进行dns缓存查询,如果匹配上,则进行加速解析处理,否则查看big-ip是否配置了dns解析能力,如果有,则主动进行解析,并记录到缓存,否则检查是否配置了dns负载均衡池,如果配置了,则将解析请求发送到其中一个成员,让其解析,并缓存解析结果,否则检查是否配置了本地bind能力,如果配置了则进行解析并缓存解析结果,如果没有配置,则检查目的地址是否不是自身接口ip(self ip),如果不是自身接口ip,则转发到具有相同ip的目标地址上。
监听器就是接收dns请求数据包的的地址和端口的结合,通常端口使用udp 53。你可以使用self ip作为监听ip,但是self ip一般用于iQuery和一些敏感的数据传输,所以在广域网,建议配置一个单独的ip用于监听,并且不要复用这个ip做其他事。
如果是高可用模式,你只想让其中一个big-ip进行响应,你可以将监听器(listener)配置在traffic-group-1中,如果你想两个系统都响应,你需要将监听器配置在traffic-group-local-only中。
如果你想将dns请求转发到其他dns上,你需要将监听器配置成和其他dns服务器一样的ip地址。并将profile的USE BIND SERVER on BIG-IP设置成disabled。
如果使用anycast模型,则可以将dns请求报文路由到最近的big-ip dns设备上,这种方案的优势是可以分散攻击流量,减小单个dns压力,同时提供高可用能力。但是如果需要使用anycast模型,需要使用big-ip的路由(routing)模块。
路径:DNS ›› Delivery : Listeners : Listener List ›› New…
注:source address translation和address translation使用场景下一环节用实验说明。
GUI:
路径:DNS ›› Delivery : Listeners : Listener List ›› New…
配置:
TMSH:
create gtm listener dns_50_listener address 10.10.10.50
域名负载均衡池的能力是将解析操作通过负载均衡算法分散到池中的成员上,让成员去解析dns请求。使用域名负载均衡池的优势,是可以根据请求数量,横向扩展dns设备的个数。可以将请求分发到多个dns服务器,同时可以使用监控手段确认后端dns服务器是可以工作的。
先建一个pool,里边包含可以处理dns请求的成员,并关联一个monitor,monitor可以监控pool中成员的健康状态,如果monitor请求失败,则这个成员将会从可用状态变为不可用状态,流量也将不会再发送给不可用设备。pool需要关联一个监听器,只有请求到这个监听器上的报文才会转发到pool的成员上,否则,成员将无法收到客户端发来的dns请求。
monitor在F5中有部分默认策略,例如tcp,icmp,http,除此之外还有很多可以自定义的监控方式,当我们新建一个monitor的时候,会发现F5还可以针对dns、mysql、pop3等协议进行监控。下边是dns的monitor示例,标蓝的是必填项,dns的monitor是通过向目标发送一个dns请求,并检验响应结果是否和预配置的ip一样,来判断目标是否健康。
DNS ›› Delivery : Load Balancing : Monitors ›› New Monitor…
DNS ›› Delivery : Load Balancing : Pools : Pool List ›› New Pool…
Overview of colored status icons in the Configuration utility (f5.com)
Status Indicator | Description |
---|---|
绿色圆圈 | 对象可用。 此图标表示 BIG-IP 系统为发往该对象的流量提供服务。 |
蓝色方块 | 该对象的可用性是未知的。 例如,当对象未配置服务检查、对象的 IP 地址配置错误或对象与网络断开连接时,可能会出现此状态。 |
黄色三角形 | 该对象当前不可用,但以后可能无需用户干预即可使用。 例如,已达到其配置的连接限制的对象可能会显示黄色状态,然后在连接数低于配置的限制时切换到绿色状态。 |
红色菱形 | 对象不可用。 此图标表示 BIG-IP 系统无法为发往该对象的流量提供服务。 例如,当一个节点因为它变得不可用而未能通过服务检查时,就会出现这种状态。 此状态需要用户干预才能将对象状态恢复为绿色。 |
黑色圆圈 | 用户主动禁用了(disabled)可用对象。 |
黑色菱形 | 用户主动禁用了(disabled)不可用的对象。 |
灰色图标 | 父对象已禁用该对象或该对象已启用但由于另一个禁用的对象而不可用。 |
黑色方形 | 对象的可用性未知并且对象被禁用。 |
常用的轮询(round robin),加权轮询(ratio),最小连接数(least connection)
GUI:
路径:DNS ›› Delivery : Load Balancing : Monitors ›› New Monitor…
配置:
TMSH:
create ltm monitor dns dns_monitor qname monitor.f5.com recv 1.2.3.4
路径:DNS ›› Delivery : Load Balancing : Pools : Pool List ›› New Pool…
配置:
TMSH:
create ltm pool dns_pool members add {172.16.20.3:53 172.16.20.4:53 172.16.20.5:53 } monitor dns_monitor
路径:DNS ›› Delivery : Listeners : Listener List ›› Properties : dns_50_listener
配置:
dig +short @10.10.10.50 s.f5.com
通过Statistics ›› Module Statistics : DNS : Delivery ›› Pools查看
TMSH:
show ltm pool dns_pool detail
通过测试应该看到请求被轮询到三个成员上。并且pool成员的状态应该都为健康(绿色),dns_pool的总请求时为三个成员请求总和。
这是第二种加速方式,有三种模式的缓存配置:
transparent cache
resolver cache
validating resolver cache
使用外部 DNS 解析器解析查询,然后缓存解析器的响应。 下次系统接收到缓存中存在的响应的查询时,系统会立即从缓存中读取并响应。
执行迭代 dns 解析 DNS 查询并缓存响应。下次系统接收到对缓存中存在的响应的查询时,系统会立即从缓存中读取并响应。
递归查询公共DNS服务器,验证发送响应的DNS服务器的身份,然后缓存响应。 下次系统收到对缓存中存在的响应的查询时,系统会从缓存中返回符合 DNSSEC 的响应。
默认使用resolver cache模式,它既可以充当本地dns发起请求,也可以基于缓存直接响应请求。
对于dns cache,你可以配置TTL的范围,当你配置了最大和最小ttl值的时候,他会检查dns解析结果中的ttl值,如果小于你配置的最小值,则会修改成为你配置的最小值,同样的,ttl如果超过配置的最大值,也会被修改为你配置的最大值。
配置路径:DNS ›› Settings : Caches
创建一个transparent DNS cache
GUI:
路径:DNS ›› Settings : Caches
配置:
TMSH:
modify ltm dns cache global-settings cache-maximum-ttl 300 cache-minimum-ttl 20
GUI:
路径:DNS ›› Caches : Cache List
配置:
TMSH:
create ltm dns cache transparent dns_transparent_cache
路径:DNS ›› Delivery : Profiles : DNS ›› New DNS Profile…
配置:
TMSH:
create ltm profile dns dns_cache_profile defaults-from dns enable-cache yes cache dns_transparent_cache
GUI:
路径:DNS ›› Delivery : Listeners : Listener List ›› Properties : dns_50_listener
配置:
TMSH:
modify gtm listener dns_50_listener profiles replace-all-with {dns_cache_profile }
先通过Statistics ›› Module Statistics : DNS : Delivery ›› Pools路径进入统计信息界面,勾选左侧复选框,点击reset将统计数据清空。在通过dig +short @10.10.10.50 www.f5.com进行请求,第一次请求会发现数据包转发到一个后端,但是之后多次请求就没有转发到后端。
同时,我们在观察一下flag位,会发现,第一次请求结果是flags: qr aa rd ra,之后的请求为 flags: qr rd ra,没有了aa(flag含义详见下),因为之后几次的请求都不是权威解析,而是缓存解析出来的。我们再观察一下TTL,会发现第一次是11,是我们在bind9 中配置的数值,但是第二次请求响应TTL是19,这个数值是我们在全局cache设置中cache-minimum-ttl减1秒的数值,之后这个TTL值会每秒减1,直到为0,从缓存中消失。
我们继续观察,通过路径Statistics ›› Module Statistics : DNS : Caches ›› Caches进行查看,会发现我们请求了三次,但是值响应了两次,是因为第一次缓存没有命中,所以使用负载均衡池的成员去解析,也就是外部dns解析能力,外部dns解析之后,结果配缓存下来,之后的两次就直接响应而不再需要外部dns的帮助。
如果我们想看缓存的信息或者删除单个缓存记录,我们需要使用tmsh命令。通过查询命令我们可以看到TTL值在递减。
show ltm dns cache records rrset cache dns_transparent_cache #查看
delete ltm dns cache records rrset cache dns_transparent_cache owner www.f5.com #删除
I am using RFC 1035 as source, keeping to the sequence from there, regardless if you already mentioned it in your question.
- QR specifies whether this message is a query (0), or a response (1)
- OPCODE A four bit field, only valid values: 0,1,2
- AA Authoritative Answer
- TC TrunCation (truncated due to length greater than that permitted on the transmission channel)
- RD Recursion Desired
- RA Recursion Available
- Z Reserved for future use. Must be zero
There were two more DNSSEC-related flags introduced in RFC 4035:
- CD (Checking Disabled): indicates a security-aware resolver should disable signature validation (that is, not check DNSSEC records)
- AD (Authentic Data): indicates the resolver believes the responses to be authentic - that is, validated by DNSSEC
第三种加速技术叫做DNS express,配置了DNS Express之后,BIGIP 将作为辅助DNS服务器,他会同步主dns 服务器中zone数据并放入内存中,这时,BIGIP dns系统将直接响应请求。响应速度可以高达125000次解析每秒每个cpu。DNS Express可以缓解ddos的攻击,减小后端dns server的压力。如果使用DNS Express技术,可以使用TSIG(transaction signatures)来确认是否从主dns上同步成功。
当创建一个DNS Express 服务时候,bip-ip 系统将会从权威dns服务上同步相对应的zone file,并将zone数据载入系统内存,后续请求将会直接通过DNS Express进行解析,而不需要主dns。如下两个图所示
F5成功从主权威dns server同步解析数据
当用户发起访问,F5直接从内存上进行解析,而不需要访问主权威dns服务器,从而提高了响应速度。
BIG-IP DNS 系统:
主dns:
BIG-IP配置
主DNS 服务器
方法 | 命令 |
---|---|
dnsxdump | dnsxdump > /shared/tmp /myzone.txt |
GUI | statistics->modules statistics:DNS |
TMSH | tmsh show /ltm dns zone [] |
GUI
路径:DNS ›› Delivery : Nameservers : Nameserver List ›› New Nameserver…
配置:
TMSH:
create ltm dns nameserver f5_nameserver address 172.16.20.3
GUI
路径:DNS ›› Zones : Zones : Zone List ›› New Zone…
配置:
TMSH:
create ltm dns zone f5.com dns-express-server f5_nameserver
首先先清除dns_pool 和dns_transparent_cache的统计,但不要清除dns cache数据。确保缓存中还有一个A记录。
使用dig +short @10.10.10.50 www.f5.com解析,我们能够正常解析出结果,并且flags: qr aa rd显示为权威解析结果,多次请求后,发现TTL值并未变化,一直是11,表明这不是同cache中解析出来的。通过Statistics ›› Module Statistics : DNS : Zones ›› Zones查看统计,发现请求的五次均被记录到DNS Express中。TMSH:show ltm dns zone f5.com
dns_pool 和dns_transparent_cache的统计数据都为0,当我们请求一个其他域名的时候,比如s.f5test.com,请求会先发送到pool的成员进行解析,等解析之后会被缓存在big-ip的cache中,因为nameserver没有配置f5test.com。
使用dnsxdump查看数据。如下:
如果不想使用DNS Express功能,需要将对应的profile中的DNS Express配置成disabled。
Wide ip是做智能dns的要素,是配置智能dns的第一位的要素。Wide ip将匹配到的FQDN绑定到一个或者多个虚拟服务上,当一个LDNS将解析请求发送到一个Wide ip上时,wide ip将会检测哪个虚拟池有资格响应这个请求,并配合负载算法进行选择虚拟池。
配置了wide ip 的解析,是权威的解析,同时ttl是被配置为0。如果没有匹配到wide ip,则会进行dns express、dns cache等匹配。
本节主要表达的是Wide IP比DNS Express和DNS cache优先级高,Wide IP负载算法及解析规则后边详细说明。
GUI
路径:DNS ›› GSLB : iRules ›› New iRule…
配置:
when DNS_REQUEST {
host 172.16.16.16
}
GUI
路径:DNS ›› GSLB : Wide IPs : Wide IP List ›› New…
配置:
TMSH:
create gtm wideip a www.f5.com rules { simple_resolution_irule }
通过dig @10.10.10.50 www.f5.com命令,我们看到会先的解析结果为172.16.16.16,权威解析,同时ttl为0,这个解析符合预期。在之后的配置中,我们通过负载算法功能还能根据地理位置或者解析地址的性能来动态改变解析结果。
我们通过Statistics ›› Module Statistics : DNS : GSLB能查看统计信息,会发现这个请求并没有被dns cache或者dns express处理,而是统统被wide ip处理了。
我们再使用 dig @10.10.10.50 s.f5.com发起请求,会发现它使用dns express,他的解析记录是权威的,而dig @10.10.10.50 s.f5test.com则使用了dns cache进行解析,他的解析是非权威的,且TTL值在递减。
在linux CLI模式下,使用cat进行查看,会发现GSLB(wide ip)的配置存在了bigip_gtm.conf文件中,而DNS Express zone和cache等配置存在了bigip.conf中。
这个实验通过一个irule做一个有限制wide ip,目的是表明wide ip优先级比加速dns和智能dns高。
如果没有匹配到wide ip,也没有匹配到dns express,也没有匹配到dns cache,也没有匹配到负载均衡池,你还可以使用F5自带的BIND,但是官方不推荐将请求发送到bip-ip的BIND实例上,如果非要用,也建议将BIND作为隐藏主dns,搭配DNS Express使用。
如果想使用本地BIND,配置在监听器上的dns profile需要开启USER BIND Server in BIG-IP,默认开启。
你可以使用ZoneRunner去创建和管理dns zone file,也可以配置BIND 实例,ZoneRunner是一个F5开发的用于配置BIND的管理工具。ZoneRunner具体使用方式不做介绍。只介绍如何创建BIND 实例。
除了本地BIND,还可以搭配使用微软的dns或者其他厂商的dns服务。
如果没有匹配到wide ip,也没有匹配到dns express,也没有匹配到dns cache,也没有匹配到负载均衡池,并且关闭了USER BIND Server in BIG-IP,同时远端的其他dns服务器的ip和监听器的ip是一样的,并且还要有去往目的服务器的路由,则可以将请求转发到其他dns服务器上进行解析,再由其他dns服务器直接回应客户端,形成一个三角模式,而不通过F5进行响应。如图。
使用远端dns服务器的优势在于可平缓且稳进的将旧的dns服务迁移到big-ip dns上,旧的dns服务器不需要做啥配置,只需要将big-ip dns放置旧的dns服务器前边。但是缺点是dns回包是不经过big-ip dns的,所以不能使用缓存技术和DNSSEC的签名技术。
在使用相同ip的时候,需要防止在同一个网络中出现ip重复的问题,如果出现arp冲突,那样只能导致请求时断时续,你需要将流量先引导到big-ip dns而不是旧的dns服务器上。
GUI
路径:DNS ›› Delivery : Profiles : DNS ›› New DNS Profile…
配置:
TMSH
create ltm profile dns dns_nobind_profile defaults-from dns use-local-bind no
GUI
路径:
配置:
TMSH
create gtm listener dns_forwarding_listener address 172.16.20.3 profiles add { dns_nobind_profile }
需要在big-ip上添加路由信息,如 route add 172.16.20.3 mask 255.255.0.0 10.10.a.3
测试:
由于测试环境所限,没法做这个实验。但是实验预期应该是,源目地址均没有被转换,发送到旧的dns上,通过tcpdump抓包应该是和bip-ip上抓的包一样。在F5统计页面上,应该看不到任何关于wide ip,dns express,dns cache和负载相关的增加。
文章浏览阅读3.5k次。caffe编译成功后,在导入测试的时候,出现以下错误.在命令行输入:import caffe回车。出现以下错误.Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/li.guangyao/Programming/caffe/python/caf...__zn5boost6python6detail11init_moduleer11pymoduledefpfvve
文章浏览阅读6.8k次,点赞5次,收藏22次。5-9 声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号)、书价,并拥有静态数据成员册数、记录图书的册数,在构造方法中利用此静态变量为对象的编号赋值,在主方法中定义对象数组,并求出总册数。class Book{ private String name; private int id; private float price; private stat_java书本数量
文章浏览阅读3.2k次,点赞2次,收藏10次。WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla基金会、Opera支持下被包括进万维网联盟的W3C推荐标准。_webrtc可以与摄像头对讲吗
文章浏览阅读2k次。matlab多元与非线性回归即拟合问题regressnlinfit 回归(拟合)自己的总结(20100728) 1:学三条命令:polyfit(x,y,n)---拟合成一元幂函数(一元多次) regress(y,x)----可以多元, nlinfit(x,y,’fun’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最主,最万能的) 2:同一个问题,可能这三条命令都可以使用,但结果肯..._matlab双曲线拟合
文章浏览阅读511次。EOS采用DPoS算法和块内分片技术,实现了百万级别TPS的超高性能,可以媲美中心化服务器的处理能力,同时保持去中心化的属性,成为了区块链3.0的代表。那么为什么EOS有如此出色的性能表现?本文将从EOS的核心设计原理以及主要数据结构进行分析。EOS VS Bitcoin我们知道,比特币采用POW共识算法确认区块:1)Bob向Alice发出一笔转账消息;2)客户端将消息广播给所有矿..._eos代码架构及分析 fly_鹏程万里
文章浏览阅读747次。其中在定义嵌套结构体时需提前定义基础结构体。_c#调用c 的dll
文章浏览阅读2.7k次。文章目录一、安装qemu二、安装arm工具链三、下载编译内核四、制作根文件系统五、qemu 运行1、直接启动kernel2、通过uboot启动内核2.1 配置QEMU Tap网络2.2 安装配置tftp2.3 编译uImage2.4 编写启动脚本boot.sh3. 挂载 NFS 文件系统六、qemu 模拟机连接外网七、其他1、制作多分区镜像2、运行qemu一、安装qemu1、下载编译安装# wget https://download.qemu.org/qemu-4.2.0.tar.xz# tar x_qemu-system-arm
文章浏览阅读1w次,点赞79次,收藏171次。在Unity项目中,我们可能需要实现3D角色表情的过渡切换,本文介绍了通过BlendShape来实现表情过渡切换的功能。_blendshape
文章浏览阅读4k次,点赞2次,收藏4次。前端需要跨域携带cookie_前端请求携带cookie
文章浏览阅读741次,点赞21次,收藏18次。00 0000----192.168.1.128/26-----R1环回。10 0000----192.168.1.160/27-----L1环回。00 0000------192.168.1.192/26---R2环回。3、配置缺省路由,实现3.3.3.0/24互通,至此实现全网通,并测试。0 0000-----192.168.1.128/27----L0环回。2、配置RIP协议,宣告网段,除了3.3.3.0/24环回,,并测试。5、接口汇总,并防环,减少路由条目,测试,实现全网通。
文章浏览阅读1.5k次,点赞6次,收藏4次。1、plt.plot和plt.scatter的返回值不一样当对plt.scatter进行画动态gif图时,需要使用.findobj()比如im = plt.scatter(nix, niy, marker = "*",color = "b").findobj()ims.append(im)ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000) ani.save("test.gif", writer_not enough image data
文章浏览阅读1.3k次,点赞52次,收藏46次。欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 欢迎订阅本专栏 。_python批量打开网址