概要
httpdns就是通过http的方式进行域名解析;阿里云有提供httpdns服务(目前2016-4-9 还处于公测阶段,需要申请公测资格才能用)。
传统dns解析存在的问题:
- 由于传统dns解析采用udp方式,而且是明文,所以
- 可能会被篡改
- 可能会被投毒(什么叫“投毒”?且看下文)
httpdns的实现原理:
- 通过http的方式进行域名解析,如:
12curl http://203.107.1.1/100000/d?host=www.aliyun.com{"host":"www.aliyun.com","ips":["140.205.63.8"],"ttl":274} - 通过设置http host header的方式发起http请求,如:
1curl -H"Host: www.aliyun.com" http://140.205.115.67/
问题:
- httpdns server的域名如何解析?
httpdns server 不通过域名提供服务,(只能)直接通过一个固定IP提供服务;服务提供商有足够的手段让这个IP不会出现宕机,而且世界各地(或者是全国各地)访问都能很快(就近访问),这个IP在世界上存在多份。 - 如何保证连接的这个ip是没被劫持呢?
- 或许可以给这个IP买个https证书,https证书提供商是可以给IP颁发证书的(比较少见),不过可能贵的多
优点:(参考文档: https://www.aliyun.com/product/httpdns?spm=5176.7960203.223922.4.2JohAO)
- 防劫持
- 避免dns服务商莫名其妙的cache,可以做到立即修改理解生效
- 精准调度
123456对于地址:http://203.107.1.1/100000/d?host=www.aliyun.com&ip=111.111.11.111其中:100000是你的账户ID,host参数是你要解析的域名,ip参数是你的来源IP(用来做精准调度的);你可以在你的账户中设置允许解析的域名,以及要解析到的地址,甚至可以根据来源IP解析到不同的IP,做到精准调度
问题:
- https请求问题及解决方案: https://help.aliyun.com/document_detail/httpdns/practice/https.html?spm=5176.7947101.220063.5.9DtXGS
- 这里回避了单个IP上多个https证书的问题,或许也可以通过钩子解决,但是不一定存在这样的钩子; ssl握手的时候,必须告知正确的host信息,否则,服务器无法知道该返回哪个证书,而不仅仅是验证证书的问题
- httpdns只适用于app、client的情况,对于web浏览器是不行的,还好现在大家都是在玩app了;
- 对于app里面适用webview的情况需要特殊处理一下:https://help.aliyun.com/document_detail/httpdns/practice/webview.html?spm=5176.dochttpdns/user-guide/resolve-stats.6.127.VFTz3N;
- 对于通过react native来开发app的情况不知道是否方便使用
dns投毒:
因为域名解析是udp的,只要我已dns server的ip不断地向你的机器发送域名解析结果响应的话,你可能就会认为确实是dns server响应的结果;当然,有几个关键点需要注意:
- 用户确实需要解析某域名(一般来讲,解析完了会cache一段时间的)
- 伪造的响应里面是需要包含用户正在查询的域名的,域名不匹配自然不会被接受
- 用户发起请求的端口号(2字节)是随机的,响应的数据包需要能匹配上这个端口,否则不会被接受
- 用户发起的请求有一个随机的请求标识(2字节),响应的数据包需要能匹配上这个请求标识,否则不会被接受
- 我咋感觉这个难度其实并不算小啊,除非你是个中间人
httpdns示例:
更多参考:
全局精确流量调度新思路-HttpDNS服务详解: http://www.zmke.com/i/8705.html
渗透测试:内网DNS投毒技术劫持会话:http://www.freebuf.com/articles/web/43157.html
http://www.onedns.net/ 需要特殊的dns客户端
加密的dns: https://www.opendns.com/about/innovations/dnscrypt/ 需要特殊的dns客户端
wireshark分析dns协议: http://blog.csdn.net/hunanchenxingyu/article/details/21488291
dns协议格式: http://cjhust.blog.163.com/blog/static/1758271572014111875652363/