ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Linux】DNS基础知识

【Linux】DNS基础知识

原创 Linux操作系统 作者:小亮520cl 时间:2016-04-18 15:20:13 0 删除 编辑

 DNS 数据库的记录:正解,反解, Zone 的意义

通过DNS解析过程详解这篇文章,我们知道了要想访问,最重要的就是 .zmit.cn这部DNS服务器内记录的信息了。这些记录的文件,我们可以称之为数据库,而在数据库里面针对每个要解析的领域(domain,如 .com, .cn, .org, .com.cn),就称为一个区域(zone)。有从主机名查询到IP的方式,也有从IP反查到主机名的方式,因此:

  • 从主机名查询到IP和方式,称为:正解
  • 从IP反解析到主机名的方式称为:反解
  • 不管是正解还是反解,每个领域的记录就是一个zone(区域)

正解的设定权以及 DNS 正解 zone 记录的标志

谁可以申请正解的 DNS 服务器架设权呢?答案是:都可以!只要该领域没有人使用, 你先抢到, 就能够使用了。 不过, 因为国际 INTERNIC 已经定义出 gTLD 以及 ccTLD 了,所以你不能自定义例如 sun.zmit这种网域的!还是要符合上层DNS 所给予的领域范围才行。像比较新的 *.xyz,和 *.我爱你 这样的领域名。

正解文件的zone里主要记录了哪些信息,因为正解的重点在于由主机名查询到IP,而且每部 DNS 服务器还是得要定义清楚,同时,你可能还需要架设master/slave 架构的 DNS 环境,因此,正解 zone 通常具有以下几种标志:

  • SOA:开始验证 (Start of Authority);
  • NS:名称服务器 (NameServer),后面记录的数据是 DNS 服务器的意思;
  • A:地址 (Address),后面记录的是 IP 的对应 (最重要)。

反解的设定权以及 DNS 反解 zone 记录的标志

正解的领域名只要符合 INTERNIC 及你的 ISP 规范即可,取得授权较为简单,自己取名字。那反解呢?反解主要是由 IP 找到主机名,因此重点是 IP 的所有人是谁。因为 IP 都是 INTERNIC 发放给各家 ISP 的,而且因路由问题,IP不能乱设定,所以,能够设定反解的就只有 IP 的拥有人,亦即你的 ISP 才有权力设定反解的。那你向 ISP 取得的 IP 能不能自己设定反解呢?答案是不行!除非你取
得的是整个 class C 以上等级的 IP 网段,那你的 ISP 才有可能给你 IP 反解授权。否则,若有反解的需求,就得要向你的直属上层 ISP 申请才行!

那么反解的 zone 主要记录的信息有哪些呢,除了服务器必备的 NS 以及 SOA 之外,最重要的就是:

  • PTR:指向 (PoinTeR) ,后面记录的数据就是反解到主机名

每部 DNS 都需要的正解 zone: hint

现在我们知道一个正解或一个反解就可以称为一个 zone 了,那么有没有哪个 zone是特别重要的呢?有的,那就是 .  ,当 DNS 服务
器在自己的数据库找不到所需的信息时, 一定会去找 . ,那 . 在什么地方呢,所以就得要有记录 . 位置的 zone 才行,这个记录 .的 zone 的类型,就被我们称为hint 类型,这几乎是每个 DNS 服务器都得要知道的 zone。

一部简单的正解 DNS 服务器,基本上就要有两个 zone 才行,一个是hint ,一个是关于自己领域的正解 zone。以zmit.cn为例,DNS 服务器内,至少就要有这两个 zone:

  • hint (root):记录 . 的 zone;
  • zmit.cn:记录 .zmit.cn这个正解的zone。

Client 端的配置

DNS解析过程详解的文章中,我们了解到主机名对应到IP有两种方法, 早期的方法是直接写在档案里面来对应, 后来比较新的方法则是透过 DNS 架构。下面来分析两种方法和对应的配置文件:

  • /etc/hosts :这个是最早的 hostname 对应 IP 的档案;
  • /etc/resolv.conf :这个就是 ISP 的 DNS 服务器 IP 记录处;
  • /etc/nsswitch.conf:这个档案则是决定先要使用 /etc/hosts ,还是/etc/resolv.conf 的设定。

一般而言, Linux 的预设主机名与 IP 的对应搜寻都以 /etc/hosts 为优先。查看 /etc/nsswitch.conf ,并找到 hosts 的项目:

1
[Sun@localhost ~]$ sudo vim /etc/nsswitch.conf

nss

上面那个 files 就是使用 /etc/hosts,而最后的 dns 则是使用 /etc/resolv.conf 的 DNS 服务器来进行搜寻。因此,会先以/etc/hosts 来设定 IP 对应,当然,你也可以将他调换过来,不过,总是 /etc/hosts 比较简单,所以将他摆在前面比较好。

配置/etc/resolv.conf

1
[Sun@localhost ~]$ sudo vim /etc/resolv.conf

dns

DNS 服务器的 IP 可以设定多个, 因为,照设定的顺序,当第一部 DNS 114.114.114.114(国内)挂点时,我们客户端可以使用第二部 8.8.8.8(国外)来进行查询。 通常建议至少填写两部 DNS 服务器的 IP,不过在网络正常使用的情况下,永远只有第一部 DNS 服务器会被使用来查询,其他的设定值只是在第一部出问题时才会被使用。

注意:

1.尽量不要设定超过 3 部以上的 DNS IP 在 /etc/resolv.conf 中,因为如果是你的区网出问题, 导致无法联机到 DNS 服务器, 那么你的主机还是会向每部 DNS 服务器发出联机要求,每次联机都有timeout 时间的等待,会导致浪费非常多的时间。

2.如果使用 DHCP 取得 IP,当我们修改过 /etc/resolv.conf之后,隔不多久这个档案又会恢复成原本的样子。因为在使用DHCP 时, 系统会主动的使用 DHCP 服务器传来的数据进行系统配置文件的修订。因此,必须告知系统,不要使用 DHCP 传来的服务器设定值。此时,我们要在 /etc/sysconfig/network-scripts/ifcfg-eth0 文档内增加一行:PEERDNS=no,然后重新启动网络即可。

DNS 服务器的软件、种类与 cache only DNS 服务器搭建设定

安装搭建DNS服务器所需软件

搭建DNS服务器,就需要柏克莱大学发展出来的BIND (Berkeley Internet Name Domain)软件。可通过yum来安装:

1
[Sun@localhost ~]$ sudo yum install bind bind-libs bind-utils bind-chroot

bind

上面比较重要的是那个 bind-chroot ,所谓的 chroot 代表的是“change toroot(根目录) ”的意思,root 代表的是根目录。早期的 bind 默认将程序启动在/var/named 当中,但是该程序可以在根目录下的其他目录到处转移,因此若 bind 的程序有问题时,则该程序会造成整个系统的危害。为避免这个问题, 所以我们将某个目录指定为 bind 程序的根目录,由于已经是根目录,所以 bind 便不能离开该目录,所以若该程序被攻击,最多也是在某个特定目录底下被破坏而已。 CentOS 6.x 默认将 bind 锁在 /var/named/chroot 目录中。

我们主程序是由 bind, bind-chroot 所提供,每部 DNS 服务器都要有的 . (root) 这个 zone 文件也是由 bind 所提供的。 CentOS4.x, 5.x 所提供的 caching-nameserver 软件并不存在 CentOS 6.x 当中了,已经被涵盖于 bind 软件内。

BIND 的默认路径设定与 chroot

要架设好 BIND 基本有两个主要的数据要处理:

  • BIND 本身的配置文件:主要规范主机的设定、zone 文档的所在、权限的设定等;
  • 正反解数据库档案 (zone file):记录主机名与 IP 对应的等。

BIND 的配置文件为 /etc/named.conf,在这个档案里面可以规范 zone file 的完整档名,你的 zone file 其实是由 /etc/named.conf 所指定的,所以zone file 档名可以随便取,只要 /etc/named.conf 内规范为正确即可。 一般来说,CentOS 6.x 的默认目录是这样的:

  • /etc/named.conf :是我们的主配置文件
  • /etc/sysconfig/named :是否启动 chroot 及额外的参数,就由这个档案控制;
  • /var/named/ :数据库档案默认放置在这个目录
  • /var/run/named : named 这支程序执行时默认放置 pid-file 在此目录内。

/etc/sysconfig/named 与 chroot 环境

为了系统的安全性考虑,一般来说目前各主要发行版本都已经自动的将你的 bind 相关程序给他 chroot, chroot 所指定的目录记录在 /etc/sysconfig/named 里面。

1
[Sun@localhost ~]$ sudo vim /etc/sysconfig/named

rootdir

这一行,意思是说:”我要将 named 给他chroot ,并且变更的根目录为 /var/named/chroot”,由于根目录已经被变更到/var/named/chroot 了,但 bind 的相关程序是需要 /etc, /var/named, /var/run …等目录的,所以实际上咱们 bind 的相关程序所需要的所有数据会是在:

  • /var/named/chroot/etc/named.conf
  • /var/named/chroot/var/named/zone_file1
  • /var/named/chroot/var/named/zone_file…..
  • /var/named/chroot/var/run/named/…

因为新版本的 CentOS 6.x 已经将 chroot 所需要使用到的目录,透过 mount –bind 的功能进行目录链接了。比如,我们需要的 /var/named 在启动脚本中透过mount –bind /var/named /var/named/chroot/var/named 进行目录绑定了。所以,在CentOS 6.x 当中,我们根本无须切换至 /var/named/chroot/ ,使用正规的目录即可。

实验


  1. 机器:
  2. 192.168.6.119   dns服务器
  3. 192.168.6.121   客户端
 

 119上操作

  1. 主机名或域名:
  2. [root@localhost named]# more /etc/hosts
    # Do not remove the following line, or various programs
    # that require network functionality will fail.
    127.0.0.1               localhost.localdomain localhost
    ::1             localhost6.localdomain6 localhost6
  3. 192.168.6.119 master.centos.vbird    linux.centos.vbird frp.centos.vbird forum.centos.vbird
  
配置文件named.conf
 [root@localhost named]# more 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";
   allow-query   { any; };
   allow-query-cache { any; };
   recursion yes;
};


logging{
   channel default_debug {
      file "data/named.run";
      severity dynamic;
   };
};


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


zone "centos.vbird" IN {       -----正向解析centos.vbird是域名
      type master ;
     file "named.centos.vbird";   ----正向解析文件,随便取名
};


zone "6.168.192.in-addr.arpa" IN {     -----反向解析 192.168.6是ip段
     type master;
     file "named.192.168.6";    ----反向解析文件,随便取名
};


编辑正向解析文件named.centos.vbird
[root@localhost named]# more named.centos.vbird 
$TTL        600
@  IN  SOA   master.centos.vbird. vbird..(2011080401 3H 15M 1W 1D) ;
@  IN NS     master.centos.vbird.                                                  ;            ------DNS服务器名称
master.centos.vbird. IN A 192.168.6.119                                           ;             ------域名解析到ip
@  IN MX 10  .                                                     ;            ------域名邮件服务器
.   IN A  192.168.6.119                                                         ------域名解析到ip
linux.centos.vbird  IN CNAME .                                                  ------cname别名
frp.centos.vbird   IN CNAME .
forum.centos.vbird IN CNAME .

win7                IN A  192.168.6.30 ;                                                         -----简化写法,实际为win7.centos.vbird


编辑反向解析文件named.192.168.6
[root@localhost named]# more named.192.168.6 
$TTL        600
@  IN  SOA   master.centos.vbird. vbird..(2011080401 3H 15M 1W 1D) ;            ----()里的分别代表 序号,更新频率,失败重新尝试时间,失效时间,缓存时间
@  IN NS     master.centos.vbird.                                                  ;
119 IN PTR   master.centos.vbird.                                                  ;            ----反向解析:ip解析为域名
119 IN PTR   .                                                                  ----反向解析:ip解析为域名
30  IN PTR   win7.centos.vbird. ;


启动
[root@localhost named]# /etc/init.d/named start
number of zones: 2
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
named (pid  17484) 正在运行...

121上测试
  1. 修改resloved文件
  2. [root@localhost ~]# more /etc/resolv.conf
    ; generated by /sbin/dhclient-script
    nameserver 192.168.6.119              ----让其首选通过119解析
    nameserver 114.114.114.114
    nameserver 8.8.8.8

  3. 测试:
  4. [root@localhost ~]# dig


    ; <<>> DiG 9.3.4-P1 <<>>
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62230
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1


    ;; QUESTION SECTION:
    ;.              IN      A


    ;; ANSWER SECTION:
    .       600     IN      A       192.168.6.119


    ;; AUTHORITY SECTION:
    centos.vbird.           600     IN      NS      master.centos.vbird.


    ;; ADDITIONAL SECTION:
    master.centos.vbird.    600     IN      A       192.168.6.119


    ;; Query time: 1 msec
    ;; SERVER: 192.168.6.119#53(192.168.6.119)
    ;; WHEN: Tue Mar 29 02:43:44 2016
    ;; MSG SIZE  rcvd: 87


    [root@localhost ~]# dig master.centos.vbird


    ; <<>> DiG 9.3.4-P1 <<>> master.centos.vbird
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28261
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0


    ;; QUESTION SECTION:
    ;master.centos.vbird.           IN      A


    ;; ANSWER SECTION:
    master.centos.vbird.    600     IN      A       192.168.6.119


    ;; AUTHORITY SECTION:
    centos.vbird.           600     IN      NS      master.centos.vbird.


    ;; Query time: 1 msec
    ;; SERVER: 192.168.6.119#53(192.168.6.119)
    ;; WHEN: Tue Mar 29 02:44:04 2016
    ;; MSG SIZE  rcvd: 67


    [root@localhost ~]# dig forum.centos.vbird


    ; <<>> DiG 9.3.4-P1 <<>> forum.centos.vbird
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 5432
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0


    ;; QUESTION SECTION:
    ;forum.centos.vbird.            IN      A


    ;; AUTHORITY SECTION:
    centos.vbird.           600     IN      SOA     master.centos.vbird. vbird.. 2011080401 10800 900 604800 86400


    ;; Query time: 2 msec
    ;; SERVER: 192.168.6.119#53(192.168.6.119)
    ;; WHEN: Tue Mar 29 02:45:26 2016
    ;; MSG SIZE  rcvd: 89


    [root@localhost ~]# dig win7.centos.vbird


    ; <<>> DiG 9.3.4-P1 <<>> win7.centos.vbird
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51309
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1


    ;; QUESTION SECTION:
    ;win7.centos.vbird.             IN      A


    ;; ANSWER SECTION:
    win7.centos.vbird.      600     IN      A       192.168.6.30


    ;; AUTHORITY SECTION:
    centos.vbird.           600     IN      NS      master.centos.vbird.


    ;; ADDITIONAL SECTION:
    master.centos.vbird.    600     IN      A       192.168.6.119


    ;; Query time: 1 msec
    ;; SERVER: 192.168.6.119#53(192.168.6.119)
    ;; WHEN: Tue Mar 29 03:01:09 2016
    ;; MSG SIZE  rcvd: 88



    成功


更详细的介绍以及用法可见鸟哥的私房菜


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2083377/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,草书笔记,仅供参考!

注册时间:2013-09-12

  • 博文量
    529
  • 访问量
    1007845