DNS : 工作在应用层
DNS 作用 : 完成域名到IP的解析过程 FQDN --> IP
例如 : www.ifeng.com --> 123.103.122.24
DNS 查询方式:
1. 迭代查询
由DNS服务器通过层层查询得到结果的过程称为迭代查询
2. 递归查询
客户机向服务器请求,返回结果的过程称为递归查询
DNS 工作过程:
1. 客户机通过自身host 文件 及 DNS 缓存查找解析记录;
2. 客户机将解析请求发送给指定的 DNS 服务器,例:114.114.114.114
3. DNS服务器通过层层查找得到解析地址
4. DNS服务器将得到的解析地址缓存到自身DNS cache中 ,并发送给客户机
5. 客户将结果放入DNS cache ,并使用
DNS 服务器资源解析记录类型:
SOA : 起始解析记录,写在区域解析库文件的第一行
NS : ns 解析记录 ,可以有多个
MX : 邮件交换器解析记录
A : 正向解析
AAAA : 正向解析(IPV6)
PTR : 反向解析
CNAME : 别名解析
资源解析记录库配置格式:
name [TTL] IN RR_TYPE value
SOA : 1. 当前区域的名称
2. 当前区域管理员的邮箱地址
3. 配置与从属服务器协商内容
协商内容: 序列号 (从服务器通过序列号的变更从主服务器更新资源库,如初始序列号为1,每更新一次资源库加1);
刷新间隔: 从服务器多久从主服务器更新资源库;
重传间隔 : 从服务器无法从主服务器更新资源库后,重试时间间隔;
过期时间 : 从服务器无法联系主服务器多久之后放弃从主服务器同步数据,并停止服务;
否定答案的缓存时常: 客户机获取否定答案(无法解析)后,将该答案缓存在本机的时常
示例: ifeng.com. 86400 IN SOA ifeng.com. admin.ifeng.com. (
10;serial (定义序列号)
2H;refresh (定义刷新间隔)
20M;retry (定义重传间隔)
1W;expire (定义过期时间)
1D;negative answer ttl (定义否定答案的缓存时常)
)
注:在解析库中@表示DNS主机区域名,因此邮件中的@用.代替,为 admin.ifeng.com
NS : name : 区域名称 (一个区域中可以有多个NS记录)
value : 区域内某DNS服务器的名称
示例;
ifeng.com. 86400 IN NS ns1.ifeng.com.
MX : name : 区域名称 (一个区域内可以有多个MX记录, value之前用优先级标识,1~99,越低越优先)
value : 区域内邮件交换器的名称
示例:
ifeng.com. 86400 IN MX mx1.ifeng.com.
A : name : 某 FQDN , 例如 www.ifeng.com
value : FQDN 对应的 ip 地址
示例:
www.ifeng.com. 86400 IN A 192.168.1.1
AAAA : name : 某 FQDN
value : FQDN对应的 IPV6地址
PTR : name:IP地址,有特定格式,反过来写,加特定后缀: 例如:ip为 1.2.3.4 的记录应该写为 4.3.2.1.in-addr-arpa.
value : FQDN
示例:
4.3.2.1.in-addr-arpa. IN PTR web.ifeng.com
CNAME : name: FQDN格式的名字
value : FQDN 格式的正式名字
示例:
web.ifeng.com IN CNAME www.ifeng.com
注意: NS,MX 等记录的value为fqdn,该fqdn应该有一个A记录
实战: 配置一个正向解析 DNS 服务器:
(1) 安装 DNS 服务程序
yum install bind (主DNS程序)
yum instal bind-utils (DNS程序辅助工具)
(2) 修改主配置文件及添加解析区域;
vim /etc/named.conf
option {
listen-on port 53 { 192.168.8.16; }; (监听地址为服务器网卡外网地址)
。。。
allow-query { any; }; (允许请求改为 any )
};
dnssec-enable no;
dnssec-validation no; (关闭DNS校验)
保存退出
vim /etc/named.rfc1912.zones (在文件尾部添加解析区域)
zone "ifeng.com" IN { (此处以区域 ifeng.com 为例)
type master;
file "ifeng.com.zone"; (定义区域解析库文件名)
};
保存退出
(3) 添加资源解析库文件及修改DNS
cd /var/named/
vim ifeng.com.zone (文件名与区域中定义文件名一致)
$TTL 1D (在新文件中写以下内容,@会自动替换为区域名称,此处自动替换为 ifeng.com)
@ IN SOA ns1.ifeng.com. admin.ifeng.com (
10
2H
10M
1W
1D
)
@ IN NS ns1.ifeng.com. (ns解析记录)
@ IN MX 10 mx1.ifeng.com. (邮件交换器解析记录)
ns1.ifeng.com. IN A 192.168.8.16
mx1.ifeng.com. IN A 192.168.8.17
www.ifeng.com. IN A 192.168.8.16 (正向解析记录 FQDN --> IP)
bbs.ifeng.com. IN A 192.168.8.17 (正向解析记录)
保存退出
vim /etc/resolv.conf
nameserver 192.168.8.16 (将DNS修改为服务器自身IP地址)
保存退出
(4) 修改文件权限 ,确保文件不被其用户修改
chgrp named /var/named/ifeng.com.zone
chmod o= /var/named/ifeng.com.zone
(5) 重载配置文件 及启动服务
systemctl start named
systemctl enable named
rndc reload (重载配置文件)
systemctl reload named (重载配置文件)
(6) 测试
dig -t A www.ifeng.com
dig -t A www.baidu.com
(修改其他主机DNS指向服务器端,测试是否可以递归解析)
实战: 配置反向 DNS 解析区域
(1) 添加反向解析区域
vim /etc/named.rfc1912.zones
zone "8.168.192.in-addr.arpa" IN { ( ip 解析区域为反向,此处需要解析区域为 192.168.8.1~254 ,则区域名称为 8.168.192.in-addr.arpa)
type master;
file "192.168.8.in-addr-arpa.zone"; (定义区域解析库文件名)
};
(2) 添加反向解析区域库文件
cd /var/named/
vim 192.168.8.in-addr-arpa.zone
$TTL 3600
$ORIGIN 8.168.192.in-addr.arpa. (表示自动补全内容,如下输入16 通过自动补全为 16.8.168.192.in-addr.arpa. )
@ IN SOA ns1.ifeng.com admin.ifeng.com (
10
2H
10M
1W
1D
)
@ IN NS ns1.ifeng.com.
16 IN PTR www.ifeng.com.
17 IN PTR mx1.ifeng.com.
18 IN PTR bbs.ifeng.com.
16 IN PTR ns1.ifeng.com.
保存退出
(3) 检查配置文件 :
named-checkconf (检查主配置文件)
named-checkzone 8.168.192.in-addr.arpa /var/named/192.168.8.in-addr-arpa.zone (检查区域配置文件)
(4) 修改文件权限
chgrp named /var/named/ifeng.com.zone
chmod o= /var/named/ifeng.com.zone
(5) 重载 配置文件
rndc reload
systemctl reload named
(6) 测试
dig -x 192.168.8.17
实战: 主从服务器配置
从服务器配置;
(1) 安装DNS服务程序;
yum install bind
yum install bind-utils
(2) 添加解析区域及修改主配置文件
vim /etc/named.rfc1912.zones
在文件尾部添加以下行:
zone "ifeng.com" IN {
type slave; (定义区域类型为 slave,从服务器)
file "slaves/ifeng.com.zone"; (定义区域解析库文件路径,无需创建,从主服务器同步)
masters { 192.168.8.16; }; (定义主服务器地址)
};
保存退出
vim /etc/named.conf
options {
listen-on port 53 { 192.168.8.17; }; (修改监控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; }; (允许DNS请求,any为所有
recursion yes; (是否为客户机进行递归查询,此处为允许, no 为不进行递归查询)
dnssec-enable no; (关闭dnssec ,DNS校验)
dnssec-validation no;
保存退出
(3) 启动named服务并重载配置文件
systemctl start named
rndc reload
systemctl status named (查看服务状态)
主服务器配置
(1) 添加从服务器ns记录
vim /var/named/ifeng.com.zone (修改主资源解析库文件)
@ IN NS ns2.ifeng.com (添加从服务器ns2记录)
ns2.ifeng.com IN A 192.168.8.17 (添加从服务器正向解析记录)
(2) 重载配置文件 (主,从服务器都需重载)
rndc reload
(3) 测试从服务器
dig -t A www.ifeng.com @192.168.8.17
实战: 子域委派配置
(1) 主DNS服务器配置
vim /var/named/ifeng.com.zone (编辑正向解析库文件)
添加行:
ops.ifeng.com. IN NS ns1.ops.ifeng.com. (添加子域ns解析记录)
ns1.ops.ifeng.com. IN A 192.168.8.18 (添加子域A记录)
保存退出 (注:序列号加1,重载配置文件)
(2) 委派服务器配置
(2.1) 安装bind ,bind-utils 及修改主配置文件
yum install bind yum install bind-utils
vim /etc/named.conf
listen-on port 53 { 192.168.8.18; 127.0.0.1; }; (设置监听地址为外网地址)
allow-query { any; }; (允许所有请求)
dnssec-enable no; (关闭DNS 校验)
dnssec-validation no;
保存退出
(2.2) 添加解析区域,及区域配置文件
vim /etc/named.rfc1912.zones
文件尾部添加行:
zone "ops.ifeng.com" IN {
type master;
file "ops.ifeng.com.zone";
};
保存退出
vim /var/named/ops.ifeng.com.zone (编辑新解析库文件)
$TTL 3600
$ORIGIN ops.ifeng.com.
@ IN SOA ns1.ops.ifeng.com admin.ops.ifeng.com (
10
2H
10M
1W
1D
)
@ IN NS ns1.ops.ifeng.com.
ns1 IN A 192.168.8.18
www IN A 1 92.168.8.17
bbs IN A 192.168.8.18
max IN A 192.168.8.16
保存退出
(2.3) 检查文件及启动程序重载配置文件
named-checkconf
named-checkzone ops.ifeng.com /var/named/ops.ifeng.com.zone
systemctl start named
rndc reload
(2.4) 测试
dig -t A www.ops.ifeng.com
实战:定义转发域:
(1)区域转发,只把对某个区域的请求转发给指定的服务器
zone "ZONE_NAME" IN {
type forward;
forward {first|only}
forwarders { server_ip; };
};
first : 首先转发;转发器不响应时自行去迭代查询;
only : 只转发
server_ip 可以有多个
示例: /etc/named.rfc1912.zones
zone "ifeng.com" IN {
type forward;
forward only
forwarders { 172.16.100.67; };
};
(2)全局转发,只要不是自己服务器定义的区域请求都转发给指定的服务器
/etc/named.conf
option {
添加行:
forwarders { 172.16.199.67; }; (只要自己无法解析,通通转发)
};
实战:DNS acl 配置:
访问控制指令:
allow-query {} :允许查询的主机(白名单)
allow-transfer {} :允许向哪些区域做区域传送;默认为向所有主机;应该配置仅允许从服务器
allow-recursion {} :允许哪些主机通过本主机递归查询
allow-update {} ;DDNS ,允许动态更新区域数据库文件中内容;(一般不允许更新)
BIND 有四个内置的alc
none :没有一个主机
any : 任意主机
local : 本机
localnet :本机所在的ip所属的网络;
示例 : 定义 acl ,仅允许指定的主机查询
vim /etc/named.conf
添加行:
acl control {
192.168.8.0/24; (设置允许网段
};
option {
...
allow-query { control; }; (修改改行,调用 acl控制)
};
保存退出
测试: 仅允许 192.168.8.0/24 网段进行解析请求)