资讯详情

详解DNS域名解析服务

目录

图片

一、DNS

1.1 DNS 服务介绍

DNS(Domain Name System,域名系统),因特网作为域名和 IP 地址相互映射的分布式数据库可以让用户在不记得机器可以直接读取的情况下更方便地访问互联网IP数字串。通过主机名,最终得到主机名对应的IP地址的过程叫做域名解析(或主机名解析)。

  • DNS 协议运行在UDPTCP之上,使用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的映射关系

#cat/etc/hosts 127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4 ::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6  #cat/etc/resolv.conf nameserver172.16.242.2 

解析方式 - 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 --> P

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

  • 服务位置记录(SRV记录)

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

  • NAPTR 记录

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

1.7 资源记录格式

语法

name [TTL] IN rr_type value
  • (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

# 86400为TTL值,单位为秒钟
# 主DNS服务器地址为ns.wsescape.com.
# 邮箱地址为nsadmin.wsescape.com.
# 第一版为2016052201,标识版本号
wsescape.com.86400INSOAns.nsadmin.wsescape.com.(
2016052201  ;序列号
2H          ;刷新时间,2小时
10M;重试时间,10分钟
1W;过期时间,一周
1D;否定答案的TTL值,一天
)

NS

  • name: 当前区域的名字

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

  • 注意:

    (1) 相邻的两个资源记录的name相同时,后续的可省略

    (2) 对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录

# 一个区域可以有多个NS记录
# ns1.wsescape.com.和ns2.wsescape.com.都应该在后续有一个A记录
wsescape.com.INNS  ns1.wsescape.com.
wsescape.com.INNS  ns2.wsescape.com.

MX

  • name: 当前区域的名字

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

    (1)一个区域内,MX记录可以有多个

    (2)但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级

    (3)数字越小优先级越高

  • 注意

    (1) 相邻的两个资源记录的name相同时,后续的可省略

    (2) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

# mx1.wsescape.com.和mx2.wsescape.com.都应该在后续有一个A记录
wsescape.com.IN  MX  10  mx1.wsescape.com.
INMX  20  mx2.wsescape.com.

A

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

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

  • 注意

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

# 轮询
www.wsescape.com.IN  A1.1.1.1
www.wsescape.com.IN  A  1.1.1.2

# 一个主机有多个名称而已
mx1.wsescape.com.IN    A   1.1.1.3
mx2.wsescape.com.  IN  A   1.1.1.3
# 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
*.wsescape.com.IN  A  1.1.1.4
wsescape.com.IN  A   1.1.1.4

AAAA

与 `A` 记录类似,这是只是表示IPv6地址而已
# 轮询
www.wsescape.com.IN  AAAA1.1.1.1
www.wsescape.com.IN  AAAA  1.1.1.2

# 一个主机有多个名称而已
mx1.wsescape.com.IN    AAAA   1.1.1.3
mx2.wsescape.com.  IN  AAAA   1.1.1.3

# 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
*.wsescape.com.IN  AAAA  1.1.1.4
wsescape.com.IN  AAAA   1.1.1.4

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

  • 注意

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

# 实例
4.3.2.1.in-addr.arpa.INPTRwww.wsescape.com.

# 如果3.2.1是网络地址简写成为
4   IN  PTRwww.wsescape.com.

# 如果2.1是网络地址简写成为
4.3  IN  PTRwww.wsescape.com.

CNAME

  • name: 别名的FQDN

  • value: 正工名字的FQDN

web.escapelife.com.IN  CNAME  www.escapelife.com.

1.8 个人使用

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

类似根域授权tld

.com.INNS     ns1.com.
.com.   IN    NSns2.com.
ns1.com.INA   2.2.2.1
ns2.com.      INA2.2.2.2

这里以wsescape.com为例

# wsescape.com. 在.com的名称服务器上,解析库中添加资源记录
wsescape.com.INNSns1.wsescape.com.
wsescape.com.INNSns2.wsescape.com.
wsescape.com.INNSns3.wsescape.com.
ns1.wsescape.com.INA  3.3.3.1
ns2.wsescape.com.INA  3.3.3.2
ns3.wsescape.com.INA  3.3.3.3

域名注册

  • 代理商

  • 万网

  • 新网

  • godaddy

绑定服务器

  • 注册完成以后,想自己用专用服务来解析?

  • 管理后台,把 NS 记录指向的服务器名称和 A 记录指向的服务器地址

二、常用命令

2.1 dig命令

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

  • 用于询问 DNS 域名服务器的灵活的工具

  • 除非被告知请求特定域名服务器,dig将尝试 /etc/resolv.conf中列举的任何服务器

  • 当未指定任何命令行参数或选项时,dig将对.(根)执行NS查询

格式

dig [-t type] name [@SERVER] [query options]

语法

  • 类型查询

dig -t NS wsescape.com @172.16.242.178
dig -t MX wsescape.com @172.16.242.178
dig -t A www.baidu.com
  • 查询选项

+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:
dig -x IP @SERVER
dig -x 172.16.100.11 @172.16.242.178
  • 模拟区域传送:

dig -t axfr ZONE_NAME @SERVER
dig -t axfr wsescape.com @172.16.242.178

2.2 host命令

host命令用于查询DNS的工具

  • 它通过常转换指定主机名称的主机名称为 IP 地址

  • 当不指定参数时,它显示host命令的帮助信息

格式

host [-t type] name [SERVER]

语法

  • -a

等同于-v -t

  • -C

在需要认证的域名服务器上查找 SOA 记录

  • -l

列出一个域内所有的主机

  • -i

反向查找

  • -r

不使用递归处理

  • -v

运行时显示详细的处理信息

  • -4

用于 IPv4 的查询

  • -6

用于 IPv6 的查询

  • -t <类型>

指定类型,包括a、all、mx、ns等

实例展示

[root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
Using domain server:
Name: 172.16.242.178
Address: 172.16.242.178#53
Aliases:
www.wsescape.com has address 172.16.100.11
www.wsescape.com has address 172.16.100.12

[root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
Using domain server:
Name: 172.16.242.178
Address: 172.16.242.178#53
Aliases:
www.wsescape.com has address 172.16.100.12
www.wsescape.com has address 172.16.100.11
[root@localhost ~]# host --help
host: illegal option -- -
Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]
            [-R number] [-m flag] hostname [server]
       -a is equivalent to -v -t ANY
       -c specifies query class for non-IN data
       -C compares SOA records on authoritative nameservers
       -d is equivalent to -v
       -l lists all hosts in a domain, using AXFR
       -i IP6.INT reverse lookups
       -N changes the number of dots allowed before root lookup is done
       -r disables recursive processing
       -R specifies number of retries for UDP packets
       -s a SERVFAIL response should stop query
       -t specifies the query type
       -T enables TCP/IP mode
       -v enables verbose output
       -w specifies to wait forever for a reply
       -W specifies how long to wait for a reply
       -4 use IPv4 query transport only
       -6 use IPv6 query transport only
       -m set memory debugging flag (trace|record|usage)

2.3 nslookup命令

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

格式

nslookup [-option] [name | -] [server]

语法

  • 非交互模式

  • 直接查询即可

  • 交互式模式

nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME: 要查询的名称;

实例展示

[root@localhost ~]# nslookup
> server 172.16.242.178
Default server: 172.16.242.178
Address: 172.16.242.178#53
> set q=A
> www.wsescape.com
Server:172.16.242.178
Address:172.16.242.178#53

Name:www.wsescape.com
Address: 172.16.100.11
Name:www.wsescape.com
Address: 172.16.100.12
> set q=NS
> wsescape.com
Server:172.16.242.178
Address:172.16.242.178#53

wsescape.comnameserver = ns2.wsescape.com.
wsescape.comnameserver = ns1.wsescape.com.
# 非交互模式查询
[root@rudder ~]# nslookup baidu.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 220.181.111.85
Name:   baidu.com
Address: 220.181.111.86
# 非交互模式查询
[root@rudder ~]# nslookup
> www.baidu.com
Server:172.17.0.254
Address:172.17.0.254#53

Non-authoritative answer:     #非权威答案,表明是在缓存中读取的
www.baidu.comcanonical name = www.a.shifen.com.
Name:www.a.shifen.com
Address: 61.135.169.105       #返回第一个IP地址
Name:www.a.shifen.com
Address: 61.135.169.125       #返回第二个IP地址
> server 8.8.8.8              #设置域名服务器为 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> www.baidu.com               #再次请求百度的IP地址
Server:8.8.8.8
Address:8.8.8.8#53

Non-authoritative answer:
www.baidu.comcanonical name = www.a.shifen.com.
Name:www.a.shifen.com
Address: 220.181.111.147      #不同的DNS获取的IP地址是不同的。

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

重新启动服务器

实例展示

# rndc工具能够帮助我们输出系统信息
[root@localhost ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6
CPUs found: 1
worker threads: 1
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

# rndc不重启加载区域文件
[root@localhost ~]# rndc reload

三、BIND的安装配置

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

3.1 程序包

只需要安装bindbind-libsbind-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下面的链接文件中

bind-sdb

bind-dyndb-ldap

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

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本地回环地址的解析库

#  在CentOS6下
[root@localhost ~]# rpm -ql bind | less
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/usr/lib64/bind
/usr/sbin/arpaname
......
# @表示当前区域的区域名称,在主配置文件/etc/named.conf中定义的
# TTL的值没写,因为定义了宏$TTL 1D,直接继承
# rname.invalid.表示管理员的邮箱地址
# 后面的如NS、A等缺省,因为继承前者的

[root@localhost named]# cat /var/named/named.localhost
$TTL 1D
@IN SOA@ rname.invalid. (
0; serial
1D; refresh
1H; retry
1W; expire
3H ); minimum
NS@
A127.0.0.1
AAAA::1

[root@localhost named]# cat /var/named/named.loopback
$TTL 1D
@IN SOA@ rname.invalid. (
0; serial
1D; refresh
1H; retry
1W; expire
3H ); minimum
NS@
A127.0.0.1
AAAA::1
PTRlocalhost.

主配置文件

  • 全局配置

options {}

  • 日志子系统配置

logging {}

  • 区域定义

本机能够为哪些zone进行解析,就要定义哪些zone

zone "ZONE_NAME" IN {}

  • 注意

任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上

[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory"/var/named";
dump-file"/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     { localhost; };
recursion yes;

dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
type hint;
file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
# localhost.localdomain就是区域名称,也就是@
[root@localhost ~]# cat /etc/named.rfc1912.zones
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};

zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};

3.3 缓存名称服务器配置

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

  • 修改listen-on port 53

  • 修改allow-query

  • 修改recursion

(1)安装

[root@localhost ~]#yum install bind

(2)启动

[root@localhost ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

(3)查看

# 为了安全,安装上bind之后,默认只会监听本地,不对外提供服务
# 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的`IP`地址上
# 编辑主配置文件即可

[root@localhost ~]# ss -tunlp | grep :53
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",39822,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",39822,513))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",39822,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",39822,20))

(4)修改

# 修改之前先备份一下
# 逗号之前没有内容,默认为前一个的名称,后面为复制的内容

[root@localhost ~]# cp /etc/named.conf{,.bak}
[root@localhost ~]# ll /etc/named*
-rw-r-----. 1 root named  984 11月 20 2015 /etc/named.conf
-rw-r-----. 1 root root   984 6月  20 21:53 /etc/named.conf.bak
# //表示单行注释,注释ipv6
# /**/表示多行注释
# 修改的时候必须以;结尾且{}的两端必须有空格,否则为语法错误
# directory用来定义区域解析库文件存放位置

# 建议关闭dnssec功能
# 将dnssec-enable和dnssec-validation改为no,并注释key文件即可

# 把能够以外网进行通信的地址写在listen-on port 53之后,如果有多个可以多个添加,不能省略
# 如果将listen-on port 53进行注释或者删除,默认是监听在所有
# 将allow-query注释或改为allow-query { any; };
# 是否允许递归recursion,必须为yes

[root@localhost ~]# vim /etc/named.conf
options {
        listen-on port 53 { 172.16.242.178; 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
//      allow-query     { localhost; };
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";
//      managed-keys-directory "/var/named/dynamic";
};

(5)重启生效

# 重启之后才能生效配置
[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

[root@localhost ~]# ss -tunlp | grep :53
udp    UNCONN     0      0         172.16.242.178:53                    *:*      users:(("named",40086,513))
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",40086,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",40086,514))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",40086,22))
tcp    LISTEN     0      3         172.16.242.178:53                    *:*      users:(("named",40086,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",40086,20))

3.4 主 DNS 名称服务器配置

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

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

  • 在/var/named/增加zone文件

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

格式

# master表示主DNS
# slave表示从DNS
# hint表示根
# forward做转发
# file使用的是主配置文件directory定义的路径
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};

修改配置

# 在/etc/named.rfc1912.zones文件内定义域名
# named-checkconf用来检查语法错误
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "wsescape.com" IN {
        type master;
        file "wsescape.com.zone";
};

[root@localhost ~]# named-checkconf

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

格式

出现的内容:
宏定义;
资源记录;

修改配置

# 这里$TTL用于定义TTL的值,86400为秒,可以使用1D来代替
# $ORIGIN用于指定域名词尾,如ns以及mx都为缺省了
# named-checkzone
# 两个www,在访问的时候会进行轮询操作的
# 泛域名解析这里的*,表示无论用户输入什么都不报错
# 或者写成*  IN  A  172.16.100.11,因为CNAME不能输入ip地址

[root@localhost ~]# cd /var/named/
[root@localhost named]# vim wsescape.com.zone
$TTL 86400
$ORIGIN wsescape.com.
@    IN    SOA    ns1.wsescape.com.    admin.wsescape.com (
2016042201
1H
5M
7D
1D )
 IN    NS        ns1
 IN    NS        ns2
 IN    MX 10     mx1
 IN    MX 20     mx2
ns1  IN    A172.16.100.11
ns2 IN    A172.16.100.12
mx1 IN    A172.16.100.13
mx2 IN    A172.16.100.14
www IN    A172.16.100.11
www IN    A172.16.100.12
ftp INCNAMEwww
*    IN CNAME   www

[root@localhost named]# named-checkzone "wsescape.com" /var/named/wsescape.com.zone
zone wsescape.com/IN: loaded serial 2016042201
OK

更改权限

# 可以查出进程是以named运行的
# 其中/etc/named.conf文件的属主为root,属组为named
# 为了安全起见,对自己创建的文件进行权限修改

[root@localhost named]# ps -aux | grep named
named     40086  0.0  1.1 160072 11736 ?        Ssl  22:07   0:00 /usr/sbin/named -u named
root      40785  0.0  0.0 103324   864 pts/0    S+   23:19   0:00 grep named

[root@localhost named]# ll /etc/named.conf
-rw-r-----. 1 root named 1004 6月  20 22:23 /etc/named.conf

[root@localhost named]# id named
uid=25(named) gid=25(named) 组=25(named)

[root@localhost named]# ll
总用量 32
drwxrwx---. 2 named named 4096 6月  20 21:45 data
drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
-rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
-rw-r-----. 1 root  named  152 12月 15 2009 named.empty
-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
-rw-r--r--. 1 root  root   408 6月  20 22:53 wsescape.com.zone

[root@localhost named]# chmod 640 wsescape.com.zone
[root@localhost named]# chown :named wsescape.com.zone

[root@localhost named]# ll
总用量 32
drwxrwx---. 2 named named 4096 6月  20 21:45 data
drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
-rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
-rw-r-----. 1 root  named  152 12月 15 2009 named.empty
-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
-rw-r-----. 1 root  named  408 6月  20 22:53 wsescape.com.zone

重启生效

[root@localhost ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

# 使用dig命令来帮助我们验证信息
# 因为之前的配置,这里会进行轮询操作
[root@localhost ~]# dig -t A wsescape.com @172.16.242.178

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) 定义区域

# file同样是一个相对路径,/var/named/
# 如果有多个正向域对应同一个网络的话,多个区域就重名了,所以这里的网络地址其实自己可以随意定义,如"网络地址1.zone"、"网络地址2.zone"等
# 如果只有一个反向区域的话,就只需要书写一个反向解析库,就可以"网络地址.zone"这样命名了
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone";
};
# 因为172.16.242.178和我们的其他服务器(172.16.100.12/172.16.100.11),所以只能写成"16.172.in-addr.arpa"和"172.16.zone"
# 最后添加如下内容
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
};

(2) 区域解析库文件

  • 以PTR记录为主

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

# $TTL表示宏定义的TTL值
# $ORIGIN这里表示反向区域的名称
# 反向的主机名称不能省略
# 这里的11和12会自动补充上16.172.in-addr.arpa.
# 别名记录不用反解,所以ftp没有书写反向解析
# 这里可以使用vim -o wsescape.com.zone 16.172.zone来同时编辑两个文件的

[root@localhost ~]# cd /var/named/
[root@localhost named]# vim 100.16.zone
$TTL 86400
$ORIGIN 16.172.in-addr.arpa.
@IN  SOAns1.wsescape.com. admin.wsescape.com. (
  2016042201
  1H
  5M
  7D
  1D )
IN  NSns1.wsescape.com.
IN    NSns2.wsescape.com.
11.100IN  PTRns1.wsescape.com.
11.100IN  PTRwww.wsescape.com.
12.100IN  PTRmx1.wsescape.com.
12.100IN  PTRwww.wsescape.com.
13.100IN  PTRmx2.wsescape.com.
# 反向解析如果没有$ORIGIN的情况下,也可以这样写
[root@localhost named]# vim 100.16.zone
$TTL 86400
@IN  SOAns1.wsescape.com. admin.wsescape.com. (
  2016042201
  1H
  5M
  7D
  1D )
16.172.in-addr.arpa.IN  NSns1.wsescape.com.
IN    NSns2.wsescape.com.
11.100IN  PTRns1.wsescape.com.
11.100IN  PTRwww.wsescape.com.
12.100IN  PTRmx1.wsescape.com.
12.100IN  PTRwww.wsescape.com.
13.100IN  PTRmx2.wsescape.com.

(3) 修改权限并重启

[root@localhost named]# chmod 640 16.172.zone
[root@localhost named]# chmod :named 16.172.zone

# 语法
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone "16.172.inaddr-addr" 16.172.zone
ok
[root@localhost named]# service named reload

# 检测
[root@localhost named]# host -t PRT 172.16.100.12 172.16.242.178
[root@localhost named]# dig -x 172.16.100.12 @172.16.242.178

3.6 从 DNS 名称服务器配置

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

主从复制

(1)应该为一台独立的名称服务器

(2)主服务器的区域解析库文件中必须有一条 NS 记录是指向从服务器

(3)从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中

(4)主服务器得允许从服务器作区域传送

(5)主从服务器时间应该同步,可通过ntp进行

(6)bind程序的版本应该保持一致;否则,应该从高逐低

定义从区域的方法

  • 正向从服务器格式

# 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
  • 反向从服务器格式

# 从服务器同步主服务器的解析文件会放在/var/named/slaves/中
zone "Reverse_Net_Addr.in-addr.arpa" IN {
type master;
file "SOMEFILE.zone";
};
  • (1)正向从服务器的实例

# 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
# 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "wsescape.com" IN {
type slave;
masters { 172.16.242.178; };
file "slaves/wsescape.com.zone";
};

# 重起服务即可成效
[root@localhost ~]# rndc reload

# 可以通过log进行查看
[root@localhost ~]# tail /var/log/messages
  • (2)反向从服务器的实例

# 注意这里的从DNS服务器,需要在主DNS服务器中定义上NS记录
# 这样才能在主DNS的解析库发生改变的时候通知从DNS服务器进行同步,否则不会同步的

[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.242.178; };
file "slaves/172.16.zone";
};

# 重起服务即可成效
[root@localhost ~]# rndc reload

# 可以通过log进行查看
[root@localhost ~]# tail /var/log/messages

四、高级功能之子域授权

4.1 子域授权的特点

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

特点

  • 分布式数据库

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

4.2 子域授权的方法

正向解析区域子域方法

# 定义一个子区域
# 在/var/named/下的指定文件中进行配置,如这里的/var/named/wsescape.com.zone
# 在我们授权了wsescape.com的前提下,定义两个子域,分别为ops和fin两个

ops.wsescape.com.INNSns1.ops.wsescape.com.
ops.wsescape.com.INNSns2.ops.wsescape.com.
ns1.ops.wsescape.com.INA1.1.1.1
ns2.ops.wsescape.com.INA1.1.1.2

fin.wsescape.com.INNSns1.fin.wsescape.com.
fin.wsescape.com.INNSns2.fin.wsescape.com.
ns1.fin.wsescape.com.INA3.1.1.1
ns2.fin.wsescape.com.INA3.1.1.2

4.3 解析方式

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

外部解析

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

  • 先找根(.),根说你去找com

  • 再找com,com说你去找wsescape

  • 再找wsescape,wsescape说你去找ops

  • 最后ops返回需要的信息

内部解析

(1)当wsescape.com下的一台主机需要访问ops下的www主机时,虽然wsescape.com的DNS主机不给于解析,但是它知道子域的位置,所以会立即指向ops的DNS服务器。

(2)当ops下的一台主机需要访问wsescape.com下的www主机时,就需要进过以下几个阶段:

  • 先找ops,ops说你找根

  • 再找根(.),根说你去找com

  • 再找com,com说你去找wsescape

  • 最后wsescape返回需要的信息

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

4.4 定义转发服务器

注意

(1)关闭dnssec功能

dnssec-enable no
dnssec-validation no

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

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

转发模式

(1) 全局转发

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

# forward定义转发模式
# first表示先转发给指定解析服务器,如无响应的话再找根服务器,即先递归在迭代
# only表示转发给指定解析服务器,仅仅递归
# fowwarders定义转发给谁

Options {
forward { first|only };
forwarders;
}

(2) 区域转发

仅转发对特定的区域的请求至某服务器

需要自己定义区域和区域类型等信息

# forward定义转发模式
# first表示先转发给指定解析服务器,如无响应的话再找根服务器,即先递归在迭代
# only表示转发给指定解析服务器,仅仅递归
# fowwarders定义转发给谁

zone "ZONE_NAME" IN {
type forward;
forward { first|only };
forwarders;
}

4.5 子域父域配置

前提:

  • 父域IP地址 ==> 172.16.100.11

  • 子域IP地址 ==> 172.16.100.12

  • 能访问互联网的IP地址 ==> 172.16.0.1

(1)父域服务器配置

# 一台独立的主机,这里配置父域就是在主服务器配置的基础上,添加子域而已
# 注释的话,默认监听所有
# 如果发现测试无法成功,查看/etc/named.conf中的dnssec改为no而非注释掉,否则导致本地客户端不接受
[root@localhost ~]# yum installl -y bind

[root@localhost ~]# vim /etc/named.conf
options {
//      listen-on port 53 { 172.16.242.178; 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
//      allow-query     { localhost; };
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";
//      managed-keys-directory "/var/named/dynamic";
};
[root@localhost ~]# service named start
[root@localhost ~]# ss -tunl | grep :53
udp    UNCONN     0      0              127.0.0.1:53                    *:*
udp    UNCONN     0      0                    ::1:53                   :::*
tcp    LISTEN     0      3                    ::1:53                   :::

标签: 连接器xf3h

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司