前言
随着互联网的不断发展,分布式系统已经成为每个开发者必须了解的技术栈了。
本系列内容是自己学习分布式系统架构设计的一些学习笔记。可能开始笔记会乱等回过头来再整理。
分布式系统DNS
概念:DNS是 全称Domain Name System即域名系统。在网络上主要作为域名与IP地址的相互映射系统,能够使用户更方便的访问网站。
域名转换为IP:
我们ping一下www.baidu.com 就会发现 解析到 61.135.169.121。
直接访问ip,可读性较差。而且ip可能经常变动。
DNS应用场景
- 浏览器访问网站
- 服务器以域名的形式对外暴露
域名访问方案
- HOST文件
文件位置:
linux: /etc/hosts
windows: C:\Windows\System32\drivers\etc\hosts
host文件里面保存了:域名与ip的映射,浏览器访问网站的时候也通过本地host来搜索ip。
如:
127.0.0.1 kubernetes.docker.internal
访问kubernetes.docker.internal 网站时,对自动映射到127.0.0.1
host方式优劣势分析:
文件特点:
a)key:value格式存储
b)终端本地保存
c)访问速度快
缺点:
a)变更生效慢
b)host文件越来越大
c)没规定命令规则,主机名会冲突
d)维护映射关系代价高
基于以上分析host文件一般用在测试环境
- DNS域名解析系统
1)DNS域名系统分析
服务器结构:类似数据库采用层级分散结构部署服务器。
所有域名都通过域名服务器集群存储。本地host不必保存域名->ip映射关系。
同时规定了命名规则,保证了不重复
备注:上图中baidu.com并是存的这一个域名,而是存了很多.com的域名。这里表示一个服务器集群
域名完整写法:
map.baidu.com.
www.sina.com.cn
DNS解析过程
- 解析过程
解析原则:优先使用缓存(缓存时间可以根据Time to Live 设置)
Local DNS: (local name server)是客户端网络设置的一部分,要么是手工配置,要么从DHCP得到。一般local dns 在从网络上靠近客户端。即服务器或者本地电脑中网络设置的dns部分。可以选择如下:
- 不同查询方式分析:
- DNS迭代查询
解释:local DNS分别对根、顶级、二级域名发起请求。每次请求依赖上次请求结果。
- DNS递归查询
- 解释:Local DNS首先向根发起请求,然后根服务器向二级发起请求,二级向三级发送查询请求。。。查询到结果后原路返回
DNS详解
- 解析路径查询
通过dig www.youkuaiyun.com +trace 命令查询从根域名到指定域名所经历过的所有域名服务器。
win不支持dig 可通过wsl使用。
wsl具体配置方式参考https://blog.youkuaiyun.com/LMFranK/article/details/100214551
dig命令参考:
https://blog.youkuaiyun.com/reyleon/article/details/12976889 - 查询域名信息
使用 dig www.baidu.com 查询域名信息
DNS数据库中每一个条目称作为一个资源记录(ResourceRecord,RR),也就是一条解析记录
ANSWER SECTION:各字段解释
;; ANSWER SECTION:
www.baidu.com. 423 IN CNAME www.a.shifen.com.
www.a.shifen.com. 18 IN A 111.206.223.172
www.a.shifen.com. 18 IN A 111.206.223.173
第一列:owner: 指示拥有资源记录的DNS域名
第二列:TTL:指明其他DNS服务器在期满放弃该记录信息之前对其 缓存多长时间
第三列:CLASS:IN(internet)
第四列:TYPE:资源记录类型(见下表描述)
类型 | 描述 |
---|---|
A | IPv4主机地址 |
AAAA | IPv6主机地址 |
NS | 权威名称服务器 |
CHAME | 别名 |
- DNS协议
具体协议分析参考: https://blog.youkuaiyun.com/tianxuhong/article/details/53811842

协议正文:
请求数据:
Queries 查询问题区域
应答数据:
Answers 回答问题区域
Authoritative nameservers 授权区域
Additional recodreds 附加区域
Queries
Name
Type
Class
例如 baidu.com
资源记录:
为什么DNS只有13个根?
12(Header) + 5(Question)+ 221(Answer) + 221(Additional) =SIZE = 459
采用UDP协议,做的512字节
DNS应用场景
- 客户端请求服务端:客户端访问服务端通过域名访问
- 企业内部DNS:线上服务之间访问通过DNS。服务方变更IP只需改DNS配置即可
- 预留资源实现客户端无感知扩容;提前为节点规划多个域名,未来扩容无感知
- 通过域名二级映射从而多个域名修改时一键完成
- IP负载均衡
DNS选型
-
使用DNS Benchmark测试稳定性较高的
用于确定本地和远程DNS名称服务器的确切性能
参考链接:https://www.grc.com/dns/benchmark.htm
- 优先使用大厂的,BAT,114DNS任选其二,国外Google、IBM,OPENDNS做备份
- 建议一主一备,高可用,使用付费版
DNS可能的问题
- 请求时间变长。请求链路变长,多一次解析
- 域名对应的IP生效不及时
- 域名被劫持:域名对应ip被篡改,导致访问服务不对
DNS劫持原因及技术分析
DNS劫持:通过攻击域名服务器(DNS),获取域名解析控制权,解析服务器(DNS)的方法,把目标网站域名解析到错误地址
- DNS劫持原因
- 域名服务器负责用户解析域名请求
- 没有机制保证域名映射是否正确(UDP无连接协议,导致篡改结构可行性;监听53端口数据,发现匹配请求立即返回伪造结果)
- 域名服务器被黑客攻击,恶意篡改
- “流氓的域名服务器”更改一些域名的解析结果
- DNS污染过程
- 用户端发出DNS请求后,等待应答
- 如果此时有一个看起来正确的应答包(拥有和DNS请求一样的序列号),TA信以为真,并抛弃稍晚到达的应答包
- 这个DNS欺骗的关键在于伪造一个特定序列号的应答包
- 伪造DNS应答包对个人难道答,对于拥有主干网络节点的组织很容易
如何快速检测DNS被劫持
- 通过浏览器访问,查看网站的正确性
- 通过nslookup 命令 + whois进行IP确认
- APP端这里可以增加一个网路检测的功能
被劫持后快速恢复方案
- 商务联系DNS服务商
- 电话投诉DNS提供方
- 切换备用DNS
技术解决方案见下篇 分布式系统 - DNS域名设计与实践(下)
文章部分内容图片引用NX教育 https://www.naixuejiaoyu.com/index