Overview
域名系统(DNS)是一种用于 TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。
通常情况下,我们是先设定DNS解析规则,然后ISP(供应商)依据指定的解析规则进行DNS解析。同样,我们通过测试解析结果,也可以反推DNS解析规则。本文以百度首页为例,分析其DNS解析规则。
DNS地址解析器的核心功能能
- gethostbyname 主机名–>ip
- gethostbyaddr ip–主机名
分析方式一:
通过抓包,分析DNS查询和响应报文。每个响应报文对应一条DNS解析规则,通过一条或者多条记录才能完成DNS解析。
分析方式二:
一堆命令,见参考博客。
参考 https://aslibra.com/blog/post/use_dig_dns_check.php
通过dig命令理解DNS
dig挖出DNS的秘密
百度DNS解析规则
编号 | 主机记录 | 记录类型 | 解析线路(isp) | 记录值 | TTL值(不定) | 备注 | |
---|---|---|---|---|---|---|---|
1 | www.baidu.com | CNAME | – | www.a.shifen.com | 268 | ||
2 | www.a.shifen.com | CNAME | – | www.wshifen.com | 271 | ||
3 | www.wshifen.com | A | 新加坡 百度 | 45.113.192.101 | 160 | “1-2-[3 | 4]” |
4 | www.wshifen.com | A | 北京电信 | 220.181.111.188 | 160 | ||
wshifen.com | NS | – | ns1.wshifen.com | 163 | 很多name server | ||
baidu.com | A | 北京移动 | 111.13.101.208 | 见解析方式二 | |||
baidu.com | A | 北京联通… | 123.125.114.144 | ||||
baidu.com | SOA | – | dns.baidu.com | 900 | 见解析方式四 | ||
baidu.com | NS | – | ns1.baidu.com | ||||
baidu.com | NS | – | ns2.baidu.com | ||||
dns.baidu.com | A | 202.108.22.220 | 67498 | 这里只有一个A记录吗?为什么TTL这么高? | |||
ns1.baidu.com | A | 202.108.22.220 | 27780 | 为什么和上个记录同IP? | |||
ns2.baidu.com | A | 61.135.165.235 | 86400 | ||||
shifen.com. | NS | ns1.baidu.com | |||||
shifen.com. | A | 202.108.250.218 | |||||
shifen.com | SOA | dns.shifen.com | dig shifen.com soa | ||||
dns.shifen.com | A | 202.108.250.228 | dig dns.shifen.com | ||||
a.shifen.com | NS | – | ns1.a.shifen.com | 397 | 见解析方式五 | ||
ns1.a.shifen.com | A | 61.135.165.224 | 600 |
注:所有解析路线由ip.cn提供。
www.wshifen.com 没有NS记录,没有SOA记录。dig www.wshifen.com ns
。没有answer,即没有ns记录dig wshifen.com ns
,有answer
解析方式一: 1–>2 (www.baidu.com,查询类型A,即查询IPv4地址)
1 | # 一会功夫变成102了 |
解析方式二:9 (baidu.com,查询类型A)
1 | # 这种域名一般情况下是不能做cname解析的,只能用A记录 |
解析方式三: 1–>5–>8 (www.baidu.com,查询类型AAAA,即查询IPv6地址)
请求路线:
- www.baidu.com 未找到AAAA记录,走CNAME记录1
- www.a.shifen.com 未找到AAAA记录,走CNAME记录5
- www.wshifen.com 找到NS记录,返回
抓包内容
1 | # 目前使用IPv6的还是极少数,所以得不到AAAA记录的。 |
dig 内容
1 | $ dig www.baidu.com AAAA |
解析方式四:11 (baidu.com,查询类型AAAA)
1 | Domain Name System (response) |
1 | $ dig baidu.com AAAA |
解析方式五: 12 (www.a.shifen.com,查询类型AAAA)
1 | $ dig www.a.shifen.com AAAA |
疑问 & 剖析
编号1中,别名www.a.shifen.com的作用
觉得没啥用啊。看看网上的说法:
- 使用CNAME有个好处就是,我IP地址去做改动的时候不需要去DNS运营商上面做改动,只需要自己的服务器做改动就好,方便自己的域名与实际IP地址做对应。 –觉得没什么道理啊
- 百度弄的一个域名保护壳。?
- CDN加速节点?
逆向思维吧。如果没什么用,为什么要保留呢?是不是还有点作用?
编号2,3中,多条A记录的作用
- 可用于多线智能解析,为了每条线路(电信、联通/网通、移动等)上的用户都能最快访问站点
- 可用于简单的负载均衡(dns轮询)
- 可HA(高可用)
关于返回主机(IP)的策略
考虑的因素有:
- 智能解析线路 用户所在网络的网络运行商类型、区域
- 距离–跳数
当我一个IP到DNS上面请求DNS域名解析的时候,DNS系统会根据你的IP地址所到达的域名对应的IP地址中路由跳数最小的那个IP地址作为访问的IP地址,具体你可以用LINUX的NSLOOKUP来查看域名所对应的IP地址,然后用PC的TRACERT的功能把所有DNS解析出来的IP地址进行跳数记录,然后在访问该域名,查看具体是哪个地址解析给你的PC。
为什么无法直接访问www.a.shifen.com
流程:
- [1,2,3,4] - DNS解析
- [5,6,7] - 三次握手,建立TCP连接
- [8] - 发送HTTP Get请求
- [9] - 服务器返回RST复位信号,强制关闭TCP连接
服务器成功收到了HTTP Get请求,后台逻辑认为这个连接不符合规范()。所谓baidu定义的规范那应该就是服务器检查host,非baidu.com
或s
就拒绝访问。
抓包貌似看不到整个路由,是吗?如何分析整个路由?
。。
为什么访问 baidu.com 会跳转到 www.baidu.com ?
baidu.com
返回的页面如下:
1 | <html> |
表示0秒之后跳转到www.baidu.com
主页。这种叫做HTML redirections
。并非30X 重定向。参考
参考
https://www.zhihu.com/question/36891472/answer/69455356
http://skyrover.me/2017/02/19/BAIDU%E7%9A%84DNS%E8%A7%A3%E6%9E%90/