首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维老鸟阐述:沪江从DNS到httpdns的演进

运维老鸟阐述:沪江从DNS到httpdns的演进

作者头像
IT大咖说
发布2018-04-03 14:21:44
4.2K1
发布2018-04-03 14:21:44
举报
文章被收录于专栏:IT大咖说IT大咖说
摘要

HttpDNS服务是一款可以有效解决域名劫持的方案,并且已在各家大厂广泛应用,现已成为一款相当成熟的产品,本次分享主要围绕沪江由DNS到HTTPDNS演进进行,希望能够给大家带来一些启发。

嘉宾演讲视频及PPT回顾:http://suo.im/1Sn8cr

DNS的简介

DNS的全称是Domain Name System,它的目的就是将一个域名解析到一个IP。基础的DNS会用到TCP/UDP协议的53号端口,默认的是UDP协议,如果对服务质量要求比较高的话建议使用TCP。

Why We Need DNS?

在TCP的IP协议中约定,主机之间通信必须通过IP。但是IP地址难以记忆,所以一般都是通过域名来访问网站。且由于程序在对域名进行调用的时候不能去写死IP,所以要使用FQDN的方式。

名词解释

以mail.cctv.com为例,它的顶级域名是.com,二级域名是cctv,三级域名是mail同时也是cctv的子域。最后根域名就是“ . ”了,但是一般不会写出来。

权威DNS也就是通常来说的“说了算”服务器,是用来告诉用户域名具体解析到哪个IP地址;缓存DNS主要是把用户请求解析的域名结果缓存在自己这边,以减轻权威DNS的工作负载;递归DNS-LocalDNS一般在运营商侧使用的较多,用来接收用户的递归查询然后自己进行迭代查询;转发DNS类似于递归DNS,它会先查看自己DNS内有没有权威记录,如果查询到的话直接返回给用户,否则就递归出去抛给其他DNS;公共DNS也是httpdns的一个基础,一些常见的公共DNS:百度:180.76.76.76,阿里:223.5.5.5/233.6.6.6,腾讯:119.29.29.29。

递归查询示意图(给我答案):A->B,B->C,C->D,D->C->B->A;迭代查询示意图(给我答案,或者提示):A->B,A->C,A->D,D->A。

How DNS Works?

用户在访问http://mail.cctv.com/时,DNS的工作流程:

用户发起域名解析请求,该请求会直接抛给递归DNS,接着递归DNS向根域NS发起迭代查询,然后根域会返回com域的NS,递归DNS接收后又会向com域NS发起迭代查询,com域NS查询后返回了cctv.com的NS,最后递归DNS向cctv.com域NS发起迭代查询获得最后的结果,也就是mail.cctv.com。

在用户端有缓存DNS的情况下,上面的过程会被省略直接返回结果。

Httpdns简介

HTTPDNS是通过DNS之上建立的一个服务,同样是将域名解析为IP。不同的是HTTPDNS使用的是HTTP/HTTPS协议的80/443端口。

Why We Need HTTPDNS?

HTTPDNS可以填补运营商LocalDNS的坑,比如域名劫持、访问缓慢、解析转发等。

How HTTPDNS Works?

减少公司运营的复杂度,提高资源利用率。Kubernetes在IT领域内最为常用,人才储备越来越多。社区响应用户需求度快。

当HTTPDNS无法使用的时候,会切换到备用线路,采用正常的LocalDNS去获取。

HTTPDNS通过递归DNS获取到的是用户IP地址,而ISP运营商获取到的是LocalDNS地址,定位易出现偏差。

How We Use HTTPDNS

对于HTTPDNS集群接口服务有条件的话建议使用BGP Anycast,它可以帮助用户获取到最近的HTTPDNS服务器。 也可以自定义公共接口IP地址。

采用主/备/备调用方式,当一个HTTPDNS无法使用了就调用下一个,当所有HTTPDNS都无法使用后切换到正常的LocalDNS方式。另外还有一种IP列表方式,在程序的SDK内对多个HTTPDNS进行ping的请求,延迟最低的节点优先请求。

查询方式有HTTP和HTTPS两种,HTTPS可以防止内容劫持。

使用IP地址对HTTPDNS发起请求的话,hostname是查询不到的。这就需要在Requst Header中添加host,指定需要的hostname。

沪江的DNS演进

原始社会:HOSTS

最早是使用HOSTS方式进行域名解析,HOSTS文件在Windows上被存储在C:\Windows\System32\dirvers\etc\hosts,而Linux上则是在/etc/hosts。HOSTS的优点在于简单、粗暴、隐蔽,缺点则更明显,存在文件大、传输慢、耗贷款、一致性等问题。

奴隶社会:Microsoft DNS

Microsoft DNS的优点是简单易用,但也有着黑盒、扩展性、并发数、安全性、集中配管能力较差、主从同步不稳定等问题。

封建社会:BIND

在抛弃了Microsoft DNS后,我们使用了BIND这款开源DNS软件,它算是迄今为止普及最广的DNS实现。沪江使用BIND分为两个阶段:阶段一为部署BIND服务,阶段二为BIND分布式集群优化改造。

在部署阶段我们有三条线路,用户发起DNS请求时会对这三个DNS发起DNS轮询的请求。这样基本满足了用户需要,但是也存在很多问题。首先就是权威DNS开启了递归和转发,这会使得DNS服务器的压力增大。然后修改记录全靠手工、没有区域解析功能且权威DNS均是单点。最后内外网未分离,权威DNS充当缓存DNS。

在集群式优化改造阶段我们在每个机房配备了两台权威DNS做HA高可用,然后缓存DNS另外进行部署,各个内网的服务器对缓存DNS进行查询,减轻权威DNS负载压力,还进行了权威DNS的读写分离。

各个DNS节点的优势

权威DNS起到了开启日志轮转、智能解析作用。

权威DNS master端优化点:权威DNS关闭了递归及转发,使用key+nsupdate的方式做记录的变更,动态更新解析记录。

权威DNS slave端优化点:加入了interface-interval1,用于pacemaker集群的vip漂移探测,主从同步不一致时,单独修改各slave记录。

缓存DNS分离:限定允许请求范围--内网,开启递归。后台逻辑管理层

资本主义社会:HTTPDNS

沪江向HTTPDNS发展主要进行了两项工作,第一项是对HTTPDNS接口服务的选型,在自制的HTTPDNS服务和第三方的服务之间进行选择。在选择了接口服务后就必须对移动端SDK进行改造,这就是第二项工作。

DNS的坑

DNS解析时间长

主要原因在于DNS开启了递归、转发服务,未做分布式以及读写分离,单ISP线路部署。

DNS安全问题

常见的DNS攻击手段有DNS query flood、udp flood、折射攻击、放大攻击。

对此应对策略分别是针对大流量攻击购买三方服务进行抵抗,增加DNS公网带宽,权威DNS设置白名单策略,DNS限速策略,提高DNS并发性能。

DNS解析调整后,客户端未生效

一些依赖于java/.net/python等框架的客户端应用程序,如salt-minion,在DNS解析调整后,无法立即刷新生效。

其原因就在于程序未触发客户端DNS解析器glibc的res_init()模块工作,其使用的python scoket.getaddrinfo只在程序第一次启动时调用res_init(),读取/etc/resolv.conf内容。

解决方法就是重启客户端程序,强制触发客服端DNS解析器工作。或者客户端程序直接使用底层的域名解析函数,而非第三方框架提供。

DNS区域解析不准确

这个可能是由于LocalDNS解析转发或者权威DNS IP地址库出现问题。

DNS注册商处写错NS记录

这时候就需要立即将域名注册商处的glue records值改为正确的值,或者请求域名注册商单独刷新影响域名的glue records记录。

DNS污染

这个问题无需多说,请使用HTTPDNS!

今天的分享就到这里,有什么问题可以在评论区讨论,喜欢本次分享请点赞。谢谢大家!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
移动解析 HTTPDNS
移动解析 HTTPDNS 基于 HTTP 协议向腾讯云的 DNS 服务器发送域名解析请求,替代了基于 DNS 协议向运营商 Local DNS 发起解析请求的传统方式,可以避免 Local DNS 造成的域名劫持和跨网访问问题,解决移动互联网服务中域名解析异常带来的困扰。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档