DNS
8.8.8.8 谷歌
223.5.5.5 223.6.6.6 阿里云
作用
正向解析:域名——IP
反向解析:IP——域名
依据:就近原则(递归查询、迭代查询——udp协议)
查询原理过程
正向解析查询过程
①先查本机的缓存记录
②查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理以上过程成为递归查询:我要一个答案你直接会给我结果
④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
⑦求助二级域服务器,,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
结构(解析过程)
所有域名必须以点(根域)结尾
根域
./
↓
顶级域
.com(工商 企业)
.net(网络供应商)
.edu(教育机构)
.cn(中国国家域名)
.org(团体组织)
.gov(政府部门)
↓
二级域
.net.cn
.edu.cn
.com.cn
↓
子域名
.sina.com.cn
.pku.edu.cn
↓
主机站点
www
解析方式
服务器找寻IP——>域名映射关系
-
优先找缓存
-
看看DNS配置——》
/etc/resolv.conf
/etc/hosts (优先级最高)
ifcfg-ens33 “DNS1” -
找就近的DNS服务器(外部)
-
迭代和递归过程
①先找就近的根域服务器
②根据迭代和递归的方式,然后找顶级域DNS服务器
③找二级域DNS服务器
④找子域DNS服务器
⑤找主机名DNS服务器
⑥得到解析结果
-
将解析记录保存在缓存中
——》获取到域名-IP解析内容
系统类型
缓存域名服务器(引导/索引 + 缓存—没有解析的功能)
- 也称为DNS高速缓存服务器
- 通过向其他域名服务器查询获得域名 ->IP地址记录
- 将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器
- 特定DNS区域的权威服务器,具有唯一性
- 负责维护该区域内所有域名->IP地址的映射记录
- 需要自行建立所负责区域的地址数据文件
从域名服务器
- 也称为辅助域名服务器,是对主域名服务器的热备份
- 其维护的域名->IP地址记录来源于主域名服务器
- 需要从主域名服务器自动同步区域地址数据库
使用端口
DNS服务使用TCP和UDP的53端口
TCP的53端口用于连接DNS服务器
UDP的53端口用于解析DNS.
域名长度限制
每一级域名长度的限制是63个字符
域名总长度则不能超过253个字符
基本原理
广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
基本思路
尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络
内部解析—实验
配置文件
根域 —— 顶级域 —— 二级域 —— 子域 —— 主机名
. com baidu www
P记录 反向解析
SOA记录
A记录 正向解析
区域配置文件:
定义范围 顶级域——》子域
区域数据配置文件:
$TTL 1D
@ IN SOA xy.com @ admin.xy.com.
具体操作流程
----正向解析----
实验环境
两台虚拟机皆为nat模式
centos 7 IP:20.0.0.51
关闭防火墙、核心防护
windows 10 IP:20.0.0.61 (为实验方便,网关为centos 7 IP:20.0.0.51,DNS:20.0.0.51)
关闭防火墙
ping 20.0.0.51
1.安装bind软件包
yum install -y bind
2.查询bind软件配置文件所在路径
rpm -qc bind
/etc/logrotate.d/named //主配置文件 控制系统全局
/etc/named.rfc1912.zones //区域配置文件 控制具体单个区域
/var/named/named.localhost //区域数据配置文件 区域信息
3.修改主要配置文件
① 修改全局配置文件
vim /etc/named.conf——————(注意 ; )
options {
listen-on port 53 { 20.0.0.51; }; ●监听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 { any; }; ● 允许使用本DNS解析服务的网段,也可用any代表所有
}
zone "." IN { #正向解析“."根区域
type hint; #类型为根区域
file "named.ca"; #区域数据文件为named.ca#记录了13台根域服务器的域名和IP地址等信息
};
include "/etc/named.rfc1912.zones"; #包含区域配置文件里的所有配置
② 修改区域配置文件,添加正向区域配置
vim /etc/named.rfc1912.zones——————(注意 . )
#文件里有模版,可复制粘贴后修改(shift+g——》5yy——》t)
zone "xy.com." IN { ●正向解析"benet.com"区域
type master; #类型为主区域
file "xy.com.zone"; ●指定区域数据文件为benet.com.zone
allow-update { none; } ;
};
③ 配置正向区域数据文件
备份
cd /var/ named/
cp -p named.localhost xy.com.zone #保留源文件的权限和属主的属性复制
vim /var/named/xy.com.zone——————(注意空格不能用tab)
$TTL 1D #有效解析记录的生存周期
@ in SOA xy.com. rname.invalid. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS xy.com. #记录当前区域的DNS服务器的名称
A 20.0.0.51 #记录主机IP地址
www IN A 20.0.0.70 #记录正向解析www.benet.com对应的IP
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 20.0.0.70 #泛域名解析,“*"代表任意主机名
#“@”这里是一个变量,当前DNS区域名
#SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。
# "xy.com. "此为完全合格域名(FQDN) ,后面有个“."不能漏掉
#“admin.benet.com.”(rname.invalid.)表示管理员邮箱,这里的“@”符号已有其他含义,所以用“.”代替
#IN 表示internet
4. 检查启动文件格式
named-checkconf
named-checkzone xy.com /var/named/xy.com.zone
5.启动服务,关闭防火墙
systemctl start named
systemctl stop firewalld
setenforce 0
#如果服务启动失败,可以查看日志文件来排查错误
tail -f /var/log/messages
#如果服务启动卡住,可以执行下面命令解决
rndc-confgen -r /dev/urandom -a
#对域名语法进行检查(named.conf)
named-checkconf -z /etc/named.conf
6.在客户端的域名解析配置文件中添加DNS服务器地址
vi /etc/resolv .conf #修改完后立即生效
nameserver 20.0.0.51 #将主机IP设为DNS服务器地址
或
vi /etc/sysconfig/network-scripts/ifcfg-ens33 #修改完后需要重启网卡
DNS1=20.0.0.51
systemctl restart network
7.查看端口 53
netstat -natpul | grep 53
8.测试DNS解析(windows 10 虚拟机上)
nslookup www.xy.com
nslookup ftp.xy.com
nslookup uo.xy.com
----反向解析----
实验环境
centos 7 IP:20.0.0.51 反向则是 0.0.20
1.修改区域配置文件
vim /etc/named.rfc1912.zones
// 192.168.10.0 反向则是 10.168.192
zone "0.0.20.in-addr.arpa" IN {
type master;
file "xy.com.zone.local;"; #指定反向解析的数据文件,也可以跟正向解析的数据文件相同
allow-update { none; };
};
2.配置正向区域数据文件
备份
cd /var/named/
cp -p xy.com.zone xy.com.zone.local
$TTL 1D #有效解析记录的生存周期,默认单位为秒
@ IN SOA xy.com. rname.invalid. ( #SOA标记、域名和管理员邮箱,@变量表示域名
0 ; serial #更新序列号,10位以内数字,用于主从同步,主服务器这个数值要大于从服务器否则无法同步
1D ; refresh #刷新时间
1H ; retry #重试刷新时间间隔
1W ; expire #失效时间,超过该时间则放弃
3H ) ; minimum #无效解析记录的生存周期
NS xy.com.
A 20.0.0.51
100 IN PTR www.xy.com
200 IN PTR mail.xy.com
# 20是192.168.10.20的意思
# RTP反向指针 功能:反向解析
systemctl restart named //rndc reload也可以重载配置文件
host 20.0.0.51
// 将会反向解析出域名www.benet.com
-----------DNS主从服务器及自动同步-----------------
实验环境
两台centos 7
主服务器:20.0.0.51
从服务器:20.0.0.52
配置主服务器 20.0.0.51
1.主配置文件
vim /etc/named.conf
listen-on port 53{} 中值为any
allow-query{}中值改为any
2.区域配置文件
vim /etc/named.rfc1912.zones
zone "xy.com" IN {
type master; //类型为主区域
file "xy.com.zone";
allow-transfer { 20.0.0.52; }; //设置从服务器地址
};
zone "0.0.20.in-addr.arpa" IN {
type master;
file "xy.com.zone.local";
allow-transfer{ 20.0.0.52; };
};
3.配置正向区域数据文件
cd /var/named/
cp -p name.localhost xy.com.zone
vim /var/named/xy.com.zone
$TTL 1D #有效解析记录的生存周期
@ in SOA xy.com. rname.invalid. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS xy.com. #记录当前区域的DNS服务器的名称
A 20.0.0.51 #记录主机IP地址
www IN A 20.0.0.51 #记录正向解析www.benet.com对应的IP
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 20.0.0.70 #泛域名解析,“*"代表任意主机名
配置从服务器20.0.0.52
1.安装bind软件包
yum install -y bind
2.修改全局配置文件
vim /etc/named.conf
options {
listen-on port 53 { 20.0.0.52; }; ●监听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 { any; }; ● 允许使用本DNS解析服务的网段,也可用any代表所有
}
修改从域名服务器区域配置文件,添加正、反区域配置
3.修改区域配置文件
vim /etc/named.rfc1912.zones
zone "xy.com" IN {
type slave; //类型为从区域
file "slaves/xy.com.zone"; //下载的区域数据文件保存到slaves/目录下
masters { 20.0.0.51; }; //设置主服务器地址 20.0.0.51
};
zone "0.0.20.in-addr.arpa" IN {
type slave;
file "slaves/xy.com.zone.local";
masters { 20.0.0.51; };
4.主、从都重启动服务,并查看区域数据文件是否已下载成功
systemctl restart named
ls -1 /var/named/slaves/
5.在客户端的域名解析配置文件中添加从DNs服务器地址
echo "nameserver 20.0.0.52" >> /etc/ resolv.conf
6.测试
host 20.0.0.51
nslookup 20.0.0.52
#停止主服务器的服务,模拟主服务器故障
-----------DNS分离解析-----------------
实验环境
主服务器:192.168.20.80 网卡vmnet2
Web服务器:192.168.20.80 网卡vmnet2
外网客户主机:10.0.0.101 网卡vmnet3 DNS 解析地址 10.0.0.100
分离解析的域名服务器实际也是主域名服务器,这里主要是指根据不同的客户端提供不同的域名解析记录。比如来自内网和外网的不同网段地址区域的客户机请求解析同一域名时,为其提供不同的解析结果,得到不同的IP地址。
注:DNS分离解析即将内外网的相同域名解析为不同的IP地址。现实网络中一些电商网站为了让用户有更好的体验效果解析速度更快,就把来自不同运营商的用户解析到相对应的服务器这样就大大提升了访问速度
配置网关服务器搭建DNS分离解析
在网关服务器搭建DNS分离解析,使局域网主机解析www.benet.com为192.168.20.80,外网主机解析www.benet.com为10.0.0.100。
1.为网关服务器配置双网卡
在关机状态下再添加一块网卡,重启系统
ens33 192.168.20.80
ifconfig ens37 10.0.0.1/24
ifconfig
2.安装bind软件包
yum install -y bind
3.修改主配置文件
vim /etc/named.conf
options {
listen-on port 53 { any; }; ●监听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 { any; }; ● 允许使用本DNS解析服务的网段,也可用any代表所有
}
include "/etc/named. rfc1912. zones";
4.修改区域配置文件
vim /etc/named.rfc1912.zones
view "lan" { #定义内网view,view代表容器分割
match-clients { 192.168.20.0/24; } ; #匹配内网网段
zone "benet.com" IN { #设置要解析的区域
type master;
file "benet.com.zone.lan"; #数据配置文件
};
zone "." IN { #可将根域配置从主配置文件剪切过来,dd+p
type hint; #hint是根区域类型
file "named.ca";
};
view "wan" { #定义外网view .
match-clients { any; } ; #匹配除了内网网段以外的任意地址
zone "benet.com" IN {
type master;
file "benet.com.zone.wan";
};
};
#注意:一旦启用view,所有的zone必须都在view下,所以要把系统默认的自检用的zone也放在view下或者删55
5.修改区域数据配置文件
cd /var/named
cp -p named.localhost benet.com.zone.lan
cp -p named.localhost benet.com.zone.wan
vim benet.com.zone.lan
$TTL 1D #有效解析记录的生存周期
@ in SOA benet.com. admin.benet.com. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS benet.com. #记录当前区域的DNS服务器的名称
A 192.168.20.80 #记录主机IP地址
www IN A 192.168.20.80 #记录正向解析www.benet.com对应的IP
vim benet.com.zone.wan
$TTL 1D #有效解析记录的生存周期
@ in SOA benet.com. admin.benet.com. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS benet.com. #记录当前区域的DNS服务器的名称
A 10.0.0.1 #记录主机IP地址
www IN A 10.0.0.100 #记录正向解析www.benet.com对应的IP
6.启动服务
systemctl start named
7.在内、外网客户端的域名解析配置文件中添加DNS服务器地址
echo "nameserver 192.168.20.80" >> /etc/resolv.conf #内网客户端
echo "nameserver 10.0.0.1" >> /etc/resolv.conf #外网客户端
8.在内、外网客户端上测试
nslookup www.benet.com
实操
----正向解析----
一、安装bind软件包
yum install -y bind
二、查询bind软件配置文件所在路径
rpm -qc bind
三、修改全局配置文件
vim /etc/named.conf
listen-on port 53 { 20.0.0.51; };
allow-query { any; };
四、修改区域配置文件,添加正向区域配置
vim /etc/named.rfc1912.zones
#文件里有模版,可复制粘贴后修改(5yy——》shift+g——》t)
zone “xy.com.” IN {
file “xy.com.zone”;
五、备份配置正向区域数据文件
cd /var/ named/
cp -p named.localhost xy.com.zone
六、配置正向区域数据文件
vim /var/named/xy.com.zone
$TTL 1D
@ in SOA xy.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H) ; minimum
NS xy.com.
A 20.0.0.51
www IN A 20.0.0.70
ftp IN CNAME www
* IN A 20.0.0.70
七、检查启动文件格式
named-checkconf
named-checkzone xy.com /var/named/xy.com.zone
八、启动服务,关闭防火墙/核心防护
防火墙/核心防护已关闭-----略
systemctl start named
九、在客户端的域名解析配置文件中添加DNS服务器地址
vi /etc/resolv .conf
nameserver 20.0.0.51
十、查看端口 53
netstat -natpul | grep 53
十一、windows 10 虚拟机测试DNS解析
nslookup www.xy.com
nslookup ftp.xy.com
nslookup uo.xy.com