目录
一、DNS基本概念
DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
1.1本地名称解析配置文件:hosts
- Linux: /etc/hosts
- windows: C:\Windows\System32\drivers\etchosts
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
1.2 修改DNS优先级
[root@localhost ~]#vim /etc/nsswitch.conf
#修改dns的优先级
hosts: files dns myhostname
#修改 files和 dns的先后 优先级就会改变
1.写入hosts文件
2.ping
3.修改/etc/nsswitch.conf配置文件
4.再次ping
修改优先级的小实验,默认是hosts文件
二、域名的分层结构
鉴于互联网中的域名和IP地址对应关系数据库过于庞大,DNS域名解析服务采用了类似于目录树的层次结构来记录域名和IP地址之间的对应关系,从而形成了一个分布式的数据库系统,如图:
一级DNS服务器:专门负责一级域名的解析(一般代表一种类型的组织机构或国家地区)
.com | 工商、企业 |
.net | 网络服务机构 |
.edu | 教育机构 |
.int | 国际机构 |
.org | 非营利性组织 |
.gov | 政府机构 |
二级DNS服务器:专门负责二级域名的解析
.com.cn | 中国商业组织 |
.edu.cn | 中国教育机构 |
.org.cn | 中国非盈利组织 |
.net.cn | 中国运营商 |
子域名DNS服务器:专门负责子域名的解析 也称为三级域名
sina.com.cn | 新浪 |
pku.edu.cn | 北京大学 |
常用主机名
www |
ftp |
分类 | 作用 |
根域名服务器 | 本地域名服务器在本地查询不到结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址 |
顶级域名服务器(一级) | 负责管理在该顶级域名服务器下注册的二级域名,例如“www.baidu.com”,.com则是顶级域名服务器,在向它查询时,可以返回二级域名baidu.com所在的权威域名服务器的地址 |
权威域名服务器(二级) | 在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系 |
本地域名服务器(子域名) | 本地域名服务器相应客户端的递归请求,并最终跟踪直到获得解析结果的DNS服务器 |
- 每一层的域名上都有自己的域名服务器,最顶层的是根域名服务器
- 每一级域名服务器都知道下级域名服务器的IP地址,以便一级一级向下查询
三、DNS解析过程
当今世界的信息化程度越来越高,大数据、云计算、物联网、人工智能等新技术不断涌现,全球网民的数量每年也以10%的速度迅速增长。这些因素导致互联网中的域名数量激增,被访问的频率也进一步加大。为了为网民提供不简单、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器。
- 主服务器:在特定区域具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系
- 从服务器:从主服务器中或得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况
- 缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率
以查询www.linuxprobe.com为例:
当用户向网络指定的DNS服务器发起一个域名请求时,通常情况下会有本地DNS服务器向上级的DNS服务器发送迭代查询请求;如果该DNS服务器没有要查询的信息,则会进一步向上级DNS服务器发送迭代查询请求,直到获得准确的查询结果为止。其中最高级、最权威的根DNS服务器共有13台,分布位置、管理单位及IP地址如下表:
名称 | 管理单位 | 地理位置 | IP地址 |
A | INTERNIC.NET | 美国 | 198.41.0.4 |
B | 美国信息科学研究所 | 美国 | 128.9.0.107 |
C | PSINet公司 | 美国 | 192.33.4.12 |
D | 马里兰大学 | 美国 | 128.8.10.90 |
E | 美国航空航天管理局 | 美国 | 192.203.230.10 |
F | 因特网软件联盟 | 美国 | 192.5.5.241 |
G | 美国国防部网络信息中心 | 美国 | 192.112.36.4 |
H | 美国陆军研究所 | 美国 | 128.63.2.53 |
I | Autonomica公司 | 瑞典 | 192.36.148.17 |
J | VeriSign公司 | 美国 | 192.58.128.30 |
K | RIPE NCC | 英国 | 193.0.14.129 |
L | IANA | 美国 | 199.7.83.42 |
M | WIDE Project | 日本 | 202.12.27.33 |
上面是IPV4的根服务器
IPV6的根服务器:全球共25个,中国1主3从;美国1主2从......
四、DNS术语
4.1 递归查询
如果主机所查询的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果只有两种,一是所查询的IP地址,二是报错,表示无法查询到所需的IP地址
递归查询相当于你问别人借钱,别人没钱也要想办法借到钱给你
4.2 迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询的请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询,而不是替本地域名服务器进行后续的查询。根域名服务器通常把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询;顶级域名收到请求后,要么给出所查询的IP地址,要么告诉本地域名服务器下一步应该向哪一个权威域名服务器查询,本地域名服务器就这样进行迭代查询,最后把结果返回给主机
迭代查询相当于你问别人借钱,别人没钱,告诉你应该找谁借
4.3 DNS缓存
DNS缓存是将解析数据存储在靠近发起请求的客户端位置,也可以说DNS数据是可以缓存在任意位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果
4.4 TTL
这个值是告诉本地域名服务器,域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查的过程
4.5 IPV4、IPV6双栈技术
在一个系统中可同时使用IPV6/IPV4这两个可以并行工作的协议栈
4.6 TLD Server
指顶级域名服务器
4.7 DNS Resolver
指本地域名服务器,它是DNS查找中的第一站,是负责处理发出初始请求的DNS服务器。运行商ISP分配的DNS如电信的114.114.114.114和谷歌的8.8.8.8等都属于DNS Resolver
4.8 Root Server
指根域名服务器,当本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址
4.9 DNS Query Flood Attack
指域名查询攻击,攻击方法是通过操纵大量傀儡机器,发送海量的域名查询请求,当每秒域名查询请求次数超过DNS服务器可承载的能力时,则会造成解析服务器超时从而直接影响业务的可能性
4.10 URL转发
地址转向,通过服务器的特殊设置,将一个域名指向到另一已存在的站点
4.11 edn-client-subnet
google提交了一份DNS扩展协议,允许DNS resolver传递用户的IP地址给authoritative DNS server
4.12 DNSSEC
域名系统安全扩展,他是通过数字签名来保证DNS应答报文的真实性和完整性,可有效防止DNS欺骗和缓存污染等攻击,能够保护用户不被重定向到非预期地址值,从而提高用户对互联网的信任
五、DNS记录类型
记录类型 | 功能 |
A | IPV4记录,支持将域名映射到IPV4地址使用 |
AAAA | IPV6记录,支持将域名映射到IPV6地址使用 |
CNAME | 别名记录,支持将域名指向另一个域名 |
MX | 电邮交互记录,支持将域名指向邮件服务器地址 |
TXT | 文本记录是任意可读的文本DNS记录 |
SRV | 服务器资源记录,用来标记某台服务器使用了某个服务,常见于微软系统的目录管理 |
NS | 名称服务器记录,支持将子域名委托给其他DNS服务商解析 |
CAA | CAA资源记录,可以限定域名颁发证书和CA(证书颁发机构)之间的联系 |
六、 DNS客户端检测工具
6.1 host
解析域名对应的IP地址和别名等信息
语法格式:
host [参数] [主机名或IP] [server]
常用参数:
-a | 显示详细的DNS信息 |
-c | 指定查询类型,默认值为“IN” |
-C | 查询指定主机的完整的SOA记录 |
-r | 不使用递归的查询方式查询域名 |
-t | 指定查询的域名信息类型 |
-v | 显示指令执行的详细信息 |
-w | 如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答 |
-W | 指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息则退出 |
-4 | 使用IPv4查询传输 (默认) |
-6 | 使用IPv6查询传输 |
示例1:
虽然可以看到www.baidu.com是www.a.shifen.com.的别名,但是我们不可以通过www.a.shifen.com.直接访问,虽然他们的域名指向相同,但是这个ip只绑定了www.baidu.com,当你用其他域名访问他的80端口的时候,会在应用层拒绝
示例2:
6.2 nslookup
在使用nslookup之前,先确保已经安装了它,nslookup属于bind-utils包下一个命令
nslookup有两种工作模式:“交互模式”和“非交互模式”。在命令行中直接输入nslookup,无需输入任何参数即进入交互模式,由“>”提示
语法格式:
nslookup [参数] [域名]
示例1:
示例2:
示例3:
6.3 dig
它是一个用来灵活查询DNS的工具,它会打印出DNS域名服务器的回应,主要用来从DNS域名服务器查询主机地址信息
dig命令与nslookup命令功能基本相同,但是dig命令灵活性好、易用、输出清晰
语法格式:
dig [参数] [IP]
示例1:
七、 客户端配置
法1:/etc/resolv.conf是DNS客户机配置文件
法2:
两个DNS,一主一备
八、正向解析
8.1 资源记录
8.1.1 SOA记录
name: 当前区域的名字,例如"stevelu.com."
value: 有多部分组成
1.当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
2.当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
例如:admin.stevelu.com
3.主从服务区域传输相关定义以及否定的答案的统一的TTL
TTL就是定义了这些东西:
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
8.1.2 NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如: ns.stevelu.org.
-
相邻的两个资源记录的name相同时,后续的可省略
-
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
-
一个区域可以有多个NS记录
8.1.3 MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
-
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
-
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
8.1.4 A记录
name: 某主机的域名解析,例如:www.kgc.com
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
* IN A 5.5.5.5
#代表泛域名
@ IN A 6.6.6.6
#代表不需要名字
8.1.5 PTR记录
PTR就是反向DNS
domain name pointer,可以粗略的理解为DNS反向
Domain Name Pointer. 是一个指针记录,用于将一个IP地址映射到对应的主机名,也可以看成是A记录的反向,通过IP访问域名,原来是通过域名访问IP
8.1.6 CNAME别名记录
name: 别名
value: 真正名字
ftp.stevelu.com. IN CNAME www.stevelu.com
#固定格式
name [TTL](可不写) IN (可不写) rr_type(NS、A) value(IP地址等)
缓存时间 internet记录 区域解析库 值
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS stevelu.com. #记录当前区域的DNS服务器的名称
A 192.168.109.100 #记录主机IP地址
IN MX 10 mail.stevelu.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.109.10 #记录正向解析www.benet.com对应的IP
mail IN A 192.168.109.11 #MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 192.168.109.100 #泛域名解析,“*"代表任意主机名
资源记录解析可以参考下这篇文章
DNS详解: A记录,子域名,CNAME别名,PTR,MX,TXT,SRV,TTL
8.2 配置过程
1.安装软件
yum install -y bind bind-utils
#bind服务端
#bind-utils客户端
2.关闭防火墙
systemctl stop firewalld.service
setenforce 0
3.开启服务
systemctl start named
4.查看端口是否开启
netstat -ntap |grep named
5.修改网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#DNS1=127.0.0.1
6.重启网卡
systemctl restart network
7.修改配置文件
vim /etc/named.conf
#listen-on port 53 { any; };
#allow-query { any; };
8.修改配置文件
vim /etc/named.rfc1912.zones
#zone "stevelu.com" IN {
# type master;
# file "stevelu.com.zone";
#};
9.复制配置文件并修改
cd /var/named/
cp named.localhost ./stevelu.com.zone -p
#master
#
# NS master
#master A 192.168.109.100
#www A 192.168.109.101
10.重启服务
systemctl restart named
此时,对于外网而言,只是开启服务,换了DNS就可以访问www.baidu.com了,为何呢,因为bind服务自带13台根域服务器
[root@localhost ~]# cat /etc/resolv.conf
接下来我们搭建可以让别人访问的服务
[root@localhost ~]# vim /etc/named.conf
[root@localhost ~]# vim /etc/named.rfc1912.zones
[root@localhost named]# rndc reload
#重新加载
此时已经解析成功了
但是,如果我们访问一个网页的时候多打了wwww或者不想打www也能访问到该IP地址怎么办呢?
[root@localhost named]# rndc reload
#重新加载
剩余的内容近期更新
总结
写配置文件一定要细心,写错一点就会起不来