DNS介绍与安装使用
DNS简介
DNS是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP的53号端口。
DNS服务的基本概念
在使用DNS前需要了解一些和DNS相关的概念这样有助于更好的理解DNS原理和使用。
域
域简单理解就是我们使用的域名,只是域名是有划分的,分为根域,顶级域等等,域的划分如下:

我们平时浏览互联网使用的域名.com、.org等都是顶级域。
FQDN:完全域名限定
每一个域名在全球网络中都是唯一的,比如gudaoyufu.com.
DNS服务器查询的类型
- 递归查询:
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。 - 迭代查询:
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果
为止。
DNS查询过程

画一张简化流程图:

一次完整的解析过程:
client ——> 本机hosts 文件 ——> local cache(浏览器缓存) ——> DNS server ——> server cache ——> iteration(迭代)
DNS解析
- 正向解析:将域名转换成ip地址
- 反向解析:将ip地址转换成域名
DNS解析返回的结果类型
- 肯定答案:查询的域存在,会被缓存下来。
- 否定答案:不存在查询的域名,因此不存在与其查询的域名对应的IP;会被缓存下来。
- 权威答案:所查询的域名的结果是由负责解析这个域的DNS服务器所返回的答案。
- 非权威答案:在缓存中查询的结果。
DNS服务器类型
- 主dns服务器
- 从dns服务器
- 缓存服务器
主dns服务器:维护所负责解析的域内解析库服务器;解析库由管理员管理维护
从dns服务器:从主dns服务器或其他从dns服务器那里同步解析库
从服务器相关原理:
序列号:解析库的版本号:前提:主服务器解析库内容发生变化,其序列递增
刷新时间:从服务器从主服务器请求同步解析库的时间间隔
重试时长:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔
过期时长:从服务器始终联系不到主服务器时,多久时间后放弃从服务器角色,停止提供服务
否定答案的TTL值:
缓存服务器:接收互联网用户请求,不负责解析任何域,只提供代理解析工作,并将解析的结果存在本地,实现缓存功能
主从之间的数据同步方式:区域传送
全量传送:传送整个解析库
增量递增:传递解析库变化的那部分内容
资源记录(RR)的类型
SOA:起始授权记录:一个区域解析库有且只能有一条SOA记录。且必须为区域解析库的第一条记录
NS : 专用于表明当前区域的DNS服务器,指名DNS服务器
A: 主机名到ip地址的解
MX :邮件交换器,表明当前域内谁是邮件服务器
CNAME : 别名记录
PTR : IP ——> FQDN
AAAA : FQDN ——> IPv6
资源记录的语法
SOA记录:name [TTL] IN type value
注意:
(1) name:当前区域的名字,例如“yufu.com”
(2) @可用于引用当前区域的名字
(3) value: 有多部分组成
1, 当前区域的主DNS服务器的FQND,也可以使用当前区域的名字
2,当前区域管理员的邮箱地址:但地址中不能使用@符号一般用 . 替换,例如:linux.gudaoyufu.com
3,(主从服务器协调属性的定义以及否定的答案的统一的TTL)
SOA的格式:
$TTL 1D
@ IN SOA ns1.yufu.com. amin.yufu.com (
2018051501 #序列号
1H #刷新时间
5M #重试时间
7D #过期时间
1D ) #定答案的TTL值
NS语法:
name:当前区域的名字 (可省略)
value:当前区域的某DNS服务器的名字 eg:ns.yufu.com.(一个区域可以有多个NS记录)
eg:
IN NS ns1.yufu.com
IN NS ns2.yufu.com
A记录语法:
name: 某主机的FQDN,例如:www.gudaoyufu.com.
value: 主机名对应的IP 地址
eg: 指定两台dns服务器的IP地址
ns1 IN A 192.168.214.128
ns2 IN A 192.168.214.187
eg:指定www.yufu.com的IP地址
www.yufu.com. IN A 192.168.214.135
yufu.com. IN A 192.168.214.135
MX语法:
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名 , 一个区域内,MX记录可有多个;
eg:
mx1 IN A 192.168.214.189
mx2 IN A 192.168.214.190
CNAME语法:
CNAME:
name : 别名的FQDN
value: 真正名字的FQDN
eg:
web.gudaoyufu.com. IN CNAME www.gudaoyufu.com
PTR反向解析语法:
name : IP,有特定格式,把ip地址反过来写;例如 1.2.3.4 要写作 4.3.2.1
而且有特定后缀:in-addr.arpa;完整写法为 4.3.2.1.in-addr.arpa
DNS服务程序与主要文件
DNS的主服务程序叫BIND,安装即可,BIND服务的名称叫named,通过named进行服务的启动。
安装BIND
yum install bind -y
启动
systemctl start named
查看端口
[root@localhost ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 10 192.168.214.128:53 *:*
LISTEN 0 10 127.0.0.1:53 *:*
BIND主要配置文件
/etc/named.conf BIND主文件
设置一般的name参数,指向该服务器使用的域数据库的信息源
/etc/named.rfc1912.zones 区块设置文件
/var/named/named.ca
根域名配置服务器指向文件(不需要改动)
/var/named/localhost.zone localhost区正向域名解析文件
用于将本地IP地址(127.0.0.1)转换为本地回送IP地址(127.0.0.1)
/var/named/name.local localhost区反向域名解析文件
用于将localhost名字转换为本地回送IP地址(127.0.0.1)
DNS配置实验
配置一个DNS服务器,提供web地址解析,其他主机指向该服务器获得解析到的地址访问web服务,设置web服务的域名为www.yufu.com

配置DNS
编辑/etc/named.conf
named.conf文件中内容注释使用//或/注释内容/
每个段落后要以 ;结尾
options {
// listen-on port 53 { 127.0.0.1; }; //可以不设置,代表全部接受
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
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 { localhost; }; //可以不设置,代表全部接受
allow-query { any; };
recursion yes; //将自己视为客户端的一种查询模式
修改区域文件/etc/named.rfc.1912.zones添加区域解析库文件信息
添加正向解析
zone "yufu.com" IN { #正向解析域名
type master; #指明是DNS主区域
file "gudaoyufu.com.zone"; #指定域名解析的区域配置文件名
};
添加反向解析
zone "214.168.192.in-addr.arpa" IN {
type master;
file "192.168.214.128.zone";
};
编写正向解析库文件
vim /var/named/gudaoyufu.com.zone
$TTL 1D
@ IN SOA ns1.yufu.com. amin.yufu.com (
2018051501
1H
5M
7D
1D )
IN NS ns1.yufu.com.
IN NS ns2.yufu.com.
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 192.168.214.128
ns2 IN A 192.168.214.187
mx1 IN A 192.168.214.189
mx2 IN A 192.168.214.190
www.yufu.com. IN A 192.168.214.135
yufu.com. IN A 192.168.214.135
编写反向解析库文件
注意:反向解析库文中的区域名称要反写并且加上固定后缀,编写方式见下面配置、
vim /var/named/192.168.214.128.zone
$TTL 1D
$ORIGIN 214.168.192.in-addr.arpa. ;反向区域的名字
@ IN SOA ns1.yufu.com. admin.yufu.com. (
2018051501 #序列号
1H #刷新时间
5M #重试时间
7D #过期时间
1D ) #否定答案时间
IN NS ns1.yufu.com. #定义ns1的dns的主机名
IN NS ns2.yufu.com. #定义ns2的dns的主机名
128 IN PTR ns1.yufu.com. #定义ns1主机的地址
187 IN PTR ns2.yufu.com. #定义ns2主机的地址
189 IN PTR mx1.yufu.com. #定义邮件服务mx1的地址
190 IN PTR mx2.yufu.com. #定义邮件服务mx2的地址
135 IN PTR www.yufu.com. #定义www.yufu.com的主机反向解析
135 IN PTR yufu.com. #定义yufu.com反向解析
#反向解析配置文件
#PTR:反向解析标识
#记录的地址只写地址的最后一段的相对路径,因为在$ORIGIN 214.168.192.in-addr.arpa.
#中会自动补全地址
#反向解析中,除了NS定义dns主机服务外,其他记录mx,A等记录都用PTR
DNS测试工具dig
DNS服务配置好以后在本机使用工具测试配置是否正确,这里介绍一下查询工具dig
Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。
Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内,但是在linux系统下,它的包名称叫bind-tools。yum安装即可
使用选项:
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x<IP地址>:执行逆向域名查询;
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。
参数:
主机:指定要查询域名主机;
查询类型:指定DNS查询的类型;
查询类:指定查询DNS的class;
查询选项:指定查询选项。
本地测试:通过本机查询www.yufu.com 的ip地址
[root@localhost ~]# dig -t A www.yufu.com @192.168.214.128
;www.yufu.com. IN A
;; ANSWER SECTION:
www.yufu.com. 86400 IN A 192.168.214.135
;; AUTHORITY SECTION:
yufu.com. 86400 IN NS ns1.yufu.com.
yufu.com. 86400 IN NS ns2.yufu.com.
;; ADDITIONAL SECTION:
ns1.yufu.com. 86400 IN A 192.168.214.128
ns2.yufu.com. 86400 IN A 192.168.214.187
本地测试:通过本机查询192.168.214.128.135主机的域名
[root@localhost ~]# dig -x 192.168.214.135 @192.168.214.128
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
;; QUESTION SECTION:
;135.214.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
135.214.168.192.in-addr.arpa. 86400 IN PTR www.yufu.com.
135.214.168.192.in-addr.arpa. 86400 IN PTR yufu.com.
;; AUTHORITY SECTION:
214.168.192.in-addr.arpa. 86400 IN NS ns2.yufu.com.
214.168.192.in-addr.arpa. 86400 IN NS ns1.yufu.com.
;; ADDITIONAL SECTION:
ns1.yufu.com. 86400 IN A 192.168.214.128
ns2.yufu.com. 86400 IN A 192.168.214.187
Client服务测试
部署好web服务(这里略过)
客户端设置
echo "nameserver 192.168.214.128" > /etc/resolv.conf
[root@yufu ~]# cat /etc/resolv.conf
nameserver 192.168.214.128
测试访问
[root@yufu ~]# curl http://www.yufu.com/index.html
<html>
<title>Welcome to nginx!</title>
Welcome to nginx!
this is test page
</html>
[root@yufu ~]# curl http://yufu.com/index.html
<html>
<title>Welcome to nginx!</title>
Welcome to nginx!
this is test page
</html>
DNS介绍与安装使用的更多相关文章
- MySQL系列-第一章节:MySQL介绍与安装
1.数据库介绍 1.1.什么是数据库`<Database>` 简单说存放数据的仓库,这个仓库按照一定的数据结构<数据结构是指数据的组织形式或数据之间的联系>来组织.存储的,我们 ...
- Alibaba Nacos 学习(一):Nacos介绍与安装
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
- 从零自学Hadoop(19):HBase介绍及安装
阅读目录 序 介绍 安装 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇, ...
- 从零自学Hadoop(14):Hive介绍及安装
阅读目录 序 介绍 安装 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 本系列已 ...
- Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...
- Bash on Windows 抢鲜测试 -- 介绍及安装
前言 微软在上周的Windows BUILD大会上宣布,WIN10将引入原生Bash,并将很快在技术预览版中推出. 如此一来,windows的命令行工具就不再只有cmd和powershell了,我们可 ...
- Tyk API网关介绍及安装说明
Tyk API网关介绍及安装说明 Tyk是一个开源的轻量级API网关程序. 什么是API网关 API网关是一个各类不同API的前置服务器.API网关封装了系统内部架构,对外提供统一服务.此外还可以实现 ...
- Python介绍、安装、使用
Python介绍.安装.使用 搬运工:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python语言介绍 说到Python语言,就不得不说一下它的创始人Guido van Rossu ...
- Redis介绍以及安装(Linux)
Redis介绍以及安装(Linux) redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcached类似,但很大程度补偿了memcached的不足,它支持存储的 ...
随机推荐
- java 多线程 yield方法的意义
Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一 ...
- mysql java 通用AES加密
最近有个需求,需要对数据库某些字段加密,调研发现采用AES加密的方式较多,而且反向解密速度快,符合需求,于是采用:下面是遇到的问题及相关代码 首先第一个问题,AES的秘钥是16位,mysql的密码长度 ...
- MVC HtmlHelper listbox用法
主要实现MVC listbox左右移动,搜索左边用户 controller List<userinfo> lstUserInfo = new List<userinfo>( ...
- Redis学习1
Redis 学习记录 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zs ...
- .NET Core 部署到CentOS–2.创建守护进程, 通过Nginx公网访问
继上一篇, 我们确定在内网可以通过 "http://localhost:5000",可以访问到站点后,接下来我们要配置"守护进程","Nginx公网8 ...
- MVC切片编程
在商城网站中,用户中心的每个页面都要几乎都要涉及对用户是否登录的判断,为了减少代码重写,可采用切片编程 using System; using System.Collections.Generic; ...
- 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用
从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...
- Vue.js - Day3
定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可: 组件化和模块化的不同: ...
- <Android 基础(七)> DrawerLayout and NavigationView
介绍 DrawerLayout是Support Library包中实现了侧滑菜单效果的控件 android.support.v4.widget.DrawerLayout NavigationView是 ...
- html中如何使用python屏蔽一些基本功能
进行数据解析的理由不计其数,相关的工具和技巧也同样如此.但是,当您需要用这些数据做一些新的事情时,即使有“合适的”工具可能也是不够的.这一担心对于异类数据源的集成同样存在.用来做这项工作的合适工具迟早 ...