一:DNS 概述
1.1 DNS 的作用
在互联网中,人们使用域名来访问服务器,但是,互联网是使用 IP地址 进行通信的,所以就需要DNS来将域名和IP地址相互转换。这个过程称为域名解析。
一个 IP 地址可以对应多个域名,但是 一个完整的域名只可以对应一个 IP 地址
1.2 DNS 的定义
DNS((Domain Name System): 域名解析服务,可以将域名解析为对应的IP地址。
使用 TCP 和 UDP 的53 端口 。TCP 53 端口用于连接 DNS 服务器。UDP 的53 端口用于解析DNS
每一级 域名长度 限制 是63 个字符,域名总长度 则不能超过 253 个字符
1.3 域名结构
www :主机名
.sina : 子域
.com : 二级域
.cn : 顶级域
" . " : 根域
DNS 整个结构图是树状结构,最顶层称为 根域, 用 点 " . " 表示,相应服务器称为根服务器,整个域名空间的解析权都归根服务器所有。
因为负载庞大,所以采用 “ 委派” 机制,根域下设置顶级域,将顶级域解析权委派给顶级域服务器
同理,顶级域 下面设置 二级域, 二级域 下设 三级域
根域:
位于域名空间最顶层, 一般用 一个 点 " . " 表示
顶级域:
一般代表一种类型的组织机构或者国家地区。
如 .net (网络供应商), .com (工商企业) , .org (团体组织), .edu (教育机构) , .gov (政府部门) , .cn (中国国家域名)
二级域:
用来标明顶级域内的一个特定组织,国家顶级域下面的二级域名有国家网络部门统一管理
如 .cn 顶级域名下面设置的二级域名 : .com.cn , .net.cn , .edu.cn
子域:
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
主机:
主机位于域名空间最下层,就是一台具体的计算机
如 : www ,mail , 等 都是具体计算机的名字
www.sina.com.cn. , mail.sina.com.cn. 这种完整的表示方式,称为 FQDN (完整合格域名)
1.4 DNS 域名解析方式和查询模式
1.4.1解析方式
正向解析: 根据域名查找对应的 IP 地址
反向解析:根据IP地址查找对应的域名
1.4.2 查询模式
递归查询:
查询到根域名服务器,没有结果。
然后根域名服务器帮助本地域名服务器向下查询一级域名服务器,依次递归查询。
查询到权限域名服务器器后,获取结果,结果依次递归传递到根域名服务器,根域名服务器告知本地服务器查询结果
迭代查询:
根域名服务器不会向下查询,只会告诉本地域名服务器去查找哪个顶级域名服务器(一级域名服务器)。
顶级域名服务器再告诉本地域名服务器去哪个权限域名服务器查询。
本地域名再查询对应的权限域名服务器,直接从权限域名服务器获取结果
1.5 DNS 服务器类型
(1)主域名服务器:
负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。
构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
(2)从域名服务器:
当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。
从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。
构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
(3)缓存域名服务器:
只提供域名解析结果的缓存功能, 目的在于提高查询速度和效率,但没有域名数据库。
它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。
缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。
构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
(4)转发域名服务器:
负责所有非本地域名的本地查询。
转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
二: 配置DNS
2.1 下载安装软件包,查看配置文件
BIND (Berkeley Internet Name Daemon) 软件包下载
相关软件包:
bind-9.9.4-37.el7.x86_64.rpm
bind-utils-9.9.4-37.el7.x86_64.rpm
bind-llibs-9.9.4-37.el7.x86_64.rpm
bind-chroot-9.9.4-37.el7.x86_64.rpm
主要执行程序:/usr/sbin/named
默认监听端口:53
主配置文件 /etc/named.conf
保存DNS 解析记录的数据文件在 /var/named 目录
[root@promote ~]# yum -y install bind
[root@promote ~]# rpm -qc bind #查询bind 文件所在路径
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #区域配置文件
/var/named/named.ca #13台根域DNS 服务器
/var/named/named.localhost #区域数据配置文件
2.2 修改主配置文件
[root@promote ~]# vim /etc/named.conf
#options 区域为全局配置,其优先级小于区域配置
options {
listen-on port 53 { 192.168.23.10; };
#监听 53 端口。ip地址使用提供服务的本地ip。
#也可以使用 any 表示所有
# listen-on-v6 port 53 { ::1; }; #ipv6地址
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 { 192.168.23.0/24; 192.168.1.0/24; };
#允许使用本DNS 解析服务的网段,也可以设置为单个ip ,多个参数使用 分号 ; (注意,使用英文分号) 隔开
#可以使用 any 表示所有
recursion yes;
#递归解析
......
};
zone "." IN { #正向解析 " . " 根区域
type hint; #类型为根区域
file "named.ca"; #区域文件为 named.ca 记录了13 台 根区域服务器的域名和 ip 地址等信息
};
include "/etc/named.rfc1912.zones";
#包含区域配置文件里的所有配置
2.3 修改区域配置文件,和正向区域数据文件
2.3.1添加正向区域配置
[root@promote ~]# vim /etc/named.rfc1912.zones
zone "mynet.com" IN { #正向解析"mynet.com"
type master; #类型为主区域
file "mynet.com.zone"; #指定区域数据文件为 mynet.com.zone ,
#数据配置文件 默认在 /var/named/ 目录下。文件记录了 主机名和ip地址的映射关系
allow-update { none; };
};
2.3.2 配置正向区域数据文件
[root@promote ~]# cd /var/named/
[root@promote named]# cp -p named.localhost mynet.com.zone
# mynet.com.zone 默认不存在,复制模板文件
# 要使用 cp -p 命令复制文件因为服务是使用 用户 named 启动的
[root@promote named]# vim mynet.com.zone
$TTL 1D #有效解析记录的生存周期
@ IN SOA mynet.com. admin.mynet.com. ( # @ 表示变量,代表当前DNS 区域名
# mynet.com. 域名是要完整合格域名 "." 不可以少
# admin.mynet.com 管理员邮箱
0 ; serial # 更新序列号,可以是 10位数 以内的整数。主从服务器不可以一样
1D ; refresh # 刷新时间,重新下载地址数据的间隔
1H ; retry # 重试延时,下载失败后的重试间隔
1W ; expire # 失效时间,超过该时间仍无法下载则放弃
3H ) ; minimum # 无效解析记录的生存周期
NS mynet.com. # NS 用于记录当前区域的 DNS 名称, 使用完整合格域名
A 192.168.23.10 # 记录 主机的 IP 地址, 也就是 服务器IP 地址
IN MX 10 mail.mynet.com. # MX 为邮件交换记录,数字越大越优先。 可以不配本条配置
www IN A 192.168.23.10 # 设置正向解析 www.mynet.com 对应的 IP
mail IN A 192.168.23.11 # 设置正向解析 mail.mynet.com 对应的 IP
ftp IN CNAME www # CNAME 使用别名 ,设置 ftp 是www 的别名
* IN A 192.168.23.12 # 泛域名解析,"*" 代表任意主机名 ,代表除了上面设置的主机名,其他主机名
# SOA 记录中的更新序列号用于同步主从服务器区域数据, 当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载
# 管理员admin 名字可以自己设置。后面应该是"@" 但是,因为"@" 有其他意思,所有使用 "."来表示
# " mynet.com." 应该为 完整合格域名(FQDN) , 后面的 " . " 不可以少
2.4 检测配置文件语法,启动服务
[root@promote named]# systemctl stop firewalld #关闭 firewalld 防火墙
[root@promote named]# systemctl disable firewalld #禁止 firewalld 自启
[root@promote named]# setenfoce 0 #设置 selinux 为 Permissive
[root@promote named]# vim /etc/selinux/config # 或者 修改配置文件,将selinux 设置为 disabled 或者 permissive (重启生效)
SELINUX=disabled
[root@promote named]# named-checkconf #检测 主配置文件 语法。 没有任何输出表示 /etc/named.conf没有语法错误
[root@promote named]# named-checkzone "mynet.com" "mynet.com.zone" # 正向解析区域检查
zone mynet.com/IN: loaded serial 0
OK
[root@promote named]# systemctl start named # 启动服务named
[root@promote named]# systemctl enable named # 设置服务named 开机自启
root@promote named]# netstat -natup | grep named # 查看服务named 的端口
tcp 0 0 192.168.23.10:53 0.0.0.0:* LISTEN 3638/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3638/named
tcp6 0 0 ::1:953 :::* LISTEN 3638/named
udp 0 0 192.168.23.10:53 0.0.0.0:* 3638/named
2.5 客户端域名解析文件 添加DNS 服务器地址
[root@promote ~]# vim /etc/resolv.conf #修改后立即生效,但是重启系统,或者重启网卡后,DNS 地址会变成 网卡配置文件里的 DNS 项设置的地址
nameserver 192.168.23.10
或者
[root@promote ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 #修改网卡配置文件,修改后需要重启网卡
DNS1=192.168.23.10
:wq
[root@localhost ~]# systemctl restart network #重启网卡服务
2.6 测试DNS 解析
使用 host [-a] 命令 或者 nslookup 命令
#使用 host 命令
[root@promote ~]# host www.mynet.com # 解析 www.mynet.com
www.mynet.com has address 192.168.23.10 # 该域名 对应 IP
[root@promote ~]# host mail.mynet.com # 解析 mail.mynet.com
mail.mynet.com has address 192.168.23.11
[root@promote ~]# host ftp.mynet.com # 解析 ftp.mynet.com.
ftp.mynet.com is an alias for www.mynet.com. # 表明 ftp.mynet.com 是 www.net.com. 的别名
www.mynet.com has address 192.168.23.10
[root@promote ~]# host xxxxxxx.mynet.com # 泛域名解析
xxxxxxx.mynet.com has address 192.168.23.12
#使用 nslookup 命令(windows 只支持nslookup,不支持host)
[root@promote ~]# nslookup www.mynet.com # 解析域名 www.mynet.com
Server: 192.168.23.10 # DNS 服务器地址
Address: 192.168.23.10#53 # 监听端口
Name: www.mynet.com # 域名
Address: 192.168.23.10 # 域名解析出来的地址
[root@promote ~]# nslookup ftp.mynet.com
Server: 192.168.23.10
Address: 192.168.23.10#53
ftp.mynet.com canonical name = www.mynet.com.
Name: www.mynet.com
Address: 192.168.23.10
[root@promote ~]# nslookup mail.mynet.com
Server: 192.168.23.10
Address: 192.168.23.10#53
Name: mail.mynet.com
Address: 192.168.23.11
[root@promote ~]# nslookup xxxxxx.mynet.com
Server: 192.168.23.10
Address: 192.168.23.10#53
Name: xxxxxx.mynet.com
Address: 192.168.23.12
2.7 将DNS 加入 到 DHCP 配置中
#在 DHCP 服务器上
[root@promote ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.23.0 netmask 255.255.255.0 {
range 192.168.23.10 192.168.23.200;
option routers 192.168.23.254;
option domain-name-servers 192.168.23.10; # 对应的DNS服务器地址
}
#DNS配置可以配置在全局,也可以配置在相应的局部
[root@promote ~]# systemctl restart dhcpd
windows 中解析
2.8 /etc/resolv.conf 文件中search 项作用
先修改DNS 服务器
[root@localhost ~]# vim /var/named/mynet.com.zone
;* IN A 192.168.23.12 #用 分号 ; 注释此项
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.23.10
search mynet.com example.com
例 1
[root@localhost named]# host -a www
Trying "www.mynet.com"
[root@localhost named]# host -a mail
Trying "mail.mynet.com"
[root@localhost named]# host -a centos7
Trying "centos7.mynet.com" #添加 mynet.com ,组成域名 centos7.mynet.com
Trying "centos7.example.local" #添加 example.local,组成域名 centos7.example.local
;; connection timed out; trying next origin
Trying "centos7" #直接作为域名解析
查询主机名,因为主机名后面 没有 点,所以,认为是主机名。
先添加search 里的每一项,一次组成FQDN 完整合格域名来查询。
如果没有查询到,就认为 输入的 就是 FQDN,将其作为FQDN 查询
例2
[root@localhost named]# host -a centos7.com
Trying "centos7.com" #直接将 centos7.com 作为域名查询
;; connection timed out; trying next origin
Trying "centos7.com.mynet.com" #将centos7.com 作为主机名,后面添加域名 mynet.com
Trying "centos7.com.example.local" #将centos7.com 作为主机名,后面添加域名 example.local
;; connection timed out; no servers could be reached
查询主机名,因为主机名中有点(不是末尾有点),就认为是完全合格域名,先用它来查询。
查询失败就把它当成是主机名来进行,添加search里的每一项组成FQDN(完全合格域名)来查询。
例3
[root@localhost named]# host -a centos.
Trying "centos" #因为 centos 后面有 点 "." ,所以确定其作为域名,不会在添加search里的项,只会匹配查询
Received 24 bytes from 192.168.23.10#53 in 5000 ms
Trying "centos"
;; connection timed out; trying next origin
Trying "centos"
查询主机名,因为主机名中末尾有点,则认为是完全合格域名,只用它来查询(不会再添加search里的每一项)。
查询次数会与search里项域名个数有关。