当前位置:网站首页 > 技术博客 > 正文

dns域名解析ip



目录

图片

一、DNS

1.1 DNS 服务介绍

DNS(Domain Name System,域名系统),因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

  • DNS 协议运行在UDP和TCP之上,使用53号端口
  • 其中在DNS解析查询时用到UDP协议,而在主从传递区域数据库文件时,用到TCP协议

1.2 互联网域名结构

一般结构

  • 主机名.二级域名.顶级域名.根
  • www.wsescape.com.

管理方式

  • Internet 的顶级域名由 Internet 网络协会域名注册查询负责网络地址分配的委员会进行登记和管理
  • 它还为 Internet 的每一台主机分配唯一的 IP 地址

图片

1.3 DNS 的功能

每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了。

主机名到 IP 地址映射的两种方式

  • 静态映射

/etc/hosts文件

在每台设备上都有主机到IP的映射关系,只供此设备使用

  • 动态映射

/etc/resolv.conf文件

指通过DNS服务器配置主机到IP的映射关系

 

解析方式 - FQDN(Full Qualified Domain Name)

  • 正向 ==> FQDN --> IP
  • 反向 ==> IP --> FQDN
  • 权威
  • 非权威
  • 解析顺序

在解析域名时,首先采用静态域名解析的方法,如果静态域名解析不成功,再采用动态域名解析的方法

图片

一次完整的查询请求经过的流程

图片

1.4 技术实现

DNS通过允许一个名称服务器把他的一部分名称服务,众所周知的zone,委托给子服务器而实现了一种层次结构的名称空间,成为子域授权机制

  • DNS还提供了一些额外的信息,例如系统别名、联系信息以及哪一个主机正在充当系统组或域的邮件枢纽
  • 任何一个使用IP的计算机网络可以使用DNS来实现他自己的私有名称系统

实现 DNS 的软件

  • BIND
  • DJBDNS
  • MaraDNS
  • Name Server Daemon
  • PowerDNS
  • Dnsmasq

DNS 查询类型

  • 迭代查询
  • 递归查询

图片

图片

1.5 DNS 的类型

(1)Primary DNS Server(Master)

一个域的主服务器保存着该域的zone配置文件,该域所有的配置、更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个域的主DNS服务器。

(2)Secondary DNS Server(Slave)

域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步。

(3)Caching only Server(Cache)

DNS缓存服务器不存在任何的zone配置文件,仅仅依靠缓存来为客户端提供服务,通常用于负载均衡及加速访问操作。

(4)转发服务器

只负责转发功能

注解说明

主 DNS 服务器

  • 维护所负责解析的区域内解析库服务器
  • 解析库由管理维护,可以是手工也可以是自动的
  • 通知机制
  • 一旦主 DNS 服务器解析库发生改变会立即通知从服务器

从 DNS 服务器

  • 从主DNS服务器或其他的从DNS服务器那里复制(区域传送)一份解析库
  • 序列号:来表示解析库的版本号,前提是,主服务器解析库内容发生改变,其序列递增
  • 刷新时间:从服务器从主服务器请求同步解析库的时间间隔
  • 重试时间:从服务器从服务器请求同步解析库失败的时候,再次尝试的时间间隔
  • 过期时长:从服务器始终联系不到主服务器时,多久多后放弃从服务器角度,停止提供服务
  • 区域传送
  • 全量传送:传送整个解析库
  • 增量传送:传送解析库变化的那部分内容

1.6 资源记录类型

DNS 系统中,常见的资源记录类型:

主机记录(A记录)

  • FQDN --> IP
  • A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上

指针记录(PTR记录)

  • IP --> FQDN
  • 引导至一个规范名称(Canonical Name),最常用来运行反向DNS查找

权威记录的起始(SOA记录)

  • 一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录

名称服务器记录(NS记录)

  • 专用于标明当前区域的DNS服务器

别名记录(CNAME记录)

  • CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录

MX 记录(MX记录)

  • 引导域名到该域名的邮件传输代理(Message Transfer Agents)列表

IPv6 主机记录(AAAA记录)

  • FQDN --> IP
  • 与 A 记录对应,用于将特定的主机名映射到一个主机的IPv6地址。

服务位置记录(SRV记录)

  • 用于定义提供特定服务的服务器的位置,如主机hostname,端口port

NAPTR 记录

  • 它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。

图片

1.7 资源记录格式

语法

 

(1) TTL如果从全局继承可以省略,为缓存时长
(2)IN表示Internet
(3)rr_type表示资源记录类型
(4) @可用于引用当前区域的名字
(5) 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应
(6) 同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机而已

SOA

name: 当前区域的名字,例如wsescape.com.

value: 有多部分组成

  • (1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
  • (2) 当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用.替换,例如linuxmail.wsescape.com
  • (3) 主从服务协调属性的定义以及否定的答案的统一的TTL
 

NS

name: 当前区域的名字

value: 当前区域的某DNS服务器的名字,例如ns.wsescape.com.

注意

  • (1) 相邻的两个资源记录的name相同时,后续的可省略
  • (2) 对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录
 

MX

name: 当前区域的名字

value: 当前区域的某邮件服务器(smtp服务器)的主机名

  • 一个区域内,MX记录可以有多个
  • 但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级
  • 数字越小优先级越高

注意

  • (1) 相邻的两个资源记录的name相同时,后续的可省略
  • (2) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
 

A

name: 某主机的FQDN,例如www.wsescape.com.

value: 主机名对应主机的 IP 地址;

注意

  • 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
 

AAAA

与A记录类似,这是只是表示IPv6地址而已

 

PTR

name: 这里的name表示的是IP地址

IP地址有特定格式,把IP地址反过来写,如果是1.2.3.4需要写作4.3.2.1

还有特定后缀in-addr.arpa.,完整写法为4.3.2.1.in-addra.arpa.

value: 这里的value值为FQDN

注意

  • 网络地址及后缀可省略,主机地址依然需要反着写
 

CNAME

name: 别名的FQDN

value: 正工名字的FQDN

 

1.8 个人使用

子域授权就是每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权

类似根域授权tld

 

这里以wsescape.com为例

 

域名注册

  • 代理商
  • 万网
  • 新网
  • godaddy

绑定服务器

  • 注册完成以后,想自己用专用服务来解析?
  • 管理后台,把 NS 记录指向的服务器名称和 A 记录指向的服务器地址

2. 常用命令

2.1 dig命令

dig用于测试dns系统,因此不会查询hosts文件进行解析

  • 用于询问  DNS  域名服务器的灵活的工具
  • 除非被告知请求特定域名服务器,dig将尝试  /etc/resolv.conf中列举的任何服务器
  • 当未指定任何命令行参数或选项时,dig将对.(根)执行NS查询

格式

 

语法

类型查询

 

查询选项:

 

模拟区域传送:

 

2.2 host命令

host命令用于查询DNS的工具

  • 它通过常转换指定主机名称的主机名称为 IP 地址
  • 当不指定参数时,它显示host命令的帮助信息

格式

 

语法

-a 等同于-v -t
-C 在需要认证的域名服务器上查找 SOA 记录
-l 列出一个域内所有的主机
-i 反向查找
-r 不使用递归处理
-v 运行时显示详细的处理信息
-4 用于 IPv4 的查询
-6 用于 IPv6 的查询
-t <类型> 指定类型,包括a、all、mx、ns等

实例展示

 

2.3 nslookup命令

nslookup  命令用于查找域名服务器的程序,有两种模式为互交和非互交

格式

 

语法

  • 非交互模式
  • 直接查询即可
  • 交互式模式
 

实例展示

 

2.4 rndc命令

rndc客户端是通过建立套接字连接服务端,监听在TCP的953端口,来对服务端的named进行修改操作,但由于安全考虑,所以rndc的客户端和服务端安装在同一台主机之上。

语法 1

  • -b:source-address  使用  source-address  作为连接服务器的源地址允许多个实例设置  IPv4  和  IPv6  源地址
  • -c config-file:使用config-file  作为缺省的配置文件/etc/rndc.conf  的替代
  • -k key-file:使用  key-file  作为缺省的密钥文件/etc/rndc.key  的替代、如果config-file  不存在,/etc/rndc.key  中的密钥将用于认证发向服务器的命令
  • -s server server:是与rndc的配置文件中server语句匹配的服务器的名字或地址、如果命令行没有提供服务器,会使用rndc配置文件中options语句中的default-server子句所命名的主机
  • -p port:发送命令到TCP端口port,以取代BIND 9的缺省控制通道端口  953
  • -V:打开冗余日志
  • -y key_id:使用配置文件中的密钥key_id

语法 2

  • reload:重载主配置文件和区域解析库文件
  • reload zone:重重载区域解析库文件
  • refresh zone:安排区域的立即维护
  • retransfer zone:手动启动区域传送过程,而不管序列号是否增加
  • notify zone:重新对区域传送发通知
  • reconfig:重载主配置文件
  • status:将服务器统计信息写入统计文件中
  • querylog:开启或关闭查询日志、建议调试的时候开启,否则日志消耗太多性能
  • dumpdb:将高速缓存转储到转储文件 (named_dump.db)
  • stop:将暂挂更新保存到主文件并停止服务器
  • halt:停止服务器,但不保存暂挂更新
  • trace:将调试级别增加一级、建议调试的时候开启,否则日志消耗太多性能
  • trace level:更改调试级别
  • notrace:将调试级别设置为0
  • flush:刷新服务器的所有高速缓存
  • status:显示服务器的状态
  • restart:重新启动服务器

实例展示

 

3. BIND的安装配置

DNS服务,程序包名bind,程序名named。

3.1 程序包

只需要安装bind、bind-libs和bind-utils即可

  • bind:主包
  • bind-libs:依赖的库文件,包括 32 位和 64 位
  • bind-utils:提供客户端工具,例如dig、host、nslookup和nsupdate
  • bind-chroot:建立不要安装,很容易被入侵
  • bind-chroot包的作用是提高安全性,将 DNS 服务的配置文件/etc/named.conf  等,创建一个硬链接转到/var/named/chroot/etc/  文件夹下面,而且使用服务帐号登录,不使用root用户登录
  • 注意,修改配置文件要修改/etc/下面的,这样会自动同步到chroot下面的链接文件中

以上这两种方式,是将解析库文件放在不同的数据库中进行存储

3.2 BIND配置文件

配置文件

  • 服务启动脚本在CentOS6下/etc/rc.d/init.d/named
  • 主配置文件/etc/named.conf、/etc/rndc.key、为rndc的秘钥共享文件,提供认证用的
  • rndc是什么?远程名称控制器、默认与bind安装在同一主机,且只能通过本地回环地址127.0.0.1来连接named进程、提供辅助性的管理功能,如查看解析状态等、默认工作在 953/tcp 端口上、/etc/named.rfc1912.zones、请求注解文档
  • 解析库文件/var/named/ZONE_NAME.ZONE、在/var/named/目录下存在多个解析库文件/var/named/named.ca、指向根DNS该文件不需要管理员更改,而是系统自带/var/named/named.local、本地子域解析,将localhost反向解析为127.0.0.1
  • 注意
    (1) 一台物理服务器可同时为多个区域提供解析
    (2) 必须要有根区域文件,在named.ca中包含13根节点地址,由dig命令生成而来的
    (3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
 

 

主配置文件

  • 全局配置:options {}
  • 日志子系统配置:logging {}
  • 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone如zone "ZONE_NAME" IN {}
  • 注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
 

 

3.3 缓存名称服务器配置

安装上安装上bind之后,其实就算的上是一个缓存名称服务器,只需要进行少许的配置即可完成

  • 修改listen-on port 53
  • 修改allow-query
  • 修改recursion

(1)安装

 

(2)启动

 

(3)查看

 

(4)修改

 

 

(5)重启生效

 

3.4 主 DNS 名称服务器配置

主 DNS 名称服务器配置就是在缓存DNS服务器的基础之上增加zone配置文件就可以了

  • 在/etc/named.rfc1912.zones添加zone记录
  • 在/var/named/增加zone文件

(1) 在主配置文件中定义区域

格式

 

修改配置

 

(2) 定义区域解析库文件

格式

 

修改配置

 

更改权限

 

重启生效

 

3.5 反向区域

反向解析和正向解析各为独立的系统,所以可以部署在不同的或者是相同的机器之上,都是可以

  • 一个区域只能有一个主服务器,无论是正向还是反向
  • 一个主服务器可以有多个从服务器

根据配置文件中定义的主机地址,来确定网络地址

  • 如果都为172.16.100内的主机,那么网络地址就是172.16.100.
  • 存在多种地址,如172.16.100.12、172.16.200.121等,那么网络地址就是172.16.
  • 以此类推

什么是反向区域

  • 不变的部分用来当做区域名称,变化的部分用来当做实现解析时候的name

格式

  • 区域名称:网络地址反写.in-addr.arpa.
  • 如172.16.100. ==> 100.16.172.in-addr.arpa.

如何定义反向区域

(1) 定义区域

 

(2) 区域解析库文件

  • 以PTR记录为主
  • 不需要MX和A以及AAAA记录
 

 

(3) 修改权限并重启

 

3.6 从 DNS 名称服务器配置

定义从 DNS 服务器就是在缓存服务器的基础上,进行修改配置

  • 在/etc/named.rfc1912.zones添加zone记录

主从复制

(1)应该为一台独立的名称服务器
(2)主服务器的区域解析库文件中必须有一条 NS 记录是指向从服务器
(3)从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
(4)主服务器得允许从服务器作区域传送
(5)主从服务器时间应该同步,可通过ntp进行
(6)bind程序的版本应该保持一致;否则,应该从高主低

定义从区域的方法

正向从服务器格式

 

反向从服务器格式

 

(1)正向从服务器的实例

 

(2)反向从服务器的实例

 

4. 高级功能之子域授权

4.1 子域授权的特点

子域授权其实就是在你有域名的情况下,进行细分的状况。比如说,你注册了wsescap.com这个域名,由于业务关系等,你需要分开为ops部门和fin部门,分别使用自己的DNS服务器,这个时候你就需要进行子域授权了。

特点

  • 分布式数据库
  • 正向解析区域的子域授权比较常见,而反向的相对来说比较难做

4.2 子域授权的方法

正向解析区域子域方法

 

4.3 解析方式

前提:如果在wsescape.com下,定义了一个子域为ops,并在ops下创建了一个www的服务。

外部解析

(1)当www.test.org中的一台主机需要访问ops下的www主机时,就需要进过以下几个阶段:

  • 先找根(.),根说你去找com
  • 再找com,com说你去找wsescape
  • 再找wsescape,wsescape说你去找ops
  • 最后ops返回需要的信息

内部解析

  • 先找ops,ops说你找根
  • 再找根(.),根说你去找com
  • 再找com,com说你去找wsescape
  • 最后wsescape返回需要的信息

我们会发现这个饶了一大圈,为了避免这样的问题,就需要定义转发服务器。

4.4 定义转发服务器

注意

(1)关闭dnssec功能

  • dnssec-enable no
  • dnssec-validation no

(2)被转发的服务器需要能够为请求者做递归,否则转发请求不予进行

(3)即定义了全局转发有定义了区域转发,优先级为能够精确匹配到的先通过区域转发,不能再通过全局转发

转发模式

(1) 全局转发

凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器

 

(2) 区域转发

仅转发对特定的区域的请求至某服务器、需要自己定义区域和区域类型等信息

 

4.5 子域父域配置

前提:

父域IP地址 ==> 172.16.100.11
子域IP地址 ==> 172.16.100.12
能访问互联网的IP地址 ==> 172.16.0.1

(1)父域服务器配置

 

 

 

 

 

 

(2)子域服务器配置

 

 

 

 

 

 

(3)测试配置

 

4.6 定义转发域

注意

  • 如果发现测试无法成功,查看/etc/named.conf中的dnssec改为no而非注释掉,否则导致本地客户端不接受
  • 如果测试应该为不能解析但是还是解析了,可能需要清空缓存rndc flush

服务配置

(1)全局转发

 

(2)区域转发

 

(3)测试配置

 

5. 高级功能之view视图

5.1 BIND中基础的安全相关的配置

(1)acl机制

  • 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
  • 只能先定义后使用,其一般定义在配置文件中options的前面

(2)acl格式

 

(3)四个内置的acl

因为这四个是内置的acl,所以在我们自己定义的时候不能使用这几个名称,否则会导致误用发生。

  • none ==> 没有一个主机
  • any ==> 任意主机
  • local ==> 本机
  • localnet ==> 本机的IP同掩码运算后得到的网络地址

(4)访问控制的指令

以下的这几个指令,可以用在/etc/named.conf中表示全局生效,也可以用在/etc/named.rfc1912.zones中,定义在单独的zone中表示局部生效。同时,{}内可以包含定义的acl或者主机IP地址,包括内置的和我们自己定义的。

  • allow-query {} ==> 允许查询的主机,即白名单
  • allow-transfer {} ==> 允许区域传送的主机,即白名单
  • allow-recursion {} ==> 允许递归的主机
  • allow-update {} ==> 允许更新区域数据库中的内容,建议设置为none

(5)演示示例

 

 

 

5.2 BIND view

用途:主要适用于对于用户的分类,提高网站访问效率。

  • 如按照内、外网指定不同访问方式来访问网站
  • 如按照运营商类型制定不同用户访问指定的服务器来访问网站
  • 其实  BIND view就是实现分布式缓存,类似于CDN的一直方式

解析过程

  • 当一个用户请求接收之后,首先判断用户的来源,然后自上而下逐个与各个view自己的用户节系列表进行匹配,最终来确定view系统解析功能,返回指定的区域解析库文件
  • 一般用view1匹配第一个网络, 用view2匹配第二个网络, 用view3匹配其余网络,保证不会有缺漏

(1)视图

  • 一个bind服务器可定义多个view,每个view中可定义一个或多个zone区域
  • 每个view用一来匹配一组请求的客户端
  • 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

(2)格式

  • view是自上而下,逐一匹配
  • 大多数用在option中的指令,都可以用在view中
 

(3)注意

  • (1)一旦启用了view,所有的zone都只能定义在view中,一个都不允许例外
  • (2) 仅有必要在匹配到允许递归请求的客户所在view中定义根区域
  • (3)客户端请求到达时是自上而下检查每个view所服务的客户端列表

(4)实验演示

图片

将来自172.16网络并访问www.wsescape.com的用户,使用172.16.100.11这个DNS服务器来指定www服务器的地址

将非来自172.16网络并访问www.wsescape.com的用户,使用公网2.2.2.1这个DNS服务器来指定www服务器的地址

 

 

 

 

 

6. 高级功能之编译安装BIND

 

 

 

 

 

 

 

 

 

 

 

作者:Escape

  • 上一篇: ipcrm命令
  • 下一篇: 跨域cors使用说明
  • 版权声明


    相关文章:

  • ipcrm命令2024-12-06 21:30:05
  • js原型原型链有什么特点2024-12-06 21:30:05
  • 012背包问题2024-12-06 21:30:05
  • event but2024-12-06 21:30:05
  • while(!feof(fp))什么意思2024-12-06 21:30:05
  • 跨域cors使用说明2024-12-06 21:30:05
  • api接口性能测试2024-12-06 21:30:05
  • 微pe破解win10开机密码2024-12-06 21:30:05
  • 桥接模式例子2024-12-06 21:30:05
  • rdb和aof用于什么场景2024-12-06 21:30:05