Centos Bind9 DNS 服务器架设

 

使用环境:Centos 5.5、Bind9、Chroot、Webmin

 

DNS 概述

  • 计算机网络中的主机之间只认识 IP,但人们更喜欢为计算机命名(网址),因为名称更直观易记
  • 最初的名称服务是通过 /etc/hosts 来实现的,可以记录经常访问的计算机名称(域名或主机名)及其IP地址。现在仍在使用
  • DNS 是这样一种网络协议(系统),它能把域名转换为IP地址。在 Internet 上,它有一个庞大的分布式数据库,记录着全世界服务器的名称和对应的IP地址(双向映射)
  • DNS 是树型结构的分布式系统,由根域(root)、顶域(如 .com 、.cn)和各级子域(job.gdut.edu.cn)组成。DNS解析的最终记录是主机名(树叶、结点),而主机名是在某域(树枝、目录)之下的。

 

DNS 分类(按功能/角色划分)

  • 权威 DNS
    • 权威 DNS 是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如 COM 顶级服务器可以授权 ABC.COM 的权威服务器为 NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给 NS.DDD.COM,这样 NS.DDD.COM就成了 ABC.COM实际上的权威服务器了。
    • 权威 DNS 真正保存了域名和IP映射的记录。平时我们解析域名的结果都源自权威 DNS。
  • 递归 DNS
    • 负责接受用户对任意域名查询,并返回结果给用户。递归 DNS的工作过程参见本文第三节。递归 DNS 可以缓存结果以避免重复向上查询。
    • 我们平时使用最多的就是这类 DNS,他对公众开放服务,一般由网络运营商提供,大家都自己可以架递归 DNS提供服务。递归 DNS一定要有可靠的互联网连接方可使用。
    • 递归 DNS 一般只设置了根域Zone“. ”,在这个Zone 中保存着全球根服务的IP地址列表。
    • 最新的根服务器地址列表在这里可以得到:ftp://ftp.internic.net/domain/named.root
  • 转发 DNS
    • 负责接受用户查询,但它不进行从根服务器开始的标准递归查询过程。它只是把查询请求简单的转发给其它DNS(如递归 DNS),由其它DNS去负责实际的查询工作,最后把其它DNS的查询结果返回给用户。它也具备缓存功能。
    • 他主要使用在没有直接的互联网连接,但可以连接到一个递归 DNS那里,这时使用转发 DNS就比较合适。
    • 其缺陷是:直接受递归 DNS的影响,服务品质较差。
以上三类DNS中,只有权威DNS真正保存了名称-IP记录。事实上一个DNS可能同时具备上面的三种功能,这完全依据于管理员的配置。

 

域名解析过程(DNS 服务器工作原理)

Centos Bind9 DNS 服务器架设_第1张图片

  • 用户主机myhost访问一个网址,如 www.job.gdut.edu.cn
  • myhost 取出/etc/resolv.conf 设置的主DNS服务器(mydns)的IP地址
  • myhost 通过IP地址访问mydns,查询该DNS服务器中有没有域job.gdut.edu.cn的记录
    • 如果有,再查询该域下有没有主机名为www的记录,取出其IP给myhost,整个解析过程完成
    • 如果没有,则根据当前DNS服务器的配置,可能作如下某一处理过程(转发DNS或递归查询DNS):
      • mydns把myhost的DNS请求转发给Forwarder DNS服务器(Forward 缓存模式)。这是一个简单的代理过程,域名解析成功与否最终取决于Forwarder DNS
      • mydns进一步访问根域,由根域开始一级一级向下递归查询各子域,真到完成。它是怎么访问根域的呢?一般DNS都有设罢根域Zone ".",这个Zone中记录了当前Internet上十多台根域服务器的IP地址,而这十多台根域服务器通常是比较固定的,其记录可从网上下载(ftp://ftp.internic.net/domain/named.root)
  • mydns访问根域“.”服务器,查询数据库中有没有“.cn”记录。通常根域服务器“.root”老大会说:“嘿,我这里有.cn的记录,但它是一个子域,我把所有“xxx.cn”形式的域名解析工作都转交给它了,你去问它吧,我给你它的IP”
  • mydns查询子域“.cn.”的DNS服务器,通常该服务器中保存有类似“.com.cn”“.edu.cn”“.net.cn”“.org.cn”的域名记录,通过对比,我们要的是“.edu.cn”这个网段,所以该子域服务器会把它的下属“.edu.cn”域服务器(NS)的IP发给mydns。
  • mydns 查询子域“.edu.cn.”的DNS服务器,该服务器中保存了形如“xxx.edu.cn”的所有记录。该服务器在其数据库中找到“gdut.edu.cn”域服务器(NS),并把它的IP发给mydns。
  • mydns 查询子域“gdut.edu.cn.”的DNS服务器,该服务器中保存了形如“xxx.gdut.edu.cn”的所有记录。该服务器在其数据库中找到“job.gdut.edu.cn”域服务器(NS),并把它的IP发给mydns。
  • mydns 查询子域“job.gdut.edu.cn.”的DNS服务器,该服务器在其数据库中Look了一下,惊奇地发现,有一条记录是“www”啊,而且它是主机名称的地址(A,终端叶子),而不再是域名(NS)了。于是,它把名为“www”的主机IP地址发给了mydns。
  • mydns把查询结果(www.job.gdut.edu.cn - IP 映射)暂时缓存起来,它想,下次再遇到你,我就轻松多了(省去了复杂的查询过程)。至于缓存多久,由“job.gdut.edu.cn”域服务器设置的TTL参数指定,因为这个映射可能会变化。
  • mydns把主机“www.job.gdut.edu.cn”的IP地址交给myhost,圆满完成解析工作,oh yeah!
  • myhost通过这个IP,终于可以访问www.job.gdut.edu.cn了。这是一个IP路由过程,尽管还是很复杂,但不是DNS能够管的了。

DNS 的一些概念

  • 域(Zone):表示一组计算机集合的空间,树型抽象概念。域下可以有无数的主机,还可以包含子域。如根“. (root)”是一个域,“.cn”是一个域,“.edu.cn”也是一个域,但“.edu.cn”是“.cn”的一个子域。
  • FQDN:Fully Qualified Domain Name,即完全合格域名,是指主机名加上域名组成的全路径,用于唯一标识 Internet 上某一主机的名称。如 www.flyox.com,其中flyox.com是域名,www是该域下的主机名,可以想像这台主机是用于提供Web服务的。
  • 正向解析:提供从域名到IP地址的映射
  • 反向解析:提供从IP地址到域名的映射
  • 委派:也称授权,即把当前域(如.com)下的某子域(abc.com)的所有域名的解析工作委派给另一台DNS服务器。这是DNS系统分布式结构的基本。通过一条NS记录附加一条A记录实现。注意委派只能发生在上下级之间,同级之间不能委派。

 

主从结构的 DNS Server

  • 主从结构不是必须的,通常只要一个主服务器(Master)就行了。加多一个或多个从服务器(Slave,辅助服务器)是为了整个网络的域名解析更加可靠
  • 不管是 Master 还是 Slave,都是独立的DNS服务器,都要进行单独配置。只有某一个或几个域(Zone)是共享的,只在 Master 上配置即可,Slave设置好后会自动同步(SOA记录指定)。这样的好处是只需要设置一处。

 

Forward-only (Cache-only) DNS Server (转发 DNS)

  • 这种类型的 DNS 主机没有自己的数据库,也不向根DNS服务器查询,只是单纯帮助 Client 端向外部的 DNS 主机要求数据而已。它是一个简单的“代理人”角色,把DNS查询请求简单地转发给外面的DNS服务器。
  • 通常设定在防火墙上面。
  • 修改配置文件“/etc/named.conf”,编辑“options”节即可完成该类型的DNS配置,如下:
// This settings is only for forwarding DNS Server options { pid-file "/var/run/named/named.pid"; //我这里设定 pid-file !这个时候, //请特别留意该路径的所有人 ( owner ) //一定是要 named 这个人才行! forward only; //只允许 forward! forwarders { 168.95.1.1; //我这里使用 hinet 的 DNS ! 139.175.10.20; //这个是 seednet 的 DNS ! }; };

 

Chroot 环境下的Bind

    • 为了服务器安全,bind9默认提供了一个可选的组件:bind-chroot
    • chroot 是 change root to ... 的意思,就是把 Linux的根目录映射到另一目录,这样就不用直接操作Linux的根目录进行服务器的配置了
    • bind-chroot 的映射目录由配置文件 “/etc/sysconfig/named” 指定。bind 的 chroot 默认为“/var/name/chroot”
    • chroot 环境下的配置文件的路径,都是相对于设置的chroot目录,并不是绝对路径。如默认环境下 /etc/named.conf 实际路径是 /var/name/chroot/etc/named.conf 

    Bind 相关的配置文件

    • 文件 /etc/sysconfig/named:由该文件指定是否启用chroot及其额外参数
    • 文件 /etc/named.conf:主配置文件,可设置 bind 的全局参数(options)、各域(Zone)的参数和域库文件路径
    • 目录 /var/named:该目录存放着各个域库文件,即/etc/named.conf设置的Zone的具体记录文件,包括正解和反解域
    • 目录 /var/run/named:named程序执行时默认将pid-file存放在该目录

    域库文件中域名的表示方法

    • 默认Zone名:“@” - named.conf 中定义的 Zone 名(如“bt.com”)
    • 短名称:主机名或Zone名后不带小数点“.”,表示bind在解析时会自动加上默认Zone名(如 “.bt.com.”)最终成为FQDN
    • 长名称:整个域名的完整名称,即FQDN,以“.”结束,如 “file.bt.com.” 注意FQDN中的最后一个点表示根的意思。

    记录项(RR)类型

    • NS:名称服务器,表示将到指定的NS查询记录,一般用于指向本域(默认)和子域DNS服务器(再递归查一次),相当于树中的枝
    • A:主机对应的地址,最终要查询的记录,相当于树的叶子
    • MX:指明当前域下使用的邮件服务器的FQDN,以供邮件发送端查询到正确的目标邮件系统主机
    • CNAME:设置主机的别名。多个名称指向同一IP时适用,这样IP一旦改变,只需要修改一次
    • SRV:服务位置记录。设定当前域名下默认的各类服务器(地址、端口)。设置后,可以通过当前域名直接访问各类服务,而不用指定具体的服务器主机。与MX类似。

     

    DNS 服务器测试

    • 配置好后,重启 named 服务 (# service named restart)
    • 查看日志,验证 named 工作正常
      • #  tail -n 15 /var/log/messages | grep named
      • 没有异常出现
    • DNS 客户端面命令
      • host -l [FQDN] [dns-server]:使用指定的[dns-server]查询网址[FQDN]
      • nslookup [FQDN] [dns-server]
      • dig [@dns-server] [FQDN] [+trace]
      • whois [FQDN]

    子域名授权问题

    • 要想让本域外的主机能通过域名访问本域,需要得到上一级DNS的授权(委派)
      • DNS 授权:把目标域(子域)的域名解析工作委托给某一台DNS (一级级向下传递直到权威 DNS)
      • 权威 DNS:实际保存目标域各域名记录的DNS
    • 要想让Internet上的主机能够访问你架设的DNS域,你得加DNS加入到Internet域名体系,即得先申请一个域名,并且得到上一级域名服务器的授权,成为所申请域名的权威DNS。
    • 授权后,上一级的 DNS 中有一条指向你的DNS服务器的NS记录和指明自己DNS地址的A记录,如:

    ; 这是上一级 zone ".org" 的配置文件 ; 在互联网中这是顶级域名,只有org的域名代理商有权修改 ; 下面是域名 flyox.org 的授权记录 flyox.org. IN NS ns.flyox.org. ; 把子域 flyox.org 的解析工作委派给 ns.flyox.org ns.flyox.org. IN A 202.54.47.155 ; 并且告知 ns.flyox.org 的地址是 202.54.47.155 ; ... 其它域名记录

    ; 这是你自己的DNS服务器(ns.flyox.org)中 zone "flyox.org" 的配置文件 ; 下面是域名 flyox.org 的权威记录 @ IN NS ns.flyox.org. ; 本域 flyox.org 由自己解析,本域解析不能省略 ns IN A 202.54.47.155 ; ns.flyox.org 服务器地址 go IN NS ns1.go.flyox.org. ; 再向下授权给子域 go.flyox.org ns1.go IN A 236.75.110.5 ; ns1.go.flyox.org. 的地址 www IN A 202.54.47.156 ; www.flyox.org 的地址是 202.54.47.156 ; ... 其它域名记录

    注意:

    • NS、MX、CNAME 等记录可以指向域外的主机,也可指向本域内的主机:
      • 指向域外主机时:应确保外部DNS在整个名称体系中能解析出真正的IP
      • 指向域内主机时:一般为所指的域名配套提供 A 记录
    • NS 指向域外主机/服务器,即是把该子域名的解析情况授权给这个DNS。所以说,DNS 体系在逻辑分布上是树型的,但 DNS 本身的域名可能不在同一域,如DNS服务器“ l.gtld-servers.net ”可解析 xxx.com 的域名
    • 在 Internet 上,顶级域服务器保存了每一域名的NS记录,其 DNS 可以是在本域外的主机。MX、CNAME记录也一样。
    • 一般来说,用户注册了一个顶级域名(abc.com),域名代理商会提供一个Web控制面板,通过这个面板,用户可以修改顶级域(如.com)下域名 abc.com 的NS记录,而默认情况下这个NS记录是指向域名代理商自己的DNS服务器的。如果用户使用代理商的DNS,面板还可以修改 abc.com 域下各个记录,如MX记录、一定数量的A记录等,如果代理商宣称支持二级域名,那还可以添加NS记录。
    • 有些域名代理商规模小,限于公司实力,可能没通过 ICANN 的认证,也没自己的DNS,也没有自己的企业邮箱服务器,也没有Web虚拟主机,那么,就可以把NS记录指向合作伙伴的DNS,再通过这个DNS添加MX记录指向企业邮箱服务商……最终实现整合。

     

    空域名解析和泛域名解析

    • 空域名:即当前域的默认主机,如很多网友懒得输入前缀“www.”
    • 泛域名:即在当前域匹配不了的名称都将指向到该地址

    ; 假设当前域是 flyox.org @ IN A 202.54.47.156 ; 空域名 flyox.org 将解析到Web服务器 * IN A 202.54.47.156 ; 泛域名 *.flyox.org 也将解析到Web服务器 

     

    CNAME 记录使用注意事项

    • NS、MX 记录指定的名称一定要能解析的。如果名称是本域的,还必须提供A记录,且不能是CNAME记录。
    • 空域名@(如 bt.com)也不能使用CNAME记录,泛域名*(如 xxx.bt.com)可以使用 CNAME 记录

     

    使用DNS实现简单的负载均衡

    • DNS 经常被用作一个低成本的负载均衡解决方案(依靠多条同一域名不同IP的A记录实现)
    • DNS 通过轮询的方式分配不同的IP。即在客户机查询域名的IP时,第一台客户机得到第一IP,第二台客户机得到第二个IP……
    • 同一台客户机多次查询将得到同一个IP,因为客户机上也有DNS缓冲。使用 ipconfig /flushdns 清空缓冲后,可以检验这种机制

     

    实验:亲手缔造DNS体系,创建DNS私有根

    请参考《亲手缔造DNS体系,创建DNS私有根:DNS系列之六》做一个完整的DNS实验。文章是以Windows Server 为例子,但配置过程是一样的,配置文件也差不多。

     

     

     

    架设 DDNS 服务器

    • DDNS:动态DNS,适用于有公网IP,但IP经常变动的场合,如ADSL宽带
    • 通过 bind 的 update-policy 实现
      • 服务器端:生成一对密钥,把公钥复制到 /etc/named.conf 的 key 节,并把这个key 授权给动态DNS的Zone
      • 客户端:使用生成的公钥和私钥,按时(或 IP变更后)执行命令 “nsupdate”,更新新的IP到DDNS中

     

    参考:

    《鸟哥的Linux私房菜-服务器架设篇》

    《浅谈DNS体系结构:DNS系列之一》

    你可能感兴趣的:(数据库,centos,服务器,web服务,internet,DNS服务器)