400-8014011
    资 讯
    您的位置:首页 >> 资 讯 >> 网络安全 >> 局域网组网 >> 正文
    在Linux上建立DNS服務器 教您架设DNS服务器

    点击:   发布日期:2012-12-07

    本文来自 www.020fix.com
    【感想简介】

    一、假定

    许多DNS的文章都是从DNS原理开始介绍,本人则从使用的角度出发,为Linux的管理员提供一些简单实用的应用实例。

    下面假定我们需要建立一台企业网的DNS主服务器,应用条件如下:


    一个C类网段地址(本例中假定是192.22.33)
    企业域名为my.com,并已注册(主域名服务器地址192.22.33.20,主机名为linux.my.com)
    企业网通过路由器与Internet连接
    假如你的应用环境与上述条件不同,也请往下看,本文会在上述例子的基础上针对以下情况作修正:


    多个网段
    封闭的内部网
    只能访问局部公共网的情况(如169网、上海热线等)
    二、named、/etc/named.boot和ndc

    DNS服务器的主体是域名服务器进程named ,named启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。

    named启动时需要读取一个初始化文件,缺省情况下是/etc/named.boot,所以/etc/named.boot是named的基本配置文件。

    虽然启动named可直接执行named,在Linux上我们可以使用一个控制named的工具ndc。 ndc可以用于启动、中止、重启动、刷新DNS数

    据、输出DNS数据等多种调试功能,我在这裡推荐大家用这个工具来帮助DNS服务器的调试。

    有关ndc的详细用法,请参看Linux有关文档。

    三、建立named配置文件/etc/named.boot

    /etc/named.boot是基本的配置文件,但不包含任何DNS数据,针对我们前面的假定,我们先建立以下/etc/named.boot,其内容如下:

    ;
    ; boot file for name server
    ;
    directory /var/named

    primary my.com db.my
    primary 0.0.127.IN-ADDR.ARPA db.127.0.0
    primary 33.22.192.IN-ADDR.ARPA db.192.22.33
    cache . db.cache


    其中以“;”开头的行是注释行,其他各行含义是


    diretory /var/named
    指定named从/var/named目录下读取DNS数据文件。这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下。
    primary my.com db.my
    指定named作为my.com域的主域名服务器,db.my文件中包含所有*.my.com形式的域名转换数据。
    primary 0.0.127.IN-ADDR.ARPA db.127.0.0指定named作为127.0.0网段地址转换主服务器,db.127.0.0文件中包含了127.0.0.*形式

    的地址到域名的转换数据。 (127.0.0网段地址是局域网接口的内部loopback地址)
    primary 33.22.192.IN-ADDR.ARPA db.192.22.33指定named作为192.22.33网段地址转换主服务器,db.192.22.33文件中包含了所有

    192.22.33.*形式的地址到域名的转换数据。
    cache . db.cache
    指定named从db.cache文件中获得Internet的顶层“根”服务器地址要注意3、4两行中的网段地址是倒写的,另外,各个文件名也是可以自

    行决定的。

    四、建立各个DNS数据文件

    下一步,要按/etc/named.boot中的定义,建立各个DNS数据文件。

    (1)建立正向域名转换数据文件db.my

    根据/etc/named.boot的定义,我们在/var/named目录下建立db.my,其中应该包括所有在my.com域内的主机节点。但在机器数量较

    多时,为了调试方便,建议一开始只把几台节点的数据放入文件,待named正常工作后再把其他节点的数据补充进去。下面是db.my的例

    子:

    @ IN SOA linux.my.com. root.linux.my.com. (
    199511301 ; serial, todays date + todays serial #
    28800 ; refresh, seconds
    7200 ; retry, seconds
    3600000 ; expire, seconds
    86400 ) ; minimum, seconds
    NS linux.my.com.
    MX 10 support.my.com.

    localhost A 127.0.0.1
    linux A 192.22.33.20
    support2 A 192.22.33.102
    hp712 A 192.22.33.160
    support A 192.22.33.100
    mail MX 10 support.my.com.
    MX 20 support2.my.com.
    www CNAME hp712.my.com.
    ftp CNAME hp712.my.com.
    ns CNAME linux.my.com.


    其中第一行是SOA记录,定义了域名数据的基本信息,依次是DNS服务器名、DNS管理员邮件地址,括号内的第一个数字是文件版本号,

    每次本文件内容修改后,必须更改此号。其馀数字与DNS服务器直接的数据交换有关,在这裡我们不需要改动。

    括号后面有一条NS记录和一条MX记录,定义了域名服务器本身的域名和username@my.com形式邮件地址所对应的邮件服务器名字。

    在此以下是各种域名/地址转换数据,其中A记录是DNS域名到IP地址的记录,是必须有的,以hp712.my.com为例,在A记录中域my.com被省

    略,只写成hp712,named在处理时会根据named.boot中的定义自动加上my.com,而其对应IP地址为192.22.33.160。

    另一种记录是MX记录。 MX是邮件地址转换记录,本例中定义了将username@mail.my.com的邮件地址转换成username@support.my.com

    或username@support2.my.com,即实际上真正的邮件服务器是support.my.com和support2.my.com,其中support.my.com的优先数为10,

    support2.my.com的优先数为20,所以通常邮件首先被发往优先数小的主机support.my.com。

    还有一些是为方便提供的CNAME记录。 CNAME定义了一些主机的别名,比如我们将hp712.my.com作为公司的www和ftp服务器,所以我们提供了

    www.my.com和ftp.my.com作为hp712.my.com的别名,用户只需要根据习惯就可以访问公司的www、ftp服务器了,如果将来我们换用别的主机

    作www和ftp服务器,只需要修改CNAME记录就可,对用户没有影响。

    注意:MX和CNAME记录最后的带域名的主机名后必须带一个“.”

    (2)建立反向DNS数据文件db.127.0.0和db.192.22.33

    反向DNS数据文件用来提供根据IP地址查询相应DNS主机名,每个网段分别有一个数据文件。

    对于内部网段127.0.0通常只有一个地址,即127.0.0.1 loopback地址,db.127.0.0内容如下:

    @ IN SOA linux.my.com root.linux.my.com. (
    1997022700 ; Serial
    28800 ; Refresh
    14400 ; Retry
    3600000 ; Expire
    86400 ) ; Minimum
    IN NS linux.my.com.

    1 IN PTR localhost.
    而外部网段的数据文件db.192.22.33中包含所有主机IP地址到DNS主机名的转换数据。 db.192.22.33内容如下:
    @ IN SOA linux.my.com. root.pc590.my.com. (
    199609206 ; Serial
    28800 ; Refresh
    7200 ; Retry
    604800 ; Expire
    86400) ; Minimum TTL
    NS linux.my.com.
    ;
    ; All hosts
    ;
    20 PTR linux.my.com.
    102 PTR support2.my.com.
    100 PTR support.my.com.
    160 PTR hp712.my.com.


    反向DNS数据文件中的主要部分是PTR记录,PTR记录中的IP地址都只有主机号,named会根据named.boot的定义自动加上前面的网

    络号,注意后面的主机名要附加一个“.”

    (3)获得db.cache文件

    在Linux系统上通常在/var/named下已经提供了一个named.ca,该文件文件中包含了Internet的顶层域名服务器,但这个文件通常会发生

    变化,所以建议最好从Internic下载最新的版本。该文件可通过匿名ftp从ftp.rs.internic.net下载,在domain目录下,文件名为

    named.root。注意该文件下载后要拷贝到named的工作目录并重命名成named.boot中指定的文件名,本文中为db.cache。

    五、启动和测试named

    首先,根据先前推荐的方法,用ndc启动named:

    ndc start


    然后,为了使用和测试named,要把Linux设置在使用DNS状态。方法是在/etc目录下,创建resolv.conf文件。以我们的例

    子,/etc/resolv.conf内容为:

    search my.com
    nameserver 192.22.33.20


    然后,我们就可以测试named了。

    Linux和其他Unix系统均提供了nslookup工具,在命令行状态下输入:

    nslookup


    就进入交换式nslookup环境,如果named正常启动,nslookup会显示当前DNS服务器的地址和域名,否则表示named没能正常启动。下面简单

    介绍一些基本的DNS诊断:


    检查正向DNS解析在nslookup提示符下输入带域名的主机名,如hp712.my.com,nslookup应能显示该主机名对应的IP地址,如果只输入

    hp712,nslookup会根据/etc/resolv.conf的定义,自动添加my.com域名并回答对应的IP地址。
    检查反向DNS解析在nslookup提示符下输入某个IP地址,如192.22.33.20,nslookup应能回答该IP地址所对应的主机名。
    检查MX邮件地址记录在nslookup提示符下输入:
    set q=mx

    然后输入某个域名,以本文的例子,输入my.com或mail.my.com,nslookup应能够回答对应的邮件服务器地址,即support.my.com和

    support2.my.com。


    检查CNAME别名记录在nslookup提示符下输入:

    set q=cname


    然后输入某个别名,如www.my.com,nslookup应能回答对应的真实主机名,即hp712.my.com。如要退出nslookup,可输入exit。

    六、修改DNS数据

    如果要在网络中增加主机,例如要增加一台叫做pc01.my.com的PC机,管理员要在db.my中增加该主机对应的A记录,并且要在db.192.22.33

    中增加对应的PTR记录,然后用ndc更新named的数据:

    ndc reload


    要注意必须同时更改A记录和PTR记录,许多管理员往往只增加A记录而忽略了逆向查询用的PTR记录,结果会使许多应用程序不能正常运行。

    特别注意,一旦修改了DNS数据文件的内容,请务必改动数据文件的版本号( Serial )

    七、使网络中的其他系统(客户机)使用DNS服务器

    一旦DNS服务器开始工作,就可以配置所有企业网内的主机使用DNS服务。 Unix主机配置的方法,已经在前面说明过,即创建

    /etc/resolv.conf文件,内容见前面第五节。

    Windows 95的配置则是在网卡的TCP/IP配置中,选择使用DNS(enable),然后在配置窗口中分别填入各项参数。以本文的例子,如果运行

    Windows95的主机被命名为pc01.my.com,则在主机名(Host)一栏中填pc01,在域名(Domain)一栏中填my.com,然后把域名服务器

    (DNS Server)加入搜索列表中。

    Windows NT节点的配置大致相同。

    八、几种不同环境下的修正

    (1)如果IP网段多于一个假定现在在my.com域中增加一个IP网段192.22.37,则/etc/named.boot的内容中就增加一个网段的定义

    ,具体如下:

    ;
    ; boot file for name server
    ;
    directory /var/named

    primary my.com db.my
    primary 0.0.127.IN-ADDR.ARPA db.127.0.0
    primary 33.22.192.IN-ADDR.ARPA db.192.22.33
    primary 37.22.192.IN-ADDR.ARPA db.192.22.37
    cache . db.cache


    而反向DNS数据文件则增加一个定义192.22.37网段的文件db.192.22.37,其中包括了所有处于192.22.37网段中的节点,其格式与

    db.192.22.33类似。

    (2)如果企业网是封闭的如果企业网络不与外界Internet直接互连,DNS服务器就不必关心本企业域以外的域名,所以配置named的时候

    可以不理会db.cache,我们可以将/etc/named.boot中的cache行去除。

    (3)如果你联入的公共网不能访问Internet如果你的内部网接入的公共网只能访问有限的范围,如免费的169网、上海热线等,那麽你的

    DNS服务器就不能通过Internet的顶层服务器(root server)进行地址解析,所以你必须用你直接能访问到的DNS服务器来替代。具体

    办法是用forwarders选项来指定上级DNS服务器,以本文为例,named.boot的内容为:

    ;
    ; boot file for secondary name server
    ;
    directory /var/named

    secondary my.com 192.22.33.20 db.my
    secondary 0.0.127.IN-ADDR.ARPA 192.22.33.20 db.127.0.0
    secondary 33.22.192.IN-ADDR.ARPA 192.22.33.20 db.192.22.33
    cache . db.cache


    其中、等是你能直接访问到的DNS服务器的地址,通常就是你的ISP (169、上海热线等)的DNS服务器的地址,至少要有一个。

    通过forwarders和options forward-only参数的指定,你的企业DNS服务器就工作在forward-only模式下,所有本地不能解决的名

    字都被传送到ISP的DNS服务器上去解析。

    九、建立后备DNS服务器(Secondary DNS Server)

    通常有一台DNS主服务器,网络即可正常工作,但根据Internic对域名的管理规范,一个独立的域名必须至少有两台DNS服务器,即一

    台DNS主服务器( Primary Server )和一台后备DNS服务器( Secondary Server ),这主要是为DNS服务的可靠性考虑,能使

    Internet的性能更为可靠。

    现在仍以前面的例子,现在要加入一台运行Linux的机器nspc.my.com,IP地址为192.22.33.60。

    (1)主服务器上的修改首先确认DNS主服务器工作正常,然后,在主服务器上的正向DNS数据文件db.my中,加入nspc.my.com的有关记录,并增加一个NS记录,使主服务器上的db.my成为下列内容:

    @ IN SOA linux.my.com. root.linux.my.com. (
    199511301 ; serial, todays date + todays serial #
    28800 ; refresh, seconds
    7200 ; retry, seconds
    3600000 ; expire, seconds
    86400 ) ; minimum, seconds
    NS linux.my.com.
    NS nspc.my.com. ;必须增加的记录
    MX 10 support.my.com.

    localhost A 127.0.0.1
    linux A 192.22.33.20
    support2 A 192.22.33.102
    hp712 A 192.22.33.160
    support A 192.22.33.100
    nspc A 192.22.33.60 ;增加的记录
    mail MX 10 support.my.com.
    MX 20 support2.my.com.
    www CNAME hp712.my.com.
    ftp CNAME hp712.my.com.
    ns2 CNAME nspc.my.com. ;增加的记录
    ns CNAME linux.my.com.


    然后对主服务器上的各个反向DNS数据文件做类似的修改,增加有关后备服务器的NS记录,然后重新起动named。

    可见,其实在主DNS服务器上的改动主要是增加了一条NS记录,其馀的改动和增加一台普通节点一样,如果是用现有的节点做后备DNS服务器,则增加NS记录是唯一必须的步骤。

    (2)后备DNS服务器(secondary server)的配置需要在后备DNS服务器上创建的配置文件只有named.boot和db.cache,格式与主服务器相似,named.boot内容为:

    ;
    ; boot file for secondary name server
    ;
    directory /var/named

    secondary my.com 192.22.33.20 db.my
    secondary 0.0.127.IN-ADDR.ARPA 192.22.33.20 db.127.0.0
    secondary 33.22.192.IN-ADDR.ARPA 192.22.33.20 db.192.22.33
    cache . db.cache


    其中的三行secondary定义,使得named从192.22.33.20,即主服务器上获得各种DNS数据,并存在本地的各个数据文件中。本地的数据文件由named从主DNS服务器的named下载后生成,通常与主服务器上的数据文件完全一样,万一后备服务器与主服务器失去连接而不能下载DNS数据,后备服务器可利用本地的数据文件工作。而后备DNS服务器的db.cache通常由系统管理员从主服务器上拷贝过来即可。

    通常,后备DNS服务器可以建立在企业网内,也可利用外部的DNS服务器充当,如让ISP的服务器作为企业的后备DNS服务器,这样可以提高DNS服务的可靠性。注意,同一台DNS服务器可以同时成为多个DNS域的服务器,而且可以既作某些域的主服务器,同时又是另一些域的后备服务器。

    (3)DNS客户机端的改动

    对于内部网上的Unix主机,应该在/etc/resolv.conf中增加一行nameserver说明,使得系统能够搜索后备DNS服务器,以本文的例子,/etc/resolv.conf的内容为:

    search my.com
    nameserver 192.22.33.20
    nameserver 192.22.33.60


    注意,我们可以根据需要决定/etc/resolv.conf中所列出的DNS服务器的顺序,通常选择访问速度快的服务器在前。对于Windows95和NT,则是在DNS服务器的列表中把后备DNS服务器添加进去即可,添加的顺序同样可以决定访问各DNS服务器的优先级。