Linux下DNS配置详解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

 一,什么是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,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
44 9
|
17天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
33 5
|
22天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
61 4
|
23天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
1月前
|
域名解析 存储 缓存
DNS是什么?内网电脑需要配置吗?
【10月更文挑战第22天】DNS是什么?内网电脑需要配置吗?
114 1
|
2月前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
48 2
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
322 3
|
2月前
|
机器学习/深度学习 调度
mmseg配置解析 Polynomial Decay 多项式衰减
Polynomial Decay(多项式衰减)是一种常用的学习率调度方法,通过多项式函数逐步减少学习率,帮助模型更好地收敛。公式为:\[ lr = (lr_{initial} - \eta_{min}) \times \left(1 - \frac{current\_iter}{max\_iters}\right)^{power} + \eta_{min} \]。参数包括初始学习率、最小学习率、当前迭代次数、总迭代次数和衰减指数。适用于需要平滑降低学习率的场景,特别在训练后期微调模型参数。
65 0
mmseg配置解析 Polynomial Decay 多项式衰减
|
2月前
|
JSON JavaScript 前端开发
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
87 0
|
2月前
|
编解码 计算机视觉
mmseg配置解析 align_corners=False
`align_corners=False` 是图像插值操作中的一个参数,影响输入和输出图像的角点对齐方式。`align_corners=True` 严格对齐角点,而 `align_corners=False` 均匀分布像素点,更适用于保持整体比例关系的任务,如语义分割。
34 0

相关产品

  • 云解析DNS
  • 下一篇
    无影云桌面