前言逗逗乐
开局一个图,自己先体会一下,为什么会这样? 一起带着这个疑问,来看这篇文章吧。
文章目录
- 前言逗逗乐
- 一、DNS概述
- 1、域
- 2、域名服务器
- 3、DNS的工作过程
- 4、DNS服务器种类
- (1)主服务器(master server)
- (2) 从服务器(slave server)
- (3) 缓存服务器(cache server)
- (4) 转发服务器(forward server)
- 二、使用BIND搭建DNS服务器前奏
- (一)BIND的介绍
- (二)安装BIND
- (三)卸载BIND
- (四)bind的配置文件
- 1、主配置文件/etc/named.conf
- (1)options语句块
- (2)logging语句块
- (3)zone语句块
- (4)include语句块
- 2、/etc/named.rfc1912.zones 配置文件
- 3、正向与反向数据配置文件
- 三、实战使用BIND搭建DNS服务器
- (一)DNS主服务器搭建实战
- 1、环境准备
- 2、配置主配置文件
- 3、配置named.rfc1912.zones 文件
- 4、配置正反向数据库解析文件
- (1)配置正向解析文件
- (2)配置反向解析文件
- 5、启动named
- 6、测试
- 7、关闭named
- 8、重启named
- (二)DNS主从服务器搭建实战
- (三)DNS缓存服务器搭建实战
- 文末说明
一、DNS概述
DNS:域名系统(Domain Name System);说到域名就有必要了解一下域的概念。
1、域
域表示一个范围,域内可以容纳许多主机,并非每一台接入Internet的主机都必须具有一个域名地址,但是每一台主机都必须属于某个域,通过该域的域名服务器可以查询和访问到这一台主机。域名采用层次命名结构:域.子域(.子域 (.子域)),它体现了一种隶属关系。如下图所示:
2、域名服务器
域名服务器实现域名地址与IP地址的映射。Internet中设置一系列的域名服务器,域名服务器数据库记录本域内的主机名和IP地址的映射信息,以及上一级域名服务器的IP地址等,并以客户-服务器模式(C/S模式)响应客户端的请求。
3、DNS的工作过程
如下图所示,是某个学校的校园网:
内网用户就可以通过218.2.135.1这台域名服务器来解析内网的域名了。
像校内办公的WWW服务器,这台服务器肯定不能面向广大的互联网,如果公开面向所有人的话,会存在一定的风险。所以校内办公,那么校内办公也是需要访问服务器的,例如:211.133.92.29这台服务器,那么这台域名服务器就起到作用了。
如果用户浏览器地址栏中输入http://lib.xhu.edu.cn ,客户端发送请求到本地的DNS服务区(211.133.92.29).询问http://lib.xhu.edu.cn的IP地址。 本地的DNS服多器查看是否在城名P地址表中,如果是,就回复应答;如果不是就从上一级查起。上一级DNS服务器中如果没有,再上上一级DNS服务器查询。
注:图片来自博客 从输入url到页面加载完都做了什么
在上图过程中本地域名服务器完成的就是迭代的过程,本地域名服务器先去找根域名服务器,根域名服务器告诉它去找.com顶级域名服务器,而后本地服务器又去询问.com域名服务器,.com域名服务器告诉他去找google.com域名服务器,google.com域名服务器正是负责解析www.google.com这个域名的服务器,返回权威答案给本地域名服务器。
客户端即是递归去查询,仅发出一次解析www.google.com域名的请求给本地服务器,剩下的事情就是等待答案。
4、DNS服务器种类
DNS定义多种类型的服务器,每种服务器在域名服务系统中所起的作用也不一样,基本上可以分为: DNS主服务器、DNS从服务器、DNS 缓存服务器和转发服务器。
- (1) 主服务器(master server);
- (2) 从服务器(slave server);
- (3) 缓存服务器(cache server);
- (4) 转发服务器(forward server)。
(1)主服务器(master server)
每个网络中至少有一台主服务器解析网络上的域名请求,通过本地维护更新有关服务器授权管理域的最精确度信息。主服务器具有最权威的回答机制,能够完成任何关于授权管理域的查询。
下图所示在一个内网中,只有一台DNS服务器。这个单台服务器可以支撑一个比较小的单位的域名查询,但是不足以支撑一个庞大的域名使用群体。
(2) 从服务器(slave server)
在-个比较大的网络中,为了确保主服务器的可用性,最好是架设几台从服务器,这样一旦主服务 器不能工作时,还有从服务器工作。另一个优点是从服务器可以分担负载,以确保所有的主机都有比较靠近的域名服务器,方便访问。
如下图所示,就可以简单的表达主从关系。进而可以做到负载均衡的作用。
(3) 缓存服务器(cache server)
缓存服务器没有任何域名数据库文件,记录发送到主服务器之前的查询结果,一且获得答案, 该服务器就将答案缓存起来以免将来对同一信息查询。任何重复的请求都可以由缓存服务器应答,不必再查询主服务器或者从服务器。
如下图所示就是使用了缓存DNS服务器的结构图,使用了缓存DNS服务器之后,如果DNS域名第一次被查询了,就会被DNS缓存服务器给缓存,第二次再查询的时候,就会很快等优点。
下午是我找的一个,比较好的解释了这个缓存服务器的作用,和过程。
(4) 转发服务器(forward server)
当DNS server 不能解析相关DNS请求时会被转送特定的服务器上,用户可以设置网络中的DNS服务器 转发服务器来完成此到Internet功能。转发服务器器将要解析的DNS请求转发到网络以外的服务器。
下图也可以诠释转发DNS服务器的工作过程,就是负责转发。
二、使用BIND搭建DNS服务器前奏
(一)BIND的介绍
BIND(Berkeley Internet Name Daemon),是由加州大学伯克莱分校所研发出来的BSD Unix中的一部分,现在由ISC组织负责维护与发展。是现今互联网上最常使用的DNS域名系统。
BIND的域名服务器可以作为区域的主服务器、从服务器或者缓存服务器。虽然主服务器和缓存服务器在逻辑上是不同的,但是可以放在不同的服务器上运行。主服务器只为本地客户提供递归查询则不需要暴露在互联网上,因此可以放在防火墙后面。
(二)安装BIND
在任何操作系统上都不会自带着BIND服务,所以要想实现DNS服务功能,就必须先安装bind相关软件包。
首先查看是否已经存在:
[root@localhost ~]#
[root@localhost ~]# rpm -qa |grep bind
[root@localhost ~]#
如果不存在就可以安装了:
[root@localhost ~]# yum -y install bind
....
安装过程省略,太多了
可以再次查看是否安装:(出现下面这些,则安装成功)
[root@localhost ~]# rpm -qa |grep bind
bind-libs-lite-9.11.4-16.P2.el7_8.2.x86_64
bind-9.11.4-16.P2.el7_8.2.x86_64
bind-license-9.11.4-16.P2.el7_8.2.noarch
bind-libs-9.11.4-16.P2.el7_8.2.x86_64
[root@localhost ~]#
(三)卸载BIND
支持yum和rpm等都可以卸载,这里只说明用yum怎么卸载,具体rpm的方式可以自行网络上查询下。
因为可以使用rpm -qa |grep bind
查询出来安装的具体的软件包:
[root@localhost ~]# rpm -qa |grep bind
bind-libs-lite-9.11.4-16.P2.el7_8.2.x86_64
bind-9.11.4-16.P2.el7_8.2.x86_64
bind-license-9.11.4-16.P2.el7_8.2.noarch
bind-libs-9.11.4-16.P2.el7_8.2.x86_64
[root@localhost ~]#
在shell中支持把查询后的结果作为变量的方式传递给另一个命令,咱们就可以使用这种方式一下子卸载,从而不必关心依赖的问题。
[root@localhost ~]# yum -y remove $(rpm -qa |grep bind)
....
省略...
....
删除:
bind.x86_64 32:9.11.4-16.P2.el7_8.2
bind-libs.x86_64 32:9.11.4-16.P2.el7_8.2
bind-libs-lite.x86_64 32:9.11.4-16.P2.el7_8.2
bind-license.noarch 32:9.11.4-16.P2.el7_8.2
完毕!
[root@localhost ~]#
再次查询如果没有就说明卸载成功:
[root@localhost ~]# rpm -qa |grep bind
[root@localhost ~]#
(四)bind的配置文件
管理DNS的主要配置文件有6个,他们分别是:/etc/named.conf
、/etc/named.rfc1912.zones
、/var/named.localhost
、/var/named.loopback
、/var/named.ca
。其中/etc/named.conf
和/etc/named.rfc1912.zones
共同组成了bind的主配置文件
,但是不包含DNS的数据库
。它们的作用
是配置全局参数
,调配正向和反向数据库文件
。
1、主配置文件/etc/named.conf
/etc/named.conf
配置文件存在的目的就是定义named服务进程管理和维护所需要的配置文件等。使named服务进程能够知道其维护的每一个域和区配置文件的名字和其目录位置。
**主配置文件/etc/named.conf
**的内容如下:
如果你没有vim的话,建议你安装上,这样有个好处就是会看到五彩缤纷的配置文件。
[root@localhost ~]# vim /etc/named.conf bash: vim: 未找到命令 [root@localhost ~]# yum -y install vim
内容:(为了方便查看,我去掉了大量的注释)
精彩配图:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
(1)options语句块
服务器的全局配置选项及一些默认设置。
//监听端口,也可写为 { 127.0.0.1; 192.168.139.46; }
`listen-on port 53 { any; };`
//IPV6的表达
`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";`
//服务器记录named进程ID的文件路径
`pid-file "/var/run/named/named.pid";`
//其他DNS服务器的地址,如果域名服务器无法解析时,将请求交由168.95.1.1; 139.175.10.20来解析。
`forwarders { 168.95.1.1; 139.175.10.20; }; `
//指定允许进行查询的主机IP,所有的电脑都可以查用any
`allow-query { any; }; `
//指定允许接受区域传送请求的主机,说明白一点就是辅dns定义,比如辅dns的ip是192.168.139.5,那么可以这样定义{ 192.168.139.5; },要不然主辅dns不能同步,当然,{}里的也可以用下面提到的acl。
`allow-transfer { none; };`
//allow-source:指定从哪一个源IP地址(或端口)中执行区域配置数据传输,获取配置数据副本,这个选项英语主服务器的allow-transfer相对应
// `query-source port 53;` :当前域名服务器查询不到时,用它指定查询其他域名服务器时用的IP和端口号 // `query-source-v6 port 53;` //`recursion`:指定当前递归查询是否由服务器代替客户机执行,默认值为yes。 //`allow-recursion`:细化控制域名服务器的递归查询。
(2)logging语句块
指定服务器日志记录的内容和日志信息来源
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
(3)zone语句块
hint
只针对.域进行设置。type:hint
根NS的设置,也就是.域的服务器设置。因为我们知道,客户端从指定的NS上找不到记录后,将会出现两种情况,一种向.域服务器请求查询。一种将请求转发到上一级NS服务器。这里的设置是指第一种。
zone "." IN {
type hint;
file "named.ca";
};
(4)include语句块
include语句块:用于组合指定的配置,可以提高配置文件的模块化
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
2、/etc/named.rfc1912.zones 配置文件
配置解析库主配置文件
一图胜千言
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
3、正向与反向数据配置文件
数据文件默认在/var/named/
目录下:
[root@localhost ~]# ll /var/named/
总用量 16
drwxrwx---. 2 named named 6 4月 7 10:41 data
drwxrwx---. 2 named named 6 4月 7 10:41 dynamic
-rw-r-----. 1 root named 2253 4月 5 2018 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 4月 7 10:41 slaves
[root@localhost ~]#
图片比较清晰:
三、实战使用BIND搭建DNS服务器
(一)DNS主服务器搭建实战
1、环境准备
操作系统:Centos7
IP:192.168.9.105/24
本机dns地址的配置可以参考:
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.9.105
nameserver 202.102.128.68
nameserver 202.102.152.3
[root@localhost ~]#
2、配置主配置文件
在配置的时候,一定要先备份一下,不然遇到错误了,就比较麻烦了。这里只提醒一次,之后请自行备份哦,初学者要养成习惯。
[root@localhost ~]# cp -p /etc/named.conf /etc/named.conf.bak
[root@localhost ~]#
打开/etc/named.conf:
[root@localhost ~]# vim /etc/named.conf
配置内容如下:
为了方便大家后期学习,代码也给放上:
[root@localhost ~]# cat /etc/named.conf
options {
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
3、配置named.rfc1912.zones 文件
zone "taobao" IN {
type master;
file "taobao.zone";
allow-update { none; };
};
#注意此处,因为我的网络的范围是:192.168.9.0/24的,这里就要区一个范围,而且是倒着的
zone "9.168.192.in-addr.arpa" IN {
type master;
file "192.arpa";
allow-update { none; };
};
4、配置正反向数据库解析文件
因为正反向的数据库文件都起好了名字,所以这里要拷贝成自己命名的文件。
[root@localhost ~]# cp -p /var/named/named.empty /var/named/192.arpa
[root@localhost ~]#
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/taobao.zone
[root@localhost ~]#
[root@localhost ~]# ll /var/named/
总用量 24
-rw-r----- 1 root named 152 12月 15 2009 192.arpa
drwxrwx---. 2 named named 6 4月 7 10:41 data
drwxrwx---. 2 named named 6 4月 7 10:41 dynamic
-rw-r-----. 1 root named 2253 4月 5 2018 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 4月 7 10:41 slaves
-rw-r----- 1 root named 152 6月 21 2007 taobao.zone
[root@localhost ~]#
(1)配置正向解析文件
编辑文件
[root@localhost ~]# vim /var/named/taobao.zone
内容如下:
$TTL 1D
@ IN SOA taobao.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.taobao.com.
MX 5 mail.taobao.com.
mail A 192.168.9.106
dns A 192.168.9.105
www A 192.168.9.107
ftp A 192.168.9.108
(2)配置反向解析文件
打开
[root@localhost ~]# vim /var/named/192.arpa
内容如下:
$TTL 3H
@ IN SOA taobao.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.taobao.com.
MX 5 mail.taobao.com.
106 PTR mail.taobao.com.
105 PTR dns.taobao.com.
107 PTR www.taobao.com.
108 PTR ftp.taobao.com.
5、启动named
[root@localhost ~]#
[root@localhost ~]# systemctl start named
[root@localhost ~]#
[root@localhost ~]#
如果没有问题的话,就代表启动成功了
6、测试
如果没有此命令的话就会显示:
[root@localhost ~]# nslookup
bash: nslookup: 未找到命令
可以安装一下:
[root@localhost ~]#
[root@localhost ~]# yum -y install bind-utils
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirror.bit.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 bind-utils.x86_64.32.9.11.4-16.P2.el7_8.2 将被 安装
--> 解决依赖关系完成
依赖关系解决
==============================================================================
Package 架构 版本 源 大小
==============================================================================
正在安装:
bind-utils x86_64 32:9.11.4-16.P2.el7_8.2 updates 259 k
事务概要
==============================================================================
安装 1 软件包
总下载量:259 k
安装大小:584 k
Downloading packages:
bind-utils-9.11.4-16.P2.el7_8.2.x86_64.rpm | 259 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 32:bind-utils-9.11.4-16.P2.el7_8.2.x86_64 1/1
验证中 : 32:bind-utils-9.11.4-16.P2.el7_8.2.x86_64 1/1
已安装:
bind-utils.x86_64 32:9.11.4-16.P2.el7_8.2
完毕!
然后就可以了:
[root@localhost ~]#
[root@localhost ~]# nslookup
>
测试:
我在win10上把dns改成了DNS服务器的地址:
测试结果:
出现下面这个结果就ok了,非权威应答是真正淘宝的域名。自己可以尝试着去解析一下其他的。
C:\Users\80429>nslookup
默认服务器: dns.taobao.com
Address: 192.168.9.105
>
> taobao.com
服务器: dns.taobao.com
Address: 192.168.9.105
非权威应答:
名称: taobao.com
Addresses: 140.205.220.96
140.205.94.189
>
7、关闭named
[root@localhost ~]# systemctl stop network
8、重启named
[root@localhost ~]# systemctl restart network
(二)DNS主从服务器搭建实战
…后续更新
(三)DNS缓存服务器搭建实战
…后续更新
文末说明
如果对你有帮助,可以分享给你身边的朋友。或者给俺点个大大的赞,点赞就是给我最大的支持,感谢。
水平有限,难免会有疏漏或者书写不合理的地方,欢迎交流讨论。
作者:TrueDei
作者主页:https://truedei.blog.csdn.net/
原文地址:https://truedei.blog.csdn.net/article/details/106037921
转载说明:如需转载请注明原地址和作者名。