关键词: 正向解析 反向解析 主从复制 自域授权 视图

一、DNS基本原理

1.1 什么是DNS?BIND又是什么?

DNS:Domain Name Service,它是一个基于应用层的协议,是C/S构架的,监听在 53/udp和 53/tcp。

BIND: Berkerley Internet Name Domain, 它是DNS域名解析的一种实现方式。

1.2 DNS发展

早期的域名解析方式:



但是随着互联网的普及,全世界的电脑太多了,要解析就很不容易,所以现在的互联网是分层树状结构的去解析,结构图如下

二、DNS基本概念

2.1 DNS服务器的类型有哪些?
有主DNS服务器、辅助DNS服务器、缓存DNS服务器、转发器 2.2 解析类型有哪些?
有正向区域解析和反向区域解析,正向解析为name --> IP, 反向解析为IP--> Name 2.3 主DNS服务器和从DNS服务器有什么区别?
主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理员维护
从DNS服务器:从主DNS服务器或其他的从DNS服务器那里复制(区域传递)一份解析库 2.4 区域传送有哪些?
全量传送:传送整个解析库
增量传送:传送解析库变化的那部分内容 2.5 DNS查询类型有哪些?
递归查询: 一次请求就得到正确答案
迭代查询: 一次请求得到一个答案,然后根据答案再去发送请求,经过多次请求后得到正确答案的过程 2.5 一次完整的查询请求经过的流程
client --> hosts文件 --> dns service
(local cache --> dns server)(recursion递归) --> server cache --> iteration(迭代) 2.6 bind是什么?
bind是dns协议的一种实现 2.7 bind如何进行解析?
bind解析是通过区域解析库来实现 2.8 区域解析库是什么?
区域解析库表现形式是由众多RR(Resource Record )组成,RR在配置文件中进行定义 2.9 资源记录
2.9.1 资源记录类型有哪些?
记录类型有: A、AAAA、PTR、SOA、NS、CNAME、MX 2.9.2 资源记录各类型含义?
SOA: Start Of Authority, 起始授权记录:一个区域解析库有且仅能有一个SOA记录,而且必须为解析库的第一条记录。
A: internet Address, 作用就是提供正向解析: FQDN --> IP
AAAA: ipv6地址正向解析: FQDN --> IPv6
PTR: PoinTeR, 反向解析:Ip --> FQDN
NS: Name Server, 标明当前区域的DNS服务器
CNAME: Canonical Name, 别名记录
MX:Mail eXchanger, 邮件服务器 2.9.3 资源记录定义的格式及定义示例
语法: name [TTL] IN rr_type value
注意: a. TLL可从全局继承
b. @可用于引用当前区域的名字 SOA:
name: 当前区域的名字,如“baidu.com.”
value: 有多部分组成
1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
2. 当前区域管理员的游戏地址,地址中不能使用@符号,一般用.替换,如 alen.chengkaihua.com
3. (主从服务协调属性的定义以及否定的答案的统一TTL值)
例如:
alen.com. IN SOA ns1.alen.com. nsadmin.alen.com. (
2015042201 ; 序列号
2H ;刷新时间
10M ;重试时间
1W ; 过期时间
1D ;否定答案的TTL值 ) NS:
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字
注意: 一个区域可以有多个NS记录
例如:
alen.com. IN NS ns1.alen.com.
alen.com. IN NS ns2.alen.com.
注意:1.相邻的两个资源记录的name相同时,后续的可省略
2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录 MX:
name: 当前区域的名字
value: 当前区域的某邮件服务器的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高。
例如:
alen.com. IN MX 10 mx1.alen.com.
alen.com. IN MX 20 mx2.alen.com
注意: 对MX记录而言,每一个MX记录后面的服务器名字,都应该在后续有一个A记录
A:
name: 某主机的FQDN
value: 主机名对应主机的IP地址
例如:
ns1.alen.com. IN A 1.1.1.1
ns2.alen.com. IN A 1.1.1.2
MX1.alen.com. IN A 1.1.1.3
MX2.alen.com. IN A 1.1.1.4
注意:
*.alen.com. IN A 1.1.1.5
避免用户写错答案时给错误答案,可通过泛域名解析进行解析至某特定地址 AAAA:
name: FQDN
value: IPv6 PTR:
name: IP,有特定格式,IP地址反过来写,1.1.1.2要写成2.1.1.1.in-addr.arpa. value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.alen.com. CNAME:
name: 别名的FQDN
value: 正式名字的FQDN
例如:
web.alen.com. IN CNAME www.alen.com.

三、前期准备

3.1 实验目标

以域名alen.com.为例,配置一台主DNS服务器一台从服务器:

192.168.1.102 主DNS服务器

192.168.1.103 从DNS服务器

实现正反向解析、主从同步功能

3.2 安装包及配置文件
查看bind服务相关包,安装所需要的包即可:
# yum list bind*
安装bind服务及其依赖包,主要安装这三个包: bind、bind-libs、bind-utils
# yum install bind bind-libs bind-utils
bind相关配置文件:
服务脚本:/etc/rc.d/init.d/named
主配置文件: /etc/named.conf, /etc/named.rfc1912.zones
解析库文件:/var/named/ZONE_NAME.ZONE(需要自己定义)
日志文件: /var/log/messages

四、首先搭建一台主DNS服务器

4.1 主DNS实现正向解析和反向解析
4.1.1 配置缓存名称服务器
4.1.1.1 监听外部地址即可
4.1.1.2 dnssec: 建议测试时关闭dnssec
cp /etc/named.conf{,.bak}
vim /etc/named.conf
options {
// listen-on port 53 { 192.168.1.102; 127.0.0.1; }; //可以设置ip也可以直接注释整行
// 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 { any; }; //可以设置为any也可以直接注释掉
recursion yes;
//关闭dnssec
// dnssec-enable yes;
// dnssec-validation yes;
/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";
// managed-keys-directory "/var/named/dynamic";
}; 4.1.2 在缓存dns服务器的基础上,配置主DNS服务器
cp /etc/named.rfc1912.zones{,.bak}
vim /etc/named.rfc1912.zones 4.1.2.1 在最后一行添加正向解析区域和反向解析区域:
zone "alen.com" IN {
type master; // 正向区域类型
file "alen.com.zone"; //相对于/var/named而言,输入区域相对路径
}; zone "1.168.192.in-addr.arpa" IN { //反向解析区域
type master;
file "192.168.1.zone";
};
定义区域正向解析库文件
在/var/named创建 alen.com.zone正向解析库文件并配置
$TTL 86400
$ORIGIN alen.com.
@ IN SOA ns1.alen.com. admin.alen.com. (
2010010101 ;序列号
1H ;刷新时间
5M ;重试时间
7D ;七天过期
1D ) ;否定答案的统一TTL值
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 192.168.1.102
ns2 IN A 192.168.1.103
mx1 IN A 192.168.1.104
mx2 IN A 192.168.1.105
www IN A 192.168.1.102
www IN A 192.168.1.103
ftp IN CNAME www
alen.com. IN A 192.168.1.102
* IN A 192.168.1.102 ;泛域名解析
定义区域反向解析库文件
在/var/named目录下创建 192.168.1.zone反向解析库文件并配置
$TTL 1D
$ORIGIN 1.168.192.in-addr.arpa.
@ IN SOA ns1.alen.com. admin.alen.com. (
2015041101 ;序列号
2H ;刷新时间
5M ;重试时间
1W ;过期时间一周
1D ) ;否定答案的统一TTL值
IN NS ns1.alen.com.
IN NS ns2.alen.com.
102 IN PTR ns1.alen.com.
103 IN PTR ns2.alen.com.
102 IN PTR www.alen.com.
103 IN PTR www.alen.com.
104 IN PTR mx1.alen.com.
105 IN PTR mx2.alen.com.

五、测试

5.1 测试工具介绍
5.1.1 dig的使用
dig [-t type] name [@SERVER] [query options]
用于测试DNS系统,不会查询hosts文件进行解析
比如: dig -t A ns1.alen.com @192.168.1.102 查询选项:
+[no]trace: 跟踪解析过程
+[no]recurse: 递归解析 测试反向解析:
dig -x IP @SERVER
比如: dig -x 192.168.1.102 @ 192.168.1.102 模拟区域传送:
dig -t axfr ZONE_NAME @SERVER 5.1.2 host命令
host [-t type] name [SERVER]
比如: host -t A ns1.alen.com 192.168.1.102 5.1.3 nslookup命令
nsloopup [-option] [name | - ] [server]
交互式模式:
server IP: 指明使用哪个DNS server 进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
比如: nsloopup
> server 192.168.1.102
> set q=A
> ns1.alen.come 5.2 测试
修改 alen.com.zone和192.168.1.zone文件属组
# chown :named alen.com.zone
# chown :named 1.168.192.zone
修改 alen.com.zone和192.168.1.zone权限
# chmod 640 alen.com.zone
# chmod 640 192.168.1.zone
检查区域配置文件有无错误:
# named-checkconf //检查主配置文件
# named-checkzone "alen.com" alen.com.zone
# named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone
重启named服务
# service named restart
测试资源记录
# dig -t NS alen.com @192.168.1.102
# dig -t A ns1.alen.com @192.168.1.102
# dig -t A www.alen.com @192.168.1.102
# dig -t A pop.alen.com @192.168.1.102
# dig -t A alen.com @192.168.1.102
# host -t A ns2.alen.com 192.168.1.102
测试反向解析:
# dig -x 192.168.1.102 @192.168.1.102
至此,一台主DNS服务器就配置好了,且支持正反向解析功能。

六、主从复制

上面我们配置了一台主DNS服务器,下面把192.168.1.103这台电脑作为辅助DNS服务器,来实现两台电脑的主从架构
从服务器上进行配置:
1. 先模拟传送测试是否可以正常传送
# dig -t axfr alen.com @192.168.1.102 2.如果可以正常传送,再进行配置从服务器
# yum install bind //centos6默认安装了libs和utils包,所以只需要安装bind包就可以
3. 从服务只需要配置区域,不需要配置资源记录
vim /etc/named.conf
配置缓存服务器,和上面一样
options {
listen-on port 53 { 192.168.1.103; 127.0.0.1; }; //监听对外ip
// 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 { any; };
recursion yes;
// dnssec-enable yes;
// dnssec-validation yes;
/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";
// managed-keys-directory "/var/named/dynamic";
}; vim /etc/named.rfc1912.zones
zone "alen.com" IN {
type slave;
masters { 192.168.1.102; };
file "slaves/alen.com.zone";
}; zone "1.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.1.102; };
file "slaves/192.168.1.zone";
}; 配置完后检查语法错误
# named-checkconf
重载服务
# rndc reload
查看日志
# tail /var/log/messages
传送成功后在/var/named目录下会自动创建一个192.168.1.zone文件和alen.com.zone文件 rndc工具总结
rndc COMMAND
reload: 重载主配置文件和区域解析库文件
reload zone: 重载区域解析库文件
retransfer zone: 手动启动区域传送过程,而不管序列号是否增加
notify zone:重新对区域传送发通知
reconfig:重载主配置文件
querylog:开启或关闭查询日志,注意只在定位错误的时候开启
trace:递增debug使用的级别,生产环境中切莫开启,很影响性能
trace LEVEL:指定使用的级别

七、子域授权

1.1 自域授权架构

1.2 为何要转发?
从上面的架构图中可以看到:客户端 --> ns1
客户端请求解析的主机在alen域内的ns1主机, 客户端给父域ops发送请求,但是ops是找不到alen域内的ns1的,它只会从根域进行迭代去找,所以这种情况就要考虑转发。从而让客户端可以直接向alen域发送请求找到ns1主机。 1.3 如何定义转发服务器:
7.3.1 全部转发: 凡是对非本机所有负责解析的区域的请求,都转发给指定服务器
options {
forward { first|only }
forwarders
}
1.3.2 区域转发:仅抓发对特定区域的请求至某服务器
zone "ZONE_NAME" IN {
type forward;
forward { first|only };
forwarders
}
要点: first: 先转发,没有得到响应结果就自己去寻找根域
only: 转发后没有响应结果就放弃继续寻找根域 1.4 定义子域并实现转发功能实例
1.4.1 定义子域
在父域(192.168.1.102)中:
vim /var/named/alen.com.zone
ops IN NS ns1.ops
ns1.ops IN A 192.168.1.103 在子域(192.168.1.103)中:
添加子域:
vim /etc/named.rfc1912.zones
zone "ops.alen.com" IN {
type master;
file "ops.alen.com.zone";
};
添加子域的资源记录
vim /var/named/ops.alen.com.zone
$TTL 1d
$ORIGIN ops.alen.com.
@ IN SOA ns1.ops.alen.com. admin.ops.alen.com. (
2015041001
1H
10M
3D
1D )
IN NS ns1
ns1 IN A 192.168.1.103
www IN A 192.168.1.103
* IN A 192.168.1.103 1.4.2 实现转发
1. 全部转发
在 父域192.168.1.102上实现
vim /etc/named.conf
在options中添加两行:
forward first;
forwarders { 192.168.1.1; };
测试:
# dig -t A www.baidu.com @192.168.1.102
注意:
关掉dnssec验证机制
dnssec-enable no;
dnssec-validation no
/*include "/etc/named.root.key";
此配置保存根域名服务器的私钥文件,根域名解析服务器为了防止DNS劫持,采用一种DNSSEC安全扩展技术,采用证书认证机制保证数据安全。
如果注释此配置则DNS服务器与根域名服务器之间传递解析不需要经过认证。
如果开启此配置如果根的私钥不匹配则无法正常解析,所以有时候我们配置缓存转发服务器的时候可以选择注释此项。
2 区域转发
在子域 192.168.1.103上实现
vim /etc/named.rfc1912.zones
在最后一行添加:
zone "alen.com" IN {
type forward;
forward only;
forwarders { 192.168.1.102; }; //子域指向父域
};
关掉dnssec验证机制
dnssec-enable no;
dnssec-validation no 1.5 bind中安全相关的配置
acl: 把一个或多个ip地址归并为一个集合,并通过一个统一的名称进行调用
示例:
acl mynet {
192.168.1.102;
192.168.1.103;
192.168.1.0/24;
}
1.5.1 bind中四个内置的acl
none: 没有一个主机
any: 任意主机
local: 本机
localnet: 本机的IP同掩码运算后得到的网络地址
1.5.2 访问控制的命令
allow-query {} : 允许查询的主机,白名单,注意:定义在zone中只控制一个zone,定义在options中控制所有的zone
allow-transfer {}: 允许区域传送的主机: 白名单
allow-recursion {}: 允许递归的主机
allow-update {}: 允许更新区域数据库的内容 1.5.3 实例:
1.5.3.1 192.168.1.102:
vim /etc/named.conf
添加acl
acl slaves { //定义访问控制列表slaves
192.168.1.103;
192.168.1.102;
1127.0.0.1;
}
在/etc/named.rfc1912.zones中:
zone "alen.com" IN {
type master;
file "alen.com.zone";
allow-query { 127.0.0.1; }; //只允许本机查询
};
# dig -t A www.alen.com @127.0.0.1 // 其他任何ip都不能进行查询 1.5.3.2
添加:
allow-transfer { slaves; };
# dig -t axfr alen.com @192.168.1.103 //只允许本机及子域传送 1.5.3
全局配置中:
vim /etc/named.conf
注释 recursion {};
添加我们自己定义的允许递归的主机
allow-recursion { 192.168.1.102; 127.0.0.1; }; //只允许本机进行递归 1.5.3.4 为了安全,一般allow-update都设为none
vim /etc/named.rfc1912.zones
zone "alen.com" IN {
type master;
file "alen.com.zone";
// allow-query { 127.0.0.1; }; //只允许本机查询
allow-update { none; }; // 不允许任何主机更新
};

二、视图

2.1 view是什么?
view是bind配置逻辑上的一个容器 2.2 为什么要使用视图?
不同网络(比如联通和电信),或者不同区域(客户的来源距离),为了更好的客户体验,所以根据不同客户来源进行不同的zone配置,进而得到不同的请求结果。简单点说,为了实现不同客户请求得到不同的结果,所以用到view这个功能。 2.3 view的特点
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
每个view用来匹配一组客户端
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件 2.4 view的示例
view VIEW_NAME {
match-clients { }; //匹配不同的客户来源
zone;
}
注意:
1. 一旦启用了view,所有的zone都只能定义在view中
2. 仅有必要在匹配到允许递归请求的客户所在view中定义根区域
3.客户端请求到达时,是自上而下检查每个view所服务的客户端列表 2.5 如何实现view的不同客户来源
使用acl来实现:
比如:acl inet {
192.168.0.0/24;
127.0.0.1/8;
};

至此,DNS基本知识点介绍这些。DNS的常用架构不单单是一个主一个从,还有其他架构方式,应该在实际应用中视情况选择。

linux服务基础之DNS正反向解析、主从同步、子域授权及视图的更多相关文章

  1. DNS主从服务,子域授权,view视图,日志系统,压力测试

    DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...

  2. DNS的主从、子域授权和转发服务器

    DNS的主从.子域授权和转发服务器 主从DNS 注意: 1.全局配置options{} 里面的内容,其中 listen-on port 53 {any or local:}:或者直接注释掉,或删掉 a ...

  3. linux web服务基础知识,dns

    #web服务基础知识c/s 客户端/服务器b/s 浏览器/服务器 nginx   >   web  server  服务端浏览器  >    web  client  客户端 #dns解析 ...

  4. 基于Bind实现的DNS正反向解析及主从DNS的配置

    一.什么是DNS? 1.1 简单的理解,Domain Name System,是互联网一项核心的服务,他作为一个桥梁可以将域名和IP地址相互因素的一个分布式数据库,能够使人更加方便的访问互联网,而不用 ...

  5. bind搭建内网DNS服务器架构(主从、子域授权、DNS转发器)

    实验目的 模拟企业DNS服务架构服务器及原理 实验环境准备 实验架构图 实验设备 DNS服务器4台 主服务器master(centos8):IP_192.168.100.30, 从服务器slave(r ...

  6. 【Linux网络基础】 DNS:介绍、作用、解析原理

    1. DNS是什么?   DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去+·记住能够被机器直接读 ...

  7. Linux服务基础命令

    ---恢复内容开始--- 1简介: Linux的网络功能相当强悍,一时之间我们无法了解所有的文阿罗命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig     查询,设置网卡和i ...

  8. linux服务基础之http协议

    URI:Uniform Resource Identifier URL: Uniform Resource Locator,用于描述某服务器某特定资源的位置 URN: Uniform Resource ...

  9. linux服务基础之nginx配置详解

    nginx简单介绍:https://www.cnblogs.com/ckh2014/p/10848670.html nginx编译安装:https://www.cnblogs.com/ckh2014/ ...

随机推荐

  1. 问题记录 --Error parsing column 1 (Function_Num=10 - String)”

    当C#查询数据库出现Error parsing column ## 的时候,首先去看看数据库里面该字段是什么类型,然后在看看你在创建model 的时候是什么类型,如果model的类型和数据库字段类型不 ...

  2. AWS的EC2实例搭建服务器使用stackoverflow教程

    作为一个技术开发工程师, 一个给力的问题解决方案搜索引擎是十分必要的, stackoverflow作为一个码农必备神器, 存在访问不稳定,有时候打不开的问题,下面介绍如何在亚马逊云服务器上搭建属于自己 ...

  3. python tkinter messagebox

    """messagebox消息框""" import tkinter as tk #导入messagebox import tkinter. ...

  4. Angular7上手体验

    准备工具 Node.js Angular requires Node.js version 8.x or 10.x. 查看当前你的node版本可以在CMD中输入 node -v npm -v 开发工具 ...

  5. 关于优先队列浅析(priority_queue)

    优先队列 greater与less,自定义还有结构体(可以设置2层优先级)  模板; 下面废话不多说直接上程序 注释的很明白 #include<iostream> #include< ...

  6. 3#Java案例

    以下内容引用Github地址https://github.com/DuGuQiuBai/Java/blob/master/day01/code/02_%E5%B8%A6%E6%B3%A8%E9%87% ...

  7. Django框架详细介绍---认证系统

    在web开发中通常设计网站的登录认证.注册等功能,Django恰好内置了功能完善的用户认证系统 1.auth模块 from django.contrib import auth 模块源码 import ...

  8. java 自动拆箱

    Integer a0 = ; Integer a1 = ; Integer b0 = ; Integer b1 = ; ; System.out.println(a0 == a1); >> ...

  9. 如何共享联盟cookie

    接上一篇阿里妈妈账号登录状态如何长时间保存 既然我们获取到了cookie, 如果有多个程序都要使用到联盟帐号的时候, 如果不共享cookie, 那么每个程序都需要登录一次, 真的很浪费资源. 如何共享 ...

  10. World is Exploding (容斥 + 统计)

    题意:满足题目中的式子,a < b && c < d && Va < Vb && Vc > Vd 思路:先求不讨论位置重合的情况 ...