β

关于httpdns

PHPor 的Blog 706 阅读

概要

httpdns就是通过http的方式进行域名解析;阿里云有提供httpdns服务(目前2016-4-9 还处于公测阶段,需要申请公测资格才能用)。

传统dns解析存在的问题:

  1. 由于传统dns解析采用udp方式,而且是明文,所以
    1. 可能会被篡改
    2. 可能会被投毒(什么叫“投毒”?且看下文)

httpdns的实现原理:

  1. 通过http的方式进行域名解析,如:
    curl http://203.107.1.1/100000/d?host=www.aliyun.com
    {"host":"www.aliyun.com","ips":["140.205.63.8"],"ttl":274}
  2. 通过设置http host header的方式发起http请求,如:
    curl -H"Host: www.aliyun.com"  http://140.205.115.67/

问题:

  1. httpdns server的域名如何解析?
    httpdns server 不通过域名提供服务,(只能)直接通过一个固定IP提供服务;服务提供商有足够的手段让这个IP不会出现宕机,而且世界各地(或者是全国各地)访问都能很快(就近访问),这个IP在世界上存在多份。
  2. 如何保证连接的这个ip是没被劫持呢?
    1. 或许可以给这个IP买个https证书,https证书提供商是可以给IP颁发证书的(比较少见),不过可能贵的多

优点:(参考文档: https://www.aliyun.com/product/httpdns?spm=5176.7960203.223922.4.2JohAO

  1. 防劫持
  2. 避免dns服务商莫名其妙的cache,可以做到立即修改理解生效
  3. 精准调度
    对于地址:
    http://203.107.1.1/100000/d?host=www.aliyun.com&ip=111.111.11.111
    其中:
    00是你的账户ID,host参数是你要解析的域名,ip参数是你的来源IP(用来做精准调度的);
    你可以在你的账户中设置允许解析的域名,以及要解析到的地址,甚至可以根据来源IP解析到不同的IP,
    做到精准调度

问题:

  1. https请求问题及解决方案: https://help.aliyun.com/document_detail/httpdns/practice/https.html?spm=5176.7947101.220063.5.9DtXGS
    1. 这里回避了单个IP上多个https证书的问题,或许也可以通过钩子解决,但是不一定存在这样的钩子; ssl握手的时候,必须告知正确的host信息,否则,服务器无法知道该返回哪个证书,而不仅仅是验证证书的问题
  2. httpdns只适用于app、client的情况,对于web浏览器是不行的,还好现在大家都是在玩app了;
  3. 对于app里面适用webview的情况需要特殊处理一下: https://help.aliyun.com/document_detail/httpdns/practice/webview.html?spm=5176.dochttpdns/user-guide/resolve-stats.6.127.VFTz3N
  4. 对于通过react native来开发app的情况不知道是否方便使用

dns投毒:

因为域名解析是udp的,只要我已dns server的ip不断地向你的机器发送域名解析结果响应的话,你可能就会认为确实是dns server响应的结果;当然,有几个关键点需要注意:

  1. 用户确实需要解析某域名(一般来讲,解析完了会cache一段时间的)
  2. 伪造的响应里面是需要包含用户正在查询的域名的,域名不匹配自然不会被接受
  3. 用户发起请求的端口号(2字节)是随机的,响应的数据包需要能匹配上这个端口,否则不会被接受
  4. 用户发起的请求有一个随机的请求标识(2字节),响应的数据包需要能匹配上这个请求标识,否则不会被接受
  5. 我咋感觉这个难度其实并不算小啊,除非你是个中间人

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/

The post 关于httpdns appeared first on PHPor 的Blog .

作者:PHPor 的Blog
PHP+Mysql+Apache+Linux
原文地址:关于httpdns, 感谢原作者分享。

发表评论