DNS 是什么?
DNS是 Domain Name System 的缩写,也就是 域名解析系统,它的作用非常简单,就是根据域名查出对应的 IP地址。
你可以把它想象成一本巨大的电话本,比如当你要访问域名www.163.com
,首先要通过DNS查出它的IP地址是112.48.162.8
。
为啥需要DNS
NS服务器: 说白了, 就是一台翻译 名字到IP 的 软件。
IP: IP就是IP, 不解释。
下面, 我们来看一下逻辑关系: 假设某设备(充当DNS客户端)需要解析域名a.b.c.d, 于是就可以向DNS服务器发起请求, 然后然后DNS服务器将解析的IP结果w.x.y.z返回给客户端。
由于比较常见, 所以还是复习了一下, 至于为什么需要DNS, 你只要想想你经常使用的www.baidu.com就可以了, 这个可比其ip(http://36.152.44.95/)方便记忆多了。
域名的形式
域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。 如下图所示:
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。
域名的层级
由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解
根域名 :
.root
或者.
,根域名通常是省略的顶级域名,如
.com
,.cn
等次级域名,如
baidu.com
里的baidu
,这个是用户可以进行注册购买的主机域名,比如
baike.baidu.com
里的baike
,这个是用户可分配的
主机名.次级域名.顶级域名.根域名
baike.baidu.com.root
eg :我们熟悉的,www.baidu.com
com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
baidu: 二级域名,指公司名。
www: 表示主机域名为 www。
域名是分层结构,域名服务器也是对应的层级结构。 有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。
由高向低进行层次划分,可分为以下几大类:
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为 区域 (Zone)
DNS 资源记录
在 DNS 服务器上,一个域名及其下级域名组成一个区域 (Zone)。一个 Zone的 相关的 DNS 信息构成一个数据库文件。
下面是一条A类型的资源记录(简称为A记录):域名 www.zdns.cn 的数据为 202.173.11.10
记录一条域名信息映射关系,称之为资源记录(RR)。当我们查询域名www.zdns.cn的时候,查询结果得到的资源记录结构体中有如下数据:
TTL,就是生存周期,是递归服务器会在缓存中保存该资源记录的时长。
网络/协议类型,它的代表的标识是IN,IN就是internet,目前DNS系统主要支持的协议是IN。
type,就是资源记录类型,一般的网站都是都是A记录(IPv4的主机地址)。
rdata是资源记录数据,就是域名关联的信息数据。
每个区域(Zone)数据库文件都是由资源记录(RR)构成的,一个资源记录就是一行文本,提供了一组有用的 DNS 配置信息。在DNS系统中,最常见的资源记录是Internet类记录,该记录由包含4个字段的数据构成:Name、Value、Type、TTL。其中Name和Value可以理解为一对键值对,但是其具体含义取决于Type的类型,TTL记录了该条记录应当从缓存中删除的时间。
常见的资源记录类型如表所示。
DNS域名解析的过程
1、在浏览器上请求www.baidu.com,实际上请求www.baidu.com.
2、**浏览器**先查询浏览器缓存,有直接返回,没有则进入下一步
3、**浏览器**查询操作系统缓存,有直接返回,没有则进行下一步
4、**浏览器**查询/etc/hosts文件,有直接返回,没有则进行下一步
5、**浏览器**查询本地dns服务器(114.114.114.114),有直接返回,没有则进行下一步
以上为递归操作(Recursion),以下为迭代操作
6、**本地dns服务器**访问根域名服务器(.),根dns服务器会告诉本地dns服务器:顶级域名(com)的ip地址
7、**本地dns服务器**访问顶级dns服务器(com),顶级dns服务器会告诉本地dns服务器:二级域名(baidu)的ip地址
8、**本地dns服务器**访问二级dns服务器(baidu),二级dns服务器会告诉本地dns服务器:三级域名(www)的ip地址
9、**本地dns服务器**访问三级dns服务器(www),三级dns服务器若知道(www.baidu.com)的ip,就会将其告诉本地dns服务器,若不知,则无法解析
10、本地域名服务器将得到的结果返回给浏览器
实战:nslookup 进行IP查看
Nslookup一般是用来确认DNS服务器动作的.
nslookup有多个选择功能用命令行键入nslookup<主机名>执行,即可显示出目标服务器的主机名和对应的IP地址,称之为正向解析.
如果不能使用dig、nslookup,如下:
[root@cdh1 ~]# nslookup www.baidu.com
-bash: nslookup: command not found
123
报错,命令找不到,是因为新安装的centos7,没有安装bind-utils,安装后就可以运行nslookup了
安装相应软件包
yum install -y bind-utils
1 使用命令 nslookup 域名 查询IP
[root@cdh1 ~]# nslookup www.baidu.com
Server: 10.0.2.3
Address: 10.0.2.3#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 36.152.44.95
Name: www.a.shifen.com
Address: 36.152.44.96
Name: www.a.shifen.com
Address: ::1
12345678910111213
结果说明如下:
Server: 10.0.2.3 --->指定的dns服务器
Address: 10.0.2.3#53 ------>指定的dns服务器的IP和端口
Non-authoritative answer: ----->未验证的回答
baidu.com canonical name = www.a.shifen.com. ------->目标域名的规范名称(正名/别名)记录
Name: www.a.shifen.com ------->目标域名
Address: 36.152.44.95 ------->目标返回的Ip
Name: www.a.shifen.com ------->目标域名
Address: 36.152.44.96 ------->目标返回的Ip
Name: www.a.shifen.com
Address: ::1
123456789101112
没有指定DNS服务器,使用默认的本地DNS服务器,保存在 /etc/resolv.conf 配置文件中。
[root@cdh1 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3
BIND安装部署
BIND(Berkeley Internet Name Daemon)伯克利 Internet 域名服务,BIND不是唯一能够提供域 名服务的DNS服务程序。 默认监听端口:UDP 53 主配置文件: /etc/named.conf 在Centos系统中自带BIND安装软件。 bind-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.6.x86_64.rpm 各软件包的主要作用如下: bind:提供了域名服务的主要程序及相关文件。 bind-utils:提供了对DNS服务器的测试工具程序,如nslookup等。 bind-libs:提供了bind、bind-utils 需要使用的库函数。 bind-chroot:为BIND服务提供一个伪装的根目录(将/var/named/chroot/文件夹作为BIND的根目 录),以提高安全性。 默认已安装bind-utils 和 bind-libs,因此只需要安装bind和bind-chroot即可。 指令: yum -y install bind
/var/named:bind软件-服务名named-工作目录 /var/named/data:数据目录 /var/named/named.ca:根域名文件 /var/named/named.empty:空文件 /var/named/named.localhost:解析localhost /var/named/named.loopback:解析loopback /var/named/slaves:dns服务器作为从服务器存放解析记录的
vim /etc/named.conf
listen-on定义监听端口,如果所有地址都监听,则只写端口
directory 定义数据文件目录
allow-query 允许哪些主机查询
配置
对于配置主DNS需要先配置一个区域,后配置区域解析文件 对于配置从DNS则只需要配置与主一样的区域即可
配置正向解析
第一步配置区域:进入/etc/named.conf
zone "gts.com" IN {
type master;
allow-transfer {192.168.10.11;};
file "gts.com.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type master;
allow-transfer {192.168.10.11;};
file "192.168.10.zone";
};
type: 类型,主要有三种hint(起一个提示作用),master(主dns服务器),slave(从dns服务器) allow-transfer :允许哪个从dns服务器从本主dns服务器同步 file:存储区域解析文件的地址,完整是/var/named/openlab.zone 每个语句完成后加分号(;)当区域完成之后在大括号外加分号(;)
cd /var/named/ #进入/var/named文件夹
cp named.localhost gts.com.zone #复制named.localhost并重命名为gts.com.zone
chown named.named gts.com.zone
vim gts.com.zone
第二步配置区域解析文件,进入/var/named/gts.com.zone,对应区域配置中存储区域解析文件的地址
$TTL 1D
@ IN SOA @ gts.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.gts.com.
dns A 192.168.10.13
www A 192.168.10.11
eee A 192.168.10.10
$TTL 1D:为所有的RR(Resource Record)设置缓存时间,也可以为单条记录设置缓存时间 记录的格式:name TTL IN type value 第一条记录是SOA记录 第二条记录是NS 第三条记录时MX 往下就是解析信息
type: SOA:授权记录:即我要把哪一个区域交给谁去解析, 还要有主从同步的设置,以及管理员的邮箱
NS:name server: 来定义我们的本地dns服务器
MX:邮箱记录
A:将FQDN -> IP 即正向解析成为ipv4
AAAA:将FQDN -> IP 即正向解析成为ipv6
PTR:将IP -> FQDN 即反向解析
SOA记录补充: @ IN SOA dns.openlab.com. test.163.com(0 1D 1H 1W 3H) @:可以用@来代表区域 @==openlab.zone dns.openlab.com. 代表的类型是NS(NameServer) test@.163.com -> test.163.com管理员邮箱地址 (0 1D 1H 1W 3H):主从同步设置,第一个字段是serial(序列号,越大代表文件越新)第二个字段是refresh(刷新时间)第三个字段是retry(重新尝试连接)第四个字段是expire(失效时间)第五个字段是minimum ttl(最小缓存时间)
保存并退出后可检查配置文件是否出错 named-checkconf /etc/named.conf //检查区域 named-checkzone /var/named/openlab.zone //检查区域解析文件
无误后可重起dns服务 systemctl restart named
[root@localhost named]# nslookup eee.gts.com
Server: 192.168.10.13
Address: 192.168.10.13#53
Name: eee.gts.com
Address: 192.168.10.10
[root@localhost named]# nslookup www.gts.com
Server: 192.168.10.13
Address: 192.168.10.13#53
Name: www.gts.com
Address: 192.168.10.11
[root@localhost named]# nslookup dns.gts.com
Server: 192.168.10.13
Address: 192.168.10.13#53
Name: dns.gts.com
Address: 192.168.10.13
配置反向解析
[root@localhost ~]# cd /var/named/ [root@localhost named]# cp named.loopback 192.168.10.zone
chown named.named 192.168.10.zone
vim /var/named/192.168.10.10.zone
$TTL 1D
@ IN SOA @ gts.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.gts.com.
13 PTR dns.gts.com.
11 PTR www.gts.com.
10 PTR eee.gts.com.
验证
[root@localhost named]# systemctl restart named
[root@localhost named]# nslookup 192.168.10.10
10.10.168.192.in-addr.arpa name = eee.gts.com.
[root@localhost named]# nslookup 192.168.10.11
11.10.168.192.in-addr.arpa name = www.gts.com.
[root@localhost named]# nslookup 192.168.10.13
13.10.168.192.in-addr.arpa name = dns.gts.com.
从DNS服务器搭建
1、配置主文件 vim /etc/named.conf
listen-on port 53 { 192.168.10.11; }; //本机IP
allow-query { any; };
123
2、配置区域文件 vim /etc/named.rfc1912.zones
zone "aaa.com" IN {
type slave; //从模式
masters { 192.168.0.13; }; //写上主服务器的IP
file "slaves/gts.com.zone";
allow-update { none; };
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.13; };
file "slaves/192.168.10.zone";
};
注意:master 后面的大括号中间外面都要有空格
3、给网卡添加DNS
三、 测试 nslookup
缓存DNS服务器搭建
- 客户端
1、安装
yum install -y dnsmasq
2、配置文件 vim /etc/dnsmasq.conf
domain=aaa.com
server=192.168.18.128
cache-size=150
3、测试 关掉主机之后,缓存机依然可以用解析记录返回给浏览器