Linux下DNS配置详解

简介:

 一,什么是DNS呢?

我们知道,在网络中是依靠IP地址来唯一标识一台主机,依靠IP地址和端口来标识某个主机上的某个服务。而我们目前应用最广泛的是IPV4的地址,它有32位组成,也就是会有上亿的不同的ip地址。如果我们访问一个主机上的服务,都需要记住此主机的ip地址,那将是多么可怕的一件事。所以,人类想出了一个好方法,把ip地址和主机名称联系起来,这样有助于我们的记忆,通过主机名称来获取该主机的ip地址。故应运而生,我们有了DNS,即域名解析服务,专门用于把主机名称解析为对应的ip地址,以实现网络主机之间的通信。我们的DNS服务通常运行在一个或几个性能比较稳定的主机上,而这台主机就是我们的DNS服务器。
全世界有不计其数的主机,而就像我们人的名字可以相同一样,主机的名称是可以相同的。而我们怎么通过主机名称来判断此机非彼机呢?这就需要给它一个域名。有了域名,即使相同名字的主机只要不在同一个域内,就可以实现通信。DNS是有层次之分的,每个层次上的主机名称和域名是不同的,整个层次的架构是一个树状的结构。
最上层的是根域,全世界的所有域都在根域之下,用”.”表示,根域负责管理顶级域。全世界有13台根域的服务器。
第二层是顶级域:有com,edu,gov,mil,org,cn.us,hk等。他们每个都有自己的意义:
com:商业公司
edu:教育单位
gov:政府单位
mil:军事单位
org:组织,机构
cn:中国
us:美国
hk:香港
第三层是二级域:比如cctv.cn.,magedu.com.,baidu.com.等
再往下,可以继续划分子域,例zz.edu.cn.;或是指定这个域负责解析的相应DNS服务器的主机名称,例: www.baidu.com.,它是标识的是在baidu.com.这个域中的一台主机www。
每个域都要指定一个主机去管理这个域,这个被指定的主机就是这个域中的域名服务器,并且每个域的域名服务器仅仅管理它的下一层的域名。例:com.这个域的DNS服务器只知道baidu.com这个域的,它并不知道 www.baidu.com.这台主机。
 
DNS的工作流程是怎么样的呢?
例:我们以 www.magedu.com.这个主机访问 www.jia.com.来说明这个过程域名解析过程。
首先,www.magedu.com.主机会查找自己的缓存,看是否有对应 www.jia.com.的缓存记录,如果有的话就直接把对应ip返回给主机。如果没有,再查找自己的hosts文件,如果没有相应的记录,才开始向其指向的域名服务器即管理magedu.com.这个域的DNS服务器发送解析请求,域名服务器收到请求后,先判断这个请求 www.jia.com.是不是自己所负责区域中的主机,如果是的话,就通过查询自己的区域数据文件返回解析结果;如果不是的话,就查询自己的缓存,缓存中有的话就返回解析,缓存中没有记录的话就直接向根域名服务器发送解析请求。根域名服务器收到请求后,判断是自己管理的com.这个域管理的主机,故把管理com.域的DNS服务器的ip返回给管理magedu.com域的DNS服务器,然后管理magedu.com.的DNS服务器会向管理com.域的DNS服务器发送解析请求,管理com.域的DNS服务器判断是自己管理的域jia.com.这个域中的主机,故再把管理jia.com.域的DNS服务器的ip返回给管理magedu.com域的DNS服务器。然后,管理magedu.com.域的DNS服务器向管理jia.com域的主机发送解析请求,管理jia.com域的DNS服务器判断是自己所负责区域的主机,然后查询区域文件,找到对应的记录项,返回给管理magedu.com域的DNS服务器。管理magedu.com域的DNS服务器收到对应的ip记录后,解析结果存入自己的缓存,并把解析结果发送给 www.magedu.com.这台主机,这台主机也会缓存这个解析结果,至此解析过程结束。
 
DNS是靠什么实现解析的呢?这就需要我们定义zone了
DNS可以实现把FQDN解析为对应的ip地址,这叫正向解析;而把ip地址解析为对应的FQDN,这叫反向解析。而简单点来说,一个正向解析的设置或反向解析的设置就是一个zone。即我们可以定义本机的正向和反向解析区域,可以定义一个域的正向和反向解析区域等。当然,正向解析和反向解析是相互独立的,并不是一定要设置反向解析。
而我们DNS区域的定义在/etc/named.conf这个文件中,它是DNS的主配置文件。
 
常用的命令:
service named start|stop|restart|reload|status|configtest  
开启,关闭,重新,重新载入,显示服务状态,检查全部区域文件的语法是否正确
named-checkconf  检查/etc/named.conf这个文件的语法
named-checkzone  PATH  检查一个区域文件的语法,PATH要使用绝对路径
dig –t A FQDN  正向解析
dig –x IP       反向解析
dig –t NS       正向解析一个域,会显示负责这个域的主机
dig –t axfr domain    获得整个区域的记录内容
 
二,构建缓存DNS:
DNS要受selinux的管理,并且防火墙也会组织DNS服务器之间数据的传送,故搭建DNS服务器之前,要配置selinux和防火墙或是关闭他们。
我们的named进程是由named用户来运行的,故我们要将区域配置文件的属组改为named,以便named进程运行正常
 
Linux中是需要安装bind这个软件包来提供DNS服务的,需要安装:
bind,bind-utils,bind-libs这三个软件包,这里我们使用文件来存放我们的记录项,而不使用数据库。
安装完这三个软件包之后,会自动生成一个目录/var/named,这个一般用于我们bind的工作目录。
现在我们开始DNS的构建:
1,vi /etc/named.conf        这个文件是bind的默认配置文件,我们要自己建
options {                    
  directory "/var/named";
     };                       
 

zone "." IN {

  type hint;
  file "named.ca";
};
 

zone "localhost" IN {

  type master;
  file "localhost.zone";
};
 

zone "0.0.127.in-addr.arpa" IN {

  type master;
  file "named.local";
};
options:用来定义全局作用域,在这里面定义的整个区域生效;
directory:用来指定我们bind的工作目录
zone:定义区域,格式是固定的。
”.”:定义根的正向解析区域
“localhost”:定义的是本机的正向解析区域
“0.0.127.in-addr.arpa”:定义的是本机的反向解析区

     type:定义区域的类型

 master:主
slave:从
hint:线索域,找不到的都找这个区域
forward:转发
file:定义的是该区域的解析文件,要在/var/named这个目录建立
 

     cd /var/named

     dig –t NS . > named.ca     定义根域解析文件

 

     vi localhost.zone           定义本机正向解析文件

     $TTL 600

@          IN      SOA     localhost  admin.localhost.  (

                2012030801       序列号,每次修改此文件,要加1

                20M             刷新时间,多长时间从dns到主dns更新记录
                5M              如果与dns链接失败,多长时间后重试
                7D              与主dns断开连接多长时间后从dns会宣告失效
                1D)             那些解析不到的记录的缓存时间

               IN     NS     localhost.

localhost.   IN     A       127.0.0.1

    

vi named.local               定义本机反向解析文件

$TTL 600

@        IN       SOA     localhost   admin.localhost. (

                     2012030801
                     20M
                     5M
                     7D
                     1D)

          IN        NS      localhost.

1         IN        PTR     localhost.

由于我们的根服务器有13台,是固定的。所有我们直接用dig命令查询后导入根区域的文件。
$TTL:定义了每条记录的TTL值
IN:
记录的类型有:
     NS:指定一个域的DNS服务器
     A :正向解析记录
     PTR:反正解析记录
     CNAME:指定别名
     MX:指定邮件服务器,后面要指定优先级0-99,值越小优先级越高
 

     chmod  :named  /var/named/*  /etc/named.conf

     service named start      开启DNS服务

     至此,我们的DNS现在已经是一个缓存DNS了,每个DNS的建立过程都要经历这个阶段。
 
 三,构建一个管理域的DNS(以magedu.com为例)
 vi /etc/named.conf
添加如下内容:
     zone "magedu.com" IN {        定义一个提供正向解析的区域

         type master;

         file "magedu.com.zone";
};
zone "168.192.in-addr.arpa" IN {  定义一个提供反向解析的区域
  type master;

  file "168.192.zone";

};
   
cd /var/named

vi magedu.com.zone

$TTL 600

$ORIGIN magedu.com.

@        IN     SOA     ns  admin (

                2012030801
                20M
                5M
                7D
                1D
                  )

                IN      NS    ns

                IN      MX 10 mail

mail            IN      A     192.168.0.200

pop             IN   CNAME  mail

ns              IN      A     192.168.0.100

www            IN      A     192.168.0.100

 
vi 168.192.zone
$TTL 600

@     IN  SOA   ns.magedu.com.  admin.magedu.com.  (

                2012030801
                20M
                5M
                7D
                1D
                  )

                IN      NS      ns.magedu.com.

200.0           IN      PTR     mail.magedu.com.

100.0           IN      PTR     ns.magedu.com.

100.0           IN      PTR     www.magedu.com.

 

chmod  :named  /var/named/*  /etc/named.conf

service named restart   重启DNS服务

vi /etc/resolv.conf            修改我们的DNS指向

nameserver 192.168.0.100

至此,管理magedu.com这个域的DNS服务器就建好了,能提供正向和反向的解析。
 
四,rndc工具的使用:
为了使我们便于管理DNS,我们可以安装rndc这个工具:

rndc-confgen > /etc/rndc.conf

tail /etc/rndc.conf | head -9 | sed 's@^#@@g' >> /etc/named.conf

service named restart     重启服务,我们的rndc就能使用了

rndc reload   重新载入配置文件

rndc status    显示服务器状态信息

rndc flush     情况服务器的缓存
rndc stop      停止服务

rndc reconfig   重新载入主配置文件和发送更新的文件,可以用于从DNS更新主DNS的区域文件

 
五,为magedu.com域中的主DNS构建一个从DNS服务器
从DNS会完全备份主DNS的记录,当主DNS挂掉之后,在一段时间内可以负责域中FQDN的解析,可以提供时间让我们修复主DNS,增加了服务的稳定性。
现在我们把192.168.0.200这台主机做成magedu.com的从DNS
首先,我们的主DNS要定义一个从DNS,即:
vi magedu.com.zone          向正向区域文件中添加这两行

@      IN   NS      ns2

Ns2     IN   A       192.168.0.200 

 
vi 168.192.zone               向正向解析区域添加这两行

@            IN      NS      ns2.magedu.com.

200.0           IN      PTR     ns2.magedu.com.

rndc reload    重读区域配置文件,使其生效
 
vi /etc/named.conf  
在文件的起始行添加:

acl OURCLIENT {                   定义一个名字为OURCLIENT的acl列表

  192.168.0.0/16; 
  127.0.0.1;                  
};
在options选项中添加:  

allow-transfer {  192.168.0.200;  };     即只允许从DNS进行完全区域传送

allow-recursion { OURCLIENT;  };     只允许192.168.0.0网段主机进行递归查询

 
在我们的192.168.0.200这台主机上,安装bind,bind-util,bind-libs这三个软件包
vi /etc/named.conf
options {

  directory "/var/named";

};
 
zone "." IN {
  type hint;
  file "named.ca";
};
 
zone "localhost" IN {
  type master;

  file "localhost.zone";

};
 
zone "0.0.127.in-addr.arpa" IN {
  type master;

  file "named.local";

};
 
zone "magedu.com" IN {
  type slave;                  说明这个主机是这个域的从DNS
  masters { 192.168.0.100; };     指定主DNS

  file "slaves/magedu.com";       指定正向解析文件,存放在/var/named/slaves中

};
 
zone "168.192.in-addr.arpa" IN {
  type slave;
  masters { 192.168.0.100; };

  file "slaves/168.192.zone";

};
 
cd /var/named
vi named.ca
vi localhost.zone
vi named.local
这三个文件和主DNS的一样,这里就不写它的内容了

   chmod  :named  /var/named/*  /etc/named.conf

    安装rndc工具:

rndc-confgen > /etc/rndc.conf

tail /etc/rndc.conf | head -9 | sed 's@^#@@g' >> /etc/named.conf

service named restart     重启服务,我们的rndc就能使用了

rndc reconfig           会自动把主DNS上的区域文件同步到/var/named/slaves目录中

 

现在我们的从DNS就建好了。只要两台主机能正常通信,防火墙规则允许传输数据。我们在主DNS上更改记录文件并修改序列号,rndc reload重新载入文件后,我们的从DNS就会自动更新对应文件的内容。

 
六,转发器的构建;
例如设置192.168.0.100这台DNS服务器,使其不解析example.com这个域中的主机,把 example.com这个域中主机请求转发到192.168.0.254这台DNS,则:
vi /etc/named.conf               添加如下行

zone "example.com" IN {

  type forward;
  forwarders { 192.168.0.254; };
};

rndc reload   重新载入配置文件

至此,只要是对example.com这个域中主机的解析请求,就会被转发给192.168.0.254这台主机,192.168.0.100这台主机不做解析。
 
七,子域授权
我们以magedu.com为例,创建一个子域tech.magedu.com
我们只需修改magedu.com.zone这个文件
cd /var/named
vi magedu.com.zone
添加如下行:

tech            IN       NS     tech.ns

tech.ns          IN       A      192.168.0.5

service named restart   使配置生效
 
我们在一个192.168.0.5这台主机上建立我们的子域
先安装bind软件包
 

vi  /etc/named.conf

options {                    
  directory "/var/named";
     };                       
 

zone "." IN {

  type hint;
  file "named.ca";
};
 

zone "localhost" IN {

  type master;
  file "localhost.zone";
};
 

zone "0.0.127.in-addr.arpa" IN {

  type master;
  file "named.local";
};
   

zone “tech.magedu.com” IN {

type master;
file “tech.magedu.com.zone”;
};
 
cd /var/named
vi named.ca            内容和前面的一样
vi localhost.zone
vi named.local
 
vi tech.magedu.com.zone                 正向解析的区域文件
$TTL 600
$ORIGIN tech.magedu.com.

@        IN     SOA     ns  admin  (

                2012030801
                20M
                5M
                7D
                1D
                  )

                IN      NS    ns

                IN      MX 10 mail

mail            IN      A     192.168.0.5

ns              IN      A     192.168.0.5

www            IN      A     192.168.0.5

 

chmod  :named  /var/named/*  /etc/named.conf

service named start  启动服务
好了,我们的子域也建立起来了。
这样我们的父域就能解析到子域了,但是,子域解析不到父域。要想使子域也能解析到父域则定义一个转发器即可。
 
 
八,view的构建
DNS的切割机制,就是通过view来实现的。通过view机制我们可以实现:
我们国家的两大巨头,电信和网通,他们的网络大多数是没有交集的,故他们之间互访的话是非常慢的。而我们用户有联通的也有电信的,因此,对大型的服务网站来说,通常他们有两类服务器,一类提供电信用户的连接请求,一类提供网通用户的连接请求,这样就不会跨网,加快了传输的速度。而这就需要DNS要有一种机制,能识别请求者是电信还是网通的ip,从而返回给他们相应的服务器ip,这就是DNS的智能解析。这个机制可以通过view来实现:
 
例如:我们的电信用户是192.168.0.0这个网段的ip,其他网段的ip是网通用户的。我们要实现把电信用户的请求发给192.168.0.100这个主机,把网通的的请求发给1.1.1.1这台主机,这就要配置DNS使返回给不同用户的解析是不同的。
 
安装bind软件包,然后我们还是以192.168.0.100为例构建:
 
vi /etc/named.conf
acl OURCLIENT {

  192.168.0.0/24;

  127.0.0.1;

};
 
options {

  directory "/var/named";

};
 
view internal {
 match-clients { OURCLIENT; };
 recursion yes;
 
zone "." IN {

  type hint;

  file "named.ca";

};
 
zone "localhost" IN {

  type master;

  file "localhost.zone";

};
 
zone "0.0.127.in-addr.arpa" IN {

  type master;

  file "named.local";

};
 
zone "magedu.com" IN {

  type master;

  file "magedu.com.internal";

  allow-transfer {  none; };

  allow-update { none; };

};
 
zone "168.192.in-addr.arpa" IN {

  type master;

  file "168.192.internal";

  allow-transfer { none; };

  allow-update { none; };

};
};
 
view external {
 match-clients { any; };
 recursion no;
zone "magedu.com" IN {

  type master;

  file "magedu.com.external";

  allow-transfer { none; };

  allow-update { none; };

};
 
zone "1.1.in-addr.arpa" IN {

  type master;

  file "1.1.external";

  allow-transfer { none; };

  allow-update { none; };

};
};
 
cd /var/named
vi named.ca         内容和前面的一样
vi localhost.zone     内容和前面的一样
vi named.local       内容和前面的一样
 
vi magedu.com.internal        定义内网正向解析的区域文件
$TTL 600
$ORIGIN magedu.com.

@        IN     SOA     ns  admin (

                2012030803
                20M
                5M
                7D
                1D
                  )

                IN      NS    ns

                IN      NS    ns2

                IN      MX 10 mail

mail            IN      A     192.168.0.200

ns              IN      A     192.168.0.100

ns2             IN      A     192.168.0.200

www             IN      A     192.168.0.100

 
vi magedu.com.external         定义外网正向解析的区域文件
$TTL 600
$ORIGIN magedu.com.

@        IN     SOA     ns1  admin (

                2012030803
                20M
                5M
                7D
                1D
                  )

                IN      NS    ns1

                IN      NS    ns2

                IN      MX 10 mail

mail            IN      A     1.1.1.1

ns1              IN      A     1.1.1.1

ns2             IN      A     1.1.1.2

www             IN      A     1.1.1.3

 
 
vi 168.192.internal       定义内网反向解析的区域文件
$TTL 600

@     IN  SOA   ns.magedu.com.  admin.magedu.com.  (

                2012030801
                20M
                5M
                7D
                1D
                  )

                IN      NS      ns.magedu.com.

                IN      NS      ns2.magedu.com.

200.0           IN      PTR     mail.magedu.com.

100.0           IN      PTR     ns.magedu.com.

200.0           IN      PTR     ns2.magedu.com.

100.0           IN      PTR     www.magedu.com.

 
vi 1.1.external          定义外网反向解析的区域文件
$TTL 600

@     IN  SOA   ns1.magedu.com.  admin.magedu.com.  (

                2012030801
                20M
                5M
                7D
                1D
                  )

                IN      NS      ns1.magedu.com.

                IN      NS      ns2.magedu.com.

1.1           IN      PTR     mail.magedu.com.

1.1           IN      PTR     ns1.magedu.com.

2.1           IN      PTR     ns2.magedu.com.

3.1           IN      PTR     www.magedu.com.

 
Service named start   
我们的智能DNS就建好了









本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/801876,如需转载请自行联系原作者
目录
相关文章
|
5天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
21 1
|
8天前
|
安全 Ubuntu Java
Linux配置使用篇
Linux配置使用篇
|
9天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
8天前
|
网络协议 Linux
在Linux中,管理和配置网络接口
在Linux中管理网络接口涉及多个命令,如`ifconfig`(在新版本中被`ip`取代)、`ip`(用于网络设备配置)、`nmcli`(NetworkManager的CLI工具)、`nmtui`(文本界面配置)、`route/ip route`(处理路由表)、`netstat/ss`(显示网络状态)和`hostnamectl/systemctl`(主机名和服务管理)。这些命令帮助用户启动接口、设置IP地址、查看连接和路由信息。不同发行版可能有差异,建议参考相应文档。
19 4
|
5天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
14 3
|
12天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
13天前
|
存储 缓存 监控
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
|
18天前
|
网络协议 Linux
Linux自建DNS
Linux自建DNS
11 0
|
18天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
关系型数据库 MySQL Linux
MySQL 数据库linux系统下修改配置文件设置mysql是否大小写敏感实例演示
MySQL 数据库linux系统下修改配置文件设置mysql是否大小写敏感实例演示
183 0
MySQL 数据库linux系统下修改配置文件设置mysql是否大小写敏感实例演示

相关产品

  • 云解析DNS