dnspy实现原理

dnspy实现原理,第1张

1原理介绍
DNS:域名系统(DomainNameSystem)
因特网的一项核心服务,相当于互联网的GPS,可以看成一个巨大的通讯录,主机访问域名时,把网址解析为对应IP地址。
一般来说,我们会有本地的缓存的DNS,如果本地的缓存DNS
没有的时候就会访问指定的DNS服务器去寻找目标地址。就像上图一样,DNS服务器会查找自己的通信录然后返回给终端。
2传统DNS的问题
从原理我们知道我们的网络访问主要依赖于DNS服务器,但是DNS服务器中的通信录又是从哪里来的呢?这个就是DNS的基础建设中的根域名服务器。
比如我们访问baiducom,但是我们的DNS服务器中没有相应的地址的时候就是下图的过程:
所以我们的访问速度会取决于DNS服务器有没有这个缓存,如果没有的话递归访问就会花费过长时间。
另外我们访问到的最终地址是取决于某个域名服务器中的记录的,很多cdn的实现方式都是访问不同的顶级域名服务器解析到不同的地点来达到加速的,并不是特别准确。
而且我们如果在一些不良的上网环境(小时候的网吧)会在任何页面上都能看到很多广告页面,其中有一种原因就是DNS劫持,其实就是无论你去任何网站都会解析到一个特定的ip,然后就会给你访问的网站上加上许多小广告然后返回给你。
最后,还记得俄罗斯被制裁,想要将俄罗斯从互联网上抹去的方式其实就是只要顶级域名服务还有子域名服务器限制俄罗斯的ip地址的访问就能做到,也算是卡脖子的一个项目了。

DNS 介绍
DNS 由来
DNS 全名是 Domain Name System, 透过 DNS 系统, 我们可以由一部机器的 domain name 查其 IP, 也可以由机器的 IP 反查它的 domain name, 除此之外 DNS 还与 Mail System 结合, 提供 Mail routing 的功能
早期这个 domain name 与 IP 的对应表是记在每部机器的 /etc/host 这个档案, 当电脑个数不多还好, 但是电脑数目一多就会发生问题了, 主要有下列问题
1 Traffic & Load
2 Conflict
3 Consistency
因为用 hosts 记录 domain name <-> ip mapping 有上述问题, 所以后来发展出 DNS
Domain Name Space
整个 INTERNET 上的电脑如此众多, 如何保证两部电脑不会有相同的 domain name/IP 是一个很重要的问题 几个重要的观念如下
1 Domain (网域)
将整个 internet 分成许多 domain, 每个 domain 下又细分为许多 domain, 然后这些细分的 domain 视实际需求又再细分成许多 domain, 一直循环下去
基本上每个 domain 内的 mapping 由一部主机负责管理
top level domain - com, edu, gov, mil, net, org, int (现在又多出许多 top domain 了如 isp, art 等)
2 Delegation (授权)
刚才提到每个 domain 都可因实际需求再细分成许多 sub domain 上层的 domain 可以将其分出的某个 sub domain 的 domain name 与 IP mapping 交由另一部机器管理, 这个动作我们称之为 delegation
3Forward/Reverse(正解/反解)
在讲到 domain name <-> IP mapping, 其实应该看成两个命名空间:
一个是 domain name -> IP, 称之为 forward mapping, 在这个命名空间中就是先分成前面提到的那些 top domain, 再细分 sub domain, 再细分
比如说 winniecorphpcom -> 1516192152 代表在负责 corphpcom 这个 sub domain 的机器上, 可以查到其 mapping table 上有一笔记录是 winnie -> 1516192152
一个是 IP -> domain name 称为 reverse mapping 在这个命名空间中, 所有的 IP 组成一个叫作 arpain-addr 的 top domain, 然后再依 IP 层层细分
比如说 1516192152 -> winniecorphpcom 代表在负责 1921615in-addrarpa(注意是反过来写, 因为 top domain 要在最后面) 这个 sub domain 的机器上, 可以查到其 mapping table 上有一笔记录是 152 -> winniecophpcom
值得注意的是:
a 负责 forward mapping 和 reverse mapping 的机器不一定是同一部
负责 corphpcom domain 与负责 1921615in-addrarpa 的机器不一定是同一部机器, 即使在同一部机器, 如果不注意的话, 两边的内容可能也会有不 match 的情形
b domain 与 ip subnet 并没有一对一关系
举例而言成大电机的 domain 是 eenckuedutw, 但是因为成大电机内部机器数多的关系, 所用到的 IP subnet 有 14011672, 1401649, 140116163, 140116156, 140116227 共 5 组
Name Server
负责记录 forward/reverse mapping 的机器会执行一个叫 name server 的软体, 透过这个软体回应来自其它机器对 domain name 或 IP 的查询
1 zone & domain
上面提到基本上每个 domain交由一个机器来负责, 其实更精确地说应该是每个 zone 交由一个 name server 来负责, 所谓 zone 就是把一个 domain 扣掉分给下层负责的部份, 剩下来的就是 zone
2 Primary/Secondary
每个 zone 交由一部 name server负责的作法会有一个问题, 万一这个 name server 当掉, 可能造成 INTERNET 上其它机器无法取得属於这个 zone 的资料(就是 domain name 和 ip mapping) 为了避免这种情形, 我们可以把这个 zone 的资料同时交给多部 name server 负责原本的这部称为 primary name server, 其它的称为 secondary name server Secondary name server 会定期将 primary name server 上 zone 的资料拷贝一份下来备用
对於上层的 name server 而言, 它只是设定某个 zone 同时 delegate 给一部以上的下层 dns server, 但是它并不去分辨谁是真正的 primary, 谁是 secondary 它只是依据顺序寻问, 当第一部负责某个 zone 的 dns server 当掉时, 它会依序找下一个负责的 dns server
ps: primary/secondary 在新版 name server 程式中改称为 master/slave
Name Resolution (名称解析, 名称查询)
接下来我们介绍名称查询运作时一些重要名词或观念
1 Resolver
相当於是 DNS server 的 client 端, 通常是以函式库的方式被放在整套作业系统中, 各类的应用程式经由呼叫这个 resolver 函式库可以很容易地向 DNS server 进行查询, 得到所要的资料
2 Root Name Server
在查询资料时, 总是要有一个起点, 当一个 local DNS server 收到来自 client 端关於一个 domain name 的查询, 这个 local DNS server 怎麼知道这个 domain name 的相关资料是记录在 INTERNET 中的哪一个 DNS 上呢
答案是向 root name server 寻问 root name server 记录了各 top domain 分别是由哪些 DNS server 负责 比如说要找 >DNS 即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。
下面对DNS的工作流程及原理进行简要说明
DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts;若无结果,则client查看本地的DNS缓存服务器;若无结果,则查找所属域的首选DNS服务器;若此时本地首选DNS服务器仍无法解析,则会想根域名服务器进行查询或选择转发解析请求。
DNS的查询规则:递归式查询,即client向支持递归查询的DNS Server发出解析请求,则自DNS服务器不论是自身直接解析还是无法解析想根发出请求,总会由其向client返回一个结果;迭代式查询,即接收client解析请求的DNS Server,若其能够解析则直接返回结果,若其不能解析将把解析请求交给其他DNS服务器,而不是自己亲自将解析过程完成。
所谓的“根”服务器:根服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。
DNS记录的类型:
A:Address 域名向ip地址转换的记录;
PTR:Printer ip地址向域名转换的记录;
NS:代表域内的dns服务器;
MX:代表域内的邮件服务器;
CNAME:域名的别名;
SOA:start of authority用于标示域内主DNS服务器。
提供DNS服务的软件:BIND即Berkeley Internet Name Domain有加州大学伯克利分校研发是当今提供dns服务应用最广的软件。
下面让我们进入正题,以下内容包括:DNS的缓存服务器、主/从服务器、子域授权、转发以及视图的配置步骤。

DNS缓存服务器
Ps:为了更好的体会和理解dns的配置文件和域解析文件,作者在此只安装bind包,以手动编辑的方式生成这几个必须的文件。
1安装bind包
yum install bind
2创建住配置文件/etc/namedconf
options {
directory "/var/named"; #告知工作目录
};

zone “” IN {
type hint; #声明根域
file "namedca"; #根信息存放文件
};

zone "localhost" IN { #本地正解定义
type master; #类型为master
file "localhostzone"; #正解文件名
};

zone "00127in-addrarpa" IN { #本地反解定义
type master;
file "namedlocal"; #反解文件名
};

chown :named /etc/namedconf
#修改属组给named
3创建3个解析文件
namedca
dig -t NS > /var/named/namedca
#向跟服务器发起查询并重定向到目标文件
localhostzone
vim localhost zone
$TTL 86400
#默认的ttl值
@ IN SOA localhost adminlocalhost (
#主DNS服务器localhost
2011081601
#时间+序列号01
1H
#刷新时间:每隔多久来master查询更新
10M
#重试时间间隔
7D
&n


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zz/13253597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-27
下一篇 2023-06-27

发表评论

登录后才能评论

评论列表(0条)

保存