DNS简析
Name Server架构
分层管理机制
分层查询机制
Name Server之间的Master-Slave架构
DDNS
底层协议
配置文件
/etc/hosts
/etc/resov.conf
相关命令
nslookup
host
dig
总结
DNS安全问题
Reference
Introduction
DNS: Domain Name System,指的是整一个系统,而不是一个特定的机器
NS: Nameserver,提供域名解析服务的机器,给它一个域名,它会给你解析出ip或者给你对应的NS信息
DNS server: 代替用户的机器向NS查询域名<->ip
A记录 -> 域名 -> ip
,直接给你ip
NS记录 -> 域名 -> NS
,给你一个NS地址
Name Server架构
DNS 利用类似树状目录的架构,将主机名称的管理分配在不同层级的 DNS 服务器当中,经由分层管理, 所以每一部 DNS 服务器存储的数据就不会很多
DNS 利用类似树状目录的架构,将主机名称的管理分配在不同层级的 DNS 服务器当中,经由分层管理, 所以每一部 DNS 服务器存储的数据就不会很多
Layer | host name | domain name |
---|---|---|
顶级 | edu | .tw |
二级 | ksu | edu.tw |
三级 | www | ksu.edu.tw |
分层管理机制
- 每部机器只管理下一层的 hostname 对应 IP
- 至于下层的下层,则授权给下层的 DNS 主机来管理
分层查询机制
这里给出一个不太严谨的例子。这里以查询www.baidu.com 为例, 展示DNS服务器如何一级级地查询到它的IP地址,中间要经过三个NS。如果DNS服务器里面有缓存(一段时间失效),就可以直接报给client。
下面使用dig +trace来模拟DNS查询出南京大学小百合bbs的地址
dig +trace bbs.nju.edu.cn ; <<>> DiG <<>> +trace bbs.nju.edu.cn
;; global options: +cmd
. 3230 IN NS g.root-servers.net.
. 3230 IN NS e.root-servers.net.
. 3230 IN NS m.root-servers.net.
. 3230 IN NS l.root-servers.net.
. 3230 IN NS d.root-servers.net.
. 3230 IN NS b.root-servers.net.
. 3230 IN NS i.root-servers.net.
. 3230 IN NS h.root-servers.net.
. 3230 IN NS a.root-servers.net.
. 3230 IN NS k.root-servers.net.
. 3230 IN NS j.root-servers.net.
. 3230 IN NS c.root-servers.net.
. 3230 IN NS f.root-servers.net.
;; Received 460 bytes from 127.0.1.1#53(127.0.1.1) in 8 ms cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS a.dns.cn.
cn. 172800 IN NS ns.cernet.net.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS c.dns.cn.
;; Received 513 bytes from 192.5.5.241#53(f.root-servers.net) in 300 ms edu.cn. 172800 IN NS ns2.cuhk.hk.
edu.cn. 172800 IN NS deneb.dfn.de.
edu.cn. 172800 IN NS dns.edu.cn.
edu.cn. 172800 IN NS dns2.edu.cn.
edu.cn. 172800 IN NS ns2.cernet.net.
;; Received 716 bytes from 203.119.25.1#53(a.dns.cn) in 30 ms NJU.edu.cn. 172800 IN NS DNS.NJU.EDU.CN.
NJU.edu.cn. 172800 IN NS NS.NJU.EDU.CN.
;; Received 131 bytes from 202.112.0.35#53(dns.edu.cn) in 3639 ms bbs.nju.edu.cn. 10800 IN A 210.28.129.4
;; Received 59 bytes from 202.119.32.12#53(NS.NJU.EDU.CN) in 167 ms
简化过程如下:
- 查询cn
127.0.0.1 -> f.root-servers.net - 查询edu.cn
127.0.0.1 -> a.dns.cn - 查询nju.edu.cn
127.0.0.1 -> dns.edu.cn - 查询bbs.nju.edu.cn
127.0.0.1 -> NS.NJU.EDU.CN
这是一个企业级的网站的例子,可以看出
- 除了最后一步,向Nameserver查询得到的记录都是Nameserver的地址
- 自己搭建的网站需要有一个自己的Nameserver,存储自己的网站的ip
- 自己搭建的网站的Nameserver要向上一级登记
- 查询的时候用wireshark抓包,发现本机只和系统指定的DNS服务器通讯,说明这些操作目前由DNS服务器来处理。
- 前面的查询记录都是NS记录,也就是Nameserver的地址,最后一个记录是A记录,也就是bbs.nju.edu.cn真正的地址。
- 这里会显示一些数字,也就是DNS查询结果的TTL
- NS也有A记录,因为查询的过程中要连接NS。
如果搭建一个很简单的网站,也可以不用建立Nameserver,向上一级申请填写你的主机名和ip,这样就简便多了。这样在DNS查询的最后一步,结果是直接指向你的网站,而不是指向你的网站的dns服务器
Name Server之间的Master-Slave架构
解析一个域的DNS服务器可以有多个。这样数据的同步更新就是一个问题了,所以有了Master-Slave架构。
当Master更新了数据之后,Slave会向其拿更新的数据,这样维护DNS的时候就不用每一台都去更新了。
DDNS
当你从ISP获得动态IP的时候,IP经常变换的情况就会显得很不方便。DDNS机制使得你可以频繁地将自己的IP报告给NS,然后Internet上面的DNS主机需要频繁地更新解析的记录(设定一个较短的最大缓存时间)。
底层协议
DNS通常使用基于port 53的UDP,有时候数据量太大的时候使用TCP
cat /etc/services | grep 53
domain 53/tcp # Domain Name Server
domain 53/udp
配置文件
/etc/hosts
用户自定义的 ip <-> 域名
# cat /etc/hosts
127.0.0.1 localhost.
1.2.3.4 www.fake.com
3.4.5.6 www.fake1.com
/etc/resov.conf
存储DNS服务器的地址,在DHCP之后,DHCP client会自动修改这个配置文件。
#cat /etc/resolv.conf
# Generated by dhcpcd
nameserver 8.8.8.8
注意到,uclibc里面的__dns_lookup
函数,会使用__open_nameservers函数
从这个文件里面拿到的DNS服务器的地址,然后向这个地址发送DNS数据包。
相关命令
nslookup
Nslookup is a program to query Internet domain name servers. Nslookup has two modes: interactive and non-interactive
tan@tanhangbo-pc:~$ nslookup bbs.nju.edu.cn
Server: 127.0.1.1
Address: 127.0.1.1#53 Non-authoritative answer:
Name: bbs.nju.edu.cn
Address: 210.28.129.4
tcpdump抓包结果如下,说明是进行了一次DNS查询。
host
host is a simple utility for performing DNS lookups. It is normally used to convert names to IP addresses and vice versa
@query1
tan@tanhangbo-pc:~$ host bbs.nju.edu.cn
bbs.nju.edu.cn has address 210.28.129.4 @query2
tan@tanhangbo-pc:~$ host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com. @query3
tan@tanhangbo-pc:~$ host www.baidu.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.125
www.a.shifen.com has address 61.135.169.121
tcpdump抓包结果如下,说明是进行了一次DNS查询。
可以看出,host也可以作为反解,并且可以指定DNS服务器的地址让它进行查询。
dig
dig (domain information groper) is a flexible tool for interrogating DNS name servers. It performs DNS lookups and displays the answers that are returned from the name server(s) that were queried. Most DNS administrators use dig to troubleshoot DNS problems because of its flexibility, ease of use and clarity of output. Other lookup tools tend to have less functionality than dig
从man的介绍来看,dig的逼格是最高的,上面已有一个实例,就不再介绍了。
总结
推荐程度来说,dig > host > nslookup
DNS安全问题
- 因为DNS服务器是开放的,友好的,所以你发查询数据的时候它会老老实实地返回一堆你要的数据。所以当你需要攻击别人的时候,只需要伪造原地址为别人的ip,向一堆DNS服务器发送查询,那么这些DNS服务器的查询结果就如洪水般淹没他家的网口。
- DNS服务器本身如果被攻破,那么返回的ip地址不一定就是对的,那么没有HTTPS保护的网站可能会被伪冒。
- DNS服务器和客户端之间是没有认证的,所以你可以站在那台真实的服务器之前拦截你的数据,告诉你一个假的地址。
Reference
http://linux.vbird.org/linux_server/0350dns.php
DNS简析的更多相关文章
- DNS使用的是TCP协议还是UDP协议简析
DNS使用的是TCP协议还是UDP协议简析 DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类.但很少有人知道DNS分别在什么情况 ...
- Linux 目录结构学习与简析 Part1
linux目录结构学习与简析 by:授客 QQ:1033553122 说明: / linux系统目录树的起点 =============== /bin User Bi ...
- TCP/UDP,SOCKET,HTTP,FTP 简析
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- NETGEAR 系列路由器命令执行漏洞简析
NETGEAR 系列路由器命令执行漏洞简析 2016年12月7日,国外网站exploit-db上爆出一个关于NETGEAR R7000路由器的命令注入漏洞.一时间,各路人马开始忙碌起来.厂商忙于声明和 ...
- 简析.NET Core 以及与 .NET Framework的关系
简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- RecycleView + CardView 控件简析
今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleVi ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- PHP的错误报错级别设置原理简析
原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...
随机推荐
- 转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解
目标大纲 文章转载 CSS3 经典教程系列:CSS3 盒阴影(box-shadow)详解 IE中CSS-filter滤镜小知识大全 CSS实现跨浏览器兼容性的盒阴影效果
- 【高级功能】使用 Ajax(续)
1. 准备向服务器发送数据 Ajax 最常见的一大用途是向服务器发送数据.最典型的情况是从 客户端发送表单数据,即用户在form元素所含的各个 input 元素里输入的值.下面代码展示了一张简单的表单 ...
- 复选框(checkox)全选、全不选、反选、获得选中项值的用例
HTML部分: <div class="all"> <ul> <li><input type="checkbox" v ...
- 认识DOM和一些方法
认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...
- iOS 文件下载
iOS 视频音乐类等应用会用到“文件下载”.文件下载在iOS中的实现如下: 1.小文件下载 @interface ViewController () <NSURLConnectionDataDe ...
- Linux学习心得之 linux命令
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本篇博客是对 每日一linux命令(http://www.cnblogs.com/pe ...
- JAVA简单工厂模式(从现实生活角度理解代码原理)
简单工厂模式(Simple Factory),说他简单是因为我们可以将此模式比作一个简单的民间作坊,他们只有固定的生产线生产固定的产品.也可以称他为静态工厂设计模式,类似于之前提到过静态代理设计模式, ...
- Android中Listview展示及其优化好处
展示效果: 中间的item条目是可以上下滑动的. 代码实现: @Override public View getView(int position, View convertView, ViewGro ...
- Linux安装DBI/DBD-ORACLE
本文只是学习如何配置PERL DBI.PERL DBD时,整理的一个学习实践文档,大部分参考网上资料,详情请见下面参考资料. PERL对数据库的支持广而且全,几乎所有的主流数据库都有与之相应的PERL ...
- VS2015 Git使用教程——优化项目编辑日志
一.前言 公司项目中,修改日志管理是一件很繁琐的事情,而且项目维护时间长了,会遗留下各种有用或无用的日志,对于有代码洁癖的人来说,无疑是一种灾难. 1.公司日志记录结构: 2.Git日志记录结构: 二 ...