DNS是“域名系统”的英文缩写。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS服务使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS。
每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符
■正向解析:根据域名查找对应的IP地址
正向解析: FQDN------—-IP(一对多) ------一般使用正向解析
■反向解析:根据IP地址查找对应的域名
反向解析:IP------------FQDN(一对一)------一般不使用
■DNS系统的分布式数据结构
补充:
13台DNS根服务器分布:
美国VeriSign公司 2台
网络管理组织IANA(Internet Assigned Number Authority) 1台
欧洲网络管理组织RIPE-NCC(Resource IP Europeens Network Coordination Centre) 1台
美国PSINet公司 1台
美国ISI(Information Sciences Institute) 1台
美国ISC(Internet Software Consortium) 1台
美国马里兰大学(University of Maryland) 1台
美国太空总署(NASA) 1台
美国国防部 1台
美国陆军研究所 1台
挪威NORDUnet 1台
日本WIDE(Widely Integrated Distributed Environments)研究计划 1台
“全世界只有13台(这13台根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本
全球互联网DNS根服务器分布差异巨大
全球互联网中枢顶级域名服务器的分布俗称“母服务器”,准确的说法是世界上有13个根服务器系统。其实全球至少有1000多台根服务器,北京有3台。另外,在这13个根服务器系统之上,还有一个更高级的、隐藏着的母服务器。全世界所有的顶级域名,都是由这台母服务器来确定的。全球1000多台根服务器上的解析系统都是这台母服务器的复制,这13个根服务器系统由12家机构管理,分布在全球100多个地区。所以每一个编号的根服务器系统,不是一台机器,而是有几十台或上百台服务器。
目前广泛使用的互联网是第一代互联网,采用的互联网协议版本号为4,即IPv4。美国是第一代互联网的创立者,占有网络核心资源,处于绝对垄断地位。随着互联网的蓬勃发展,对IP地址的需求也迅猛增加,IPv4所能提供的地址很快将发完。第二代互联网所依据的协议是IPv6。它可以提供无限数量的IP地址。
“未来在推进IPv6的过程中,中国可能通过IPv6获得互联网根服务器”,他解释,目前中国已经开展了下一代互联网根服务器的研究,证明在IPv6下面,可以最多有25个根服务器,并且可以跟IPv4服务器之间形成互通。
递归查询是一种 DNS 服务器的查询模式,在该模式下 DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果 DNS 服务器本地没有存储查询 DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
总结:就是客户机发送请求后自己只用等待结果即可,中间具体过程交给服务器实现。
DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台 DNS 服务器地址,客户机再向这台 DNS 服务器提交请求,依次循环直到返回查询的结果为止
总结:客户机的请求需要自己挨个去查询才能得到结果,服务器没有结果时候只会给你提供其它服务器的地址,而不会帮你去请求查询,这与递归截然相反
①首先查询本机缓存记录
②再查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理
上述是递归查询:给本地DNS服务器发送一个请求,等待返回结果
④这个DNS服务器可能是本地域名服务器,也有缓存记录,有则直接返回结果,没有继续下一步
⑤求助根域服务器,返回可能会知道结果的顶级域服务器让它去找顶级域服务器
⑥求助顶级域服务器,返回可能知道结果的二级域服务器让它去找二级域服务器
⑦求助二级域服务器,查询发现是我的主机,把查询到的IP地址返回给本地域名服务器
⑧本地DNS服务器把结果记录并缓存,然后把域名和ip的对应关系返回给客户端
●DNS系统的结构为分布式数据结构
根域名一般隐藏不可见。
1、根域:位于树状结构最顶层,用"."表示
2、顶级域:一般代表一种类型的组织机构或国家地区;
如.net(网络供应商)、.com(工商企业)、.org(团体组织)、.edu(教育结构)、.gov(政府部门)、.cn(中国国家域名)
3、二级域:用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家部门统一管理
二级DNS服务器:专门负责二级域名的解析
.net.cn、.edu.cn、.com.cn
4、子域:二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
专门负责子域名的解析,也叫做三级域名
.zol.com.cn、.sina.com.cn
5、主机:主机位于域名空间最下层,就是一台具体的计算机
www、mail、news
例子:
域名结构:
http://www.sina.com.cn./
http://主机名.子域.二级域.顶级域 根域/
域名与IP地址之间是多对一的关系,一个IP地址不一定只对应一个域名,且一个域名只可以对应一个IP地址
域名:通常有一个完全合格域名(FQDN)标识。
FQDN 全称 Fully Qualified Domain Name ,它能准确表示出其相对于 DNS 域树根的位置, 也就是节点到DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS 域google来说,其完全正式域名(FQDN)为google.com。
例如,google 为 com 域的子域,其表示方法为 google.com,而 www 为 google 域中的子域, 可以使用www.google.com. 表示。
注意:通常,FQDN 有严格的命名限制,长度不能超过 256 字节,只允许使用字符 a-z,0-9,A-Z 和减号(-)。点号(.)只允许在域名标志之间(例如“google.com”)或者 FQDN 的结尾使用。域名不区分大小,由最顶层到下层,可以分成:根域、顶级域、二级域、子域
即全域名:同时带有主机名和域名的名称
FQDN = Hostname + DomainName
如:www.baidu.com.
注意:最前面的一定是主机,最后一个点表示根域,通常是省略不写的,但实际上www.abc.com=www.abc.com.
BIND软件安装
■BIND (Berkeley Internet Name Daemon)
●BIND是应用最广泛的DNS服务程序
●官方站点: https://www.isc.orgl
■相关软件包
bind-9.9.4-37.el7.x86_64.rpm
bind-utils-9.9.4-37.el7.x86_64.rpmo
bind-libs-9.9.4-37.el7.x86_64.rpmo
bind-chroot-9.9.4-37.el7.x86_64.rpm
BIND服务
■BIND服务器端程序
●主要执行程序: /usr/sbin/named
●默认监听端口:53
●主配置文件
/etc/named.conf
●保存DNS解析记录的数据文件位于
ar/named/
■BIND服务控制
systemctl [status|start|stop/restart] named.service
1、主域名服务器:
负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
2、从域名服务器:
当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
3、缓存域名服务器:
只提供域名解析结果的缓存功能 目的在于提高查询速度和效率,但没有域名数据库。
它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
4、转发域名服务器:
负责所有非本地域名的本地查询。转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。
1、安装bind软件包
yum -y install bind
①先查看需要修改的配置文件所在路径
rpm -qc bind #查询bind软件配置文件所在路径
/etc/named.conf #主配置文件
/etc/named/rfc1912.zonrs #区域配置文件
/var/named/named.localhost #区域数据配置文件
systemctl stop firewalld
setenforce 0
vim /etc/sysconfig
vim /etc/etc/sysyconfig/selinux
"SELINUX=enforcing"改为"disabled"
Esc wq #保存退出
②修改主配置文件
vim /etc/named.conf
options {
listen-on-v6 poet 53 { 192.168.184.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
{ any; }; #允许使用本DNS解析服务的网段,也可用any代表所有
zone "." IN { #正向解析“. "根区域
type hint; #类型为根区域
file "named.ca"; #区域数据文件为named.ca,记录了13台根域服务器的域名和IP地址等信息
};
include "/etc/ named. rfc1912. zones"; #包含区域配置文件里的所有配置
③修改区域配置文件,添加正向区域配置
vim /etc/ named. rfc1912. zone #可在文件里有模版,可复制粘贴后修改
zone "node. com" IN { #正向解析"lic.com"区域
type master; #类型为主区域
file "node. com. zone"; ●指定区域数据文件为lic. com. zone
allow-update { none; };
};
④配置正向区域数据文件
cd /var/named/
cp -p named.localhost lic.com.zone #保留源文件的权限和属主的属性复制
vim /var/named/lic.com.zone
$TTL 1D #设置缓存解析结果的有效时间
@ IN SOA lic.com. admin.lic.com. (
0; serial .
1D; refresh
1H; retry
1W; expire
3H ) ; minimum
NS node.com. #记录当前区域的DNS服务器的名称
A 192.168.184.10 #记录主机IP地址
IN MX 10 mail.node.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.184.10 #记录正向解析www.node.com对应的IP
mail IN A 192.168.184.11
ftp IN CNAME www #CNAME使用别名,ftp是www的别名
* IN A 192.168.184.100 #泛域名解析,“*"代表任意主机名
⑤启动服务,关闭防火墙
rndc-confgen -r /dev/urandom -a #如果服务启动卡住,可以执行此命令解决
⑥在客户端的域名解析配置文件中添加DNS服务器地址
vi /etc/resolv.conf #修改完后立即生效
nameserver 192.168.184.10
vi /etc/ sysconfig/network- scripts/ ifcfg-ens33 #修改完后需要重启网卡
DNS1=192.168.80.10
systemctl restart network
⑦测试DNS解析
host www.node.com
nslookup www.node.com
1、修改区域配置文件里的所有配置
[root@node named]# cp -p node.com.zone node.com.zone.local 拷贝配置文件
[root@node named]# vim /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "247.168.192.in-addr.arpa" IN { 192.168.247.0的反向是247.168.192(第一个0可以省略)
type master;
file "node.com.zone.local"; 指定反向解析的数据文件,也可以跟正向解析的数据文件相同 (但是用备份的比较方便)
allow-update { none; };
2、修改区域配置文件,添加反向区域配置
[root@node named]# vim /var/named/node.com.zone.local
$TTL 1D
@ IN SOA node.com. admin.node.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS node.com.
A 192.168.247.17
17 IN PTR www.node.com.
20 IN PTR mail.node.com. RTP反向指针 功能:反向解析
3、测试
[root@node named]# systemctl restart named
[root@node named]# host 192.168.247.17
17.247.168.192.in-addr.arpa domain name pointer www.node.com.
[root@node named]#
修改主域名服务器的区域配置文件,修改正、反向区域配置
vim /etc/ named. rfc1912. zone
zone "benet.com" IN {
type master; #类型为主区域
file "benet. com. zone";
allow-transfer { 192.168.80.11; } ; #允许从服务器下载正向区域数据,这里添从服务器的IP地址
};
zone "80.168.192. in-addr.arpa" IN {
type master;
file "benet. com. zone.local";
allow-transfer { 192. 168.80.11; } ;
};
①编辑区域配置文件
②以客户机身份指定从服务器dns地址
2、从服务器配置步骤(新打开的虚拟机)
①编辑主配置文件
②编辑区域配置文件
vim /etc/ named. rfc1912. zone
zone "benet. com" IN {
type slave; #类型为从区域
masters { 192.168.80.10; } ; #指定主服务器的IP地址
file "slaves/benet. com. zone"; #下载的区域数据文件保存到slaves/目录下
};
zone "80.168.192. in-addr.arpa" IN {
type slave;
masters { 192.168.80.10; } ;
file "slaves/benet. com. zone. local" ;
};
③区域配置文件编辑完成:wq保存,验证从服务器是否已经将主服务器的区域数据配置文件备份
使用主服务器,重启dns域名解析服务,然后进行dns测试,在主服务器上,以客户机身份进行访问,当主服务器没有问题时,首选主服务器,将主服务器的dns服务关闭时,通过从服务器来进行访问。
在网关服务器搭建DNS分离解析,使局域网主机解析www.benet.com 为192.168.247.100,外网主机解析 www.benet.com 为10.0.0.100。
实验前准备
1.先在虚拟机编辑里添加一个10.0.0.0的网段
2、设置ens37网卡
[root@node ~]# cd /etc/sysconfig/network-scripts/
[root@node network-scripts]# ls
ifcfg-ens33 ifdown-post ifup-eth ifup-sit
ifdown-ib ifdown-tunnel ifup-plusb network-functions
ifdown-ippp ifup ifup-post network-functions-ipv6
ifdown-ipv6 ifup-aliases ifup-ppp route-ens33
[root@node network-scripts]# cp ifcfg-ens33 ifcfg-ens37 把ens33网卡信息拷贝给ens37
[root@node ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens37 编辑信息至如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.0.0.100 外网ip
PREFIX=24
netmask=255.255.255.0
#GATEWAY=192.168.247.2
IPV6_PRIVACY=no
DNS1=10.0.0.100
PEERROUTES=no
[root@node ~]# systemctl restart network 重启网卡
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代表所有
}
4.修改区域配置文件
vim /etc/named.rfc1912.zones
view "lan" { #定义内网view,view代表容器分割
match-clients { 192.168.80.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 "long.com" IN {
type master;
file " benet.com.zone.wan";
};
};
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.247.20 #记录主机IP地址
www IN A 192.168.247.20 #记录正向解析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.100 #记录主机IP地址
www IN A 10.0.0.100 #记录正向解析www.benet.com对应的IP
6.启动服务
[root@ky17 named]# systemctl start named
[root@ky17 named]# systemctl stop firewalld 关闭防火墙
[root@ky17 named]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.100 在此中加入内外网地址会解析的更快
nameserver 192.168.247.20
host www.benet.com 解析成功
www.benet.com has address 192.168.247.20