两张图片告诉你为什么域名会被解析到65.49.2.178
2014年1月21日中国出现重大网络事故,大量域名被解析到一个65.49.2.178 这个IP了。
中国的一家DNS服务商DNSPOD于 2014 年 1 月 21 日 16:18 说:
2014年1月21日下午15:10左右,DNSPod发现国内所有通用顶级域的根出现异常,技术人员已联系相关机构协调处理。目前根已恢复正常,但是后续还会存在以下问题: 根虽已恢复,但还有返回错误IP地址,因为各地有缓存,所以部分地区可能会持续12小时。
正常的域名解析应该是这样的:
域名解析四步:
第一步先是找到最近的根域名,返回 f.root-servers.net. 这样的结果
第二步根域名返回gTLD地址,返回 a.gtld-servers.net. 这样的结果
第三步gTLD返回name server地址和IP,返回 ns1.dreamhost.com. 这样的结果
第四步name server返回域名的真实IP,返回 69.163.141.215 这样的结果
而事故发生时dig +trace 却不是上面四个步骤,如下图
上图来自知乎
上图中gTLD地址和name server地址都没有返回,看上去是通用顶级域的根出现问题了,所用延时极短就直接返回65.49.2.178这个假IP,这张图显示只用了27毫秒。
本来有四步才能得到答案,结果有人插嘴就得到答案了,省掉了两步,这就是DNS劫持造成的。就好比你在广州放只鸽子去北京,本来要路过长沙和郑州,来回要4天,结果鸽子只用了一天就回来了,它没有郑州和北京,只去了长沙。
结论是,机房有设备干扰了DNS查询过程,是一个DNS污染事故,是尝试在机房的GFW审查设备做网络封锁时无意中犯下的过错,可能是封锁IP时操作成封锁所有域名了。
附: 65.49.2.178 这个IP所在的IP段是 Dynamic Internet Technology公司的Anonymous Proxy的IP : http://bgp.he.net/net/65.49.2.0/24#_dns
如果你对任播这种一个IP对应多个服务器的技术细节不会头大,欢迎访问外国网站去http://www.zhoushuguang.com/2014/01/nslookup.html 查看详细分析。
PS:
国内的科技媒体上说“根服务器只有13台,亚洲唯一的一台在日本”,这样的说法过时了,亚洲有26台根服务器啦,F-Root有14台,I-Root有9台,K-Root有3台 http://www.apnic.net/community/support/root-servers/root-server-ma
全球有386台根服务器,被编号为A到M共13个标号。中国北京有两台编号为F的根服务器镜像,编号为I、J、L的各一,共5台镜像,在中国香港有A、F、I、J、L五台根服务器镜像,全部借由任播(Anycast)技术,所有编号相同的根服务器都是同一个IP,386台根服务器总共只使用了13个IP. 详情见 http://www.root-servers.org
[原文发表在 http://www.zhoushuguang.com/2014/01/nslookup.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?
- 阅读大型开源软件的四个技巧
- Tomcat NIO(7)-Poller
- python 求解线性规划问题
- Netty高性能之道
- 关于im-live-sells自定义群组字段的使用
- 浅谈CAP与Kafka
- windows下查看进程(进阶)
- Salesforce LWC学习(二十二) 简单知识总结篇二
- 初识Netty
- SpringCloud微服务项目实战 - 缓存详解及高效缓存接入
- Vue + Flask 实战开发系列(十)
- 【CS学习笔记】17、登录验证的难点
- CS学习笔记 | 18、密码哈希散列设置信任
- CS学习笔记 | 19、代码执行的方式