由于网络是基于IP来进行信息传递,但是IP,又不太容易记住,为了容易记忆,所以研发地址解析,方便人们记忆
1 DNS and BIND
DNS: Domain Name Service (域名解析服务) 应用层协议
是基于C/S,监听端口 53/udp,53/tcp
BIND: Berkerley Internat Name Domain 研发
网址是 www.isc.org
本地名称解析配置文件: hosts
linux: /etc/hosts
windows: %WINDIR%/system32/drivers/etc/hosts
2 DNS 域名的结构
几个基本概念
域: 是逻辑概念,指管理一个范围
DNS服务器: 负责具体的域,管理本域的域名解析服务
根服务器: 全球一共13个,一个主根服务器和9个辅助服务器都在美国,2个在欧洲,1个在日本
DNS服务器可分为主从服务器 缓存服务器 转发服务器 主服务器
主DNS服务器: 维护所负责的解析的域内解析库服务器,解析库由管理员维护
从DNS服务器: 从主服务器或其他从DNS服务器复制(区域传递)一份解析库
序列号 解析库版本号 前提 主服务器解析库发生变化,及序列号递增
刷新时间 从服务器从主服务器请求同步解析库的时间间隔
重试时长 从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔
过期时长 在指定的时间内不能从主服务器同步数据,从服务器也会down掉
"通知" 机制 notify 主服务器修改通知从服务器更改信息
区域传送可分为两种:
全量传送 axfr
增量传送 ixfr
3 DNS 查询类型及解析
- DNS的资源类型
查询方式
递归查询: 查询请求者一次就可以得到结果
迭代查询: 查询请求这要多次才能得到答案
查找顺序
client --> hosts文件 --> DNS service --> local cache(本地缓存) --> DNS Server(recursion)递归 --> Server cache --> iteration(迭代)
解析得到的答案
肯定答案: 请求得到结果,进行返回
否定答案: 请求的条目不存在等原因返回结果
权威答案: 由自己管理的域名,及自己的解析库中,有这条记录
非权威答案: 由缓存得之,非自己管理的域名解析,本地解析库没有这条记录
资源记录类型 resource record
SOA start of authority 起始授权记录
定义一个区域解析库有且仅能有一个SOA记录,而且必须为第一条记录
SOA 定义域
NS 域内负责解析的主机 name server 标识当前区域的DNS服务器
A ipv4 Internet address 作用 FQDN-->IPv4
AAAA ipv6 作用 FQDN-->IPv4
PTR 反向解析 pointer 作用 IP-->FQDN
CNAME 别名 canonical name
MX 邮件 Mail eXchanger 邮件交换器
资源类型的定义格式
语法: name [TTL] IN rr_type value
注意
1 TTL 可以全局继承
2 @可用于引用当前区域的名字
3 同一个名字可以通过多条记录定义多个不同的值,此时,将以轮询的方式来进行响应
4 同一个值也可以有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机
SOA 记录
name:当前区域的名字 如 "johniu.com"
value:
1 当前区域的主dns服务器FQDN 也可以是当前区域的名字
2 当前区域管理员的邮箱地址,但地址中不能使用@符号 一般用.代替 例如 linuxedu.magedu.com.
3 (主从服务协调器属性的定义以及否定的答案的统一的TTl)
例如
@ 86400 IN SOA ns.johniu.top. admin (
2017070901 ;序列号
2H ;刷新时间,从服务器到主服务器
10M ;重试时间,从服务器到主服务器
1W ;过期时间,从服务器
1D ;否定答案的TTL值
)
NS
name 当前区域的名字
value 当前区域的某个DNS 服务器的名字 例如 ns.johniu.top.;
注意 一个区域可以有多个NS 记录
例如
NS ns1.johniu.com.
NS ns2.johniu.com.
注意
1 相等的两个资源记录的name相同时,后续的可以省略
2 对NS记录而言,任何一个ns记录后面的服务器名称,都应该在后续有一个A 记录
MX
name 当前区域的名字
value 当前区域某个邮件服务器(smtp服务器)的主机名
一个区域内可以有多个,但每一个value都有一个数字(0-100),标识服务器的优先级,数字越小优先级越高
例如
MX 100 mx1.johniu.top.
MX 10 mx2.johniu.top.
A
name 某个主机的FQDN 例如 www.johniu.top.
value 主机名对应的IP地址
例如
www IN A IP
www IN A IP2
mx1 IN A IP3
mx2 IN A IP4
泛域名解析
* IN A IP
按照一定序列进行解析
$GENERATE 1-100 server$ A 192.168.25.$
避免用户写错名称时,给错名字,可以通过泛域名解析进行解析至某指 定的地址
PTR 反向解析
name: IP 有特定格式,把IP地址反过来写
value: FQDN
例如
4.3.2.1.in-addr.arpa. IN PTR www.johniu.com.
可简写
4 IN PTR www.johniu.com.
注意,网络地址及后缀可以省略,主机地址依然需要完整写
CNAME
name 别名的FQDN
value 正工名字的FQDN
例如,
web IN CNAME www
- DNS 配置文件
服务配置文件主配置文件 /etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
在 /etc/named.conf 的option{}中定义一些服务器属性
如果要搭建服务需要定义区域
zone "ZONE_NAME" IN {
type {master|slave|hint|forward(局部转发域)};
file "ZONE_NAME.zone";
}
解析库文件 /var/named
- 主服务器搭建
1 首先在/etc/named.rfc1912.zones 添加域名解析
zone {
type master;
file "johniu.com.zone";
};
2 添加区域解析库
新建编辑 /var/named/johniu.com.zone 注意权限,named用户有读的权限
$TTL 1D
@ IN SOA ns1 admin (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns1
MX 10 mail
ns1 A 172.18.23.40
web NS 172.18.23.40
* A 172.18.23.40
$GENERATE 1-100 server$ A 192.168.1.$
@ A 172.18.23.40
www CNAME web
mail A 172.18.23.40
然后,就可以启动服务进行测试
测试工具
dig [-t type] name [@server] +option
如 dig -t NS johniu.com @localhost
dig -t A www.johniu.com @localhost
- 主从服务器搭建
1 首先,另找一台主机,将其搭建为从服务器,安装并配置好服务
在options中定义可以供外部查询,及禁止区域传送
allow-transfer {none;};
在/etc/named.rfc1912.zones定义主服务器的
zone "johniu.com" IN {
type slave;
masters { master_ip; };
file "slaves/zone_name.zone";
}
2 在主服务器上,定义可以传送的主机options选项中定义
allow-transfer {从服务器 IP;};
3 开启服务进行测试
- 搭建转发服务器
转发分为全局转发和区域转发
全局转发: 但客户端来进行DNS查询的时候,全部转发到定义的服务器上
options {
forward {first|only}; #first 先转发,如果转发到的服务器也不能查到结果,就自己出去查询,only表示只做转发,自己不查询
forwarders {IP1;IP2;};
}
区域转发: 仅转发对特定区域的请求之指定服务器
zone "ZONE_NAME" IN {
type forward;
forward {only|first};
forwarders {IP1;IP2;};
};
4 BIND 中基础的安全相关的配置
acl 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
acl acl_name {
ip;
ip;
net/netmask;
};
如:
acl mynet {
172.18.0.0/16;
}
bind中四个内置的acl
none 没有任何主机
any 任意主机
local 本机
localnet 本机的IP同子网掩码运算后得到的网络地址
注意,acl需要先定义,后使用,他一般定义在配置文件中的options之前
访问控制的指令
allow-query {}; 允许查询的主机,或为网络主机
allow-transfer {};允许进行传送的主机
allow-recursion {}; 允许递归的主机
allow-update {}; 允许更新区域数据库中的内容