Linux下DNS服务器bind的安装、配置和应用

2025-10-03 08:42:08

    DNS工作原理

    1.当要进行域名解析的时候,系统会向本地DNS发出解析请求,由本地DNS服务器解析域名与对应的IP地址。

    2.本地DNS服务器接收到解析请求后,再自己的本地数据库中查找与请求相匹配的DNS记录条目,如果本地没有相匹配的记录,则本地DNS服务器就会向根域名服务器发出查询请求。

    3.根域名服务器在接收到查询请求时,会把查询请求发送到相应的顶级域,再由顶级域发送到二级域,再由二级域发送到三级域,以此类推,直到查询到请求的相应记录,然后发送回本地DNS服务器。

    4.最终由本地DNS服务器把结果返回给客户端。

    5.如果经过查找后仍然无记录,则由本地DNS服务器向客户端返回无法解析的错误信息。

    安装bind软件

    1.解压[root@~]#tar zxvf bind-9.9.2.tar.gz2.安装[root@~]#./configure –prefix=/usr/local/named –sysconfdir=/usr/local/name/etc –enable-thread3.生成named.conf配置文件[root@~]#/usr/local/src/bind-9.9.2/bin/configen/rndc-configren | tail -10| head -9 |sed ‘s/#\ //g’ > /usr/local/etc/named.conf4.启动和关闭Bind安装完bind后,可以让bind后台运行[root@~]#/usr/local/named/sbin/named &使用-g参数可以实现显示启动过程中的详细信息。[root@~]#/usr/local/named/sbin/named –g &22-Nov-2012 20:41:30.832 built with '--prefix=/usr/local/named/' '--sysconfdir=/usr/local/named/etc' '--enable-thread'22-Nov-2012 20:41:30.832 ----------------------------------------------------22-Nov-2012 20:41:30.832 BIND 9 is maintained by Internet Systems Consortium,22-Nov-2012 20:41:30.832 Inc. (ISC), a non-profit 501(c)(3) public-benefit22-Nov-2012 20:41:30.832 corporation.  Support and training for BIND 9 are22-Nov-2012 20:41:30.832 available at https://www.isc.org/support22-Nov-2012 20:41:30.833 ----------------------------------------------------22-Nov-2012 20:41:30.833 using 1 UDP listener per interface22-Nov-2012 20:41:30.833 using up to 4096 sockets22-Nov-2012 20:41:30.841 loading configuration from '/usr/local/named/etc/named.conf'22-Nov-2012 20:41:30.841 reading built-in trusted keys from file '/usr/local/named/etc/bind.keys'22-Nov-2012 20:41:30.842 using default UDP/IPv4 port range: [1024, 65535]22-Nov-2012 20:41:30.843 using default UDP/IPv6 port range: [1024, 65535]22-Nov-2012 20:41:30.870 automatic empty zone: 113.0.203.IN-ADDR.ARPA22-Nov-2012 20:41:30.870 automatic empty zone: 255.255.255.255.IN-ADDR.ARPA22-Nov-2012 20:41:30.870 automatic empty zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA22-Nov-2012 20:41:30.870 automatic empty zone: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA22-Nov-2012 20:41:30.870 automatic empty zone: D.F.IP6.ARPA22-Nov-2012 20:41:30.871 automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA22-Nov-2012 20:41:30.878 /usr/local/named/etc/named.conf:7: couldn't add command channel 127.0.0.1#953: address in use22-Nov-2012 20:41:30.878 ignoring config file logging statement due to -g option22-Nov-2012 20:41:30.879 managed-keys-zone: loaded serial 022-Nov-2012 20:41:30.881 all zones loaded22-Nov-2012 20:41:30.882 running关闭:kill 进程ID号

    配置named服务器

    1.开机自动启动

    编写bind服务启动关闭的脚本:vi /etc/init.d/named

    #/bin/bash

    #Start script for the Berkeley Internet Name Domain Server

    # chkconfig: 345 35 75

    # description:BIND is a Name Domain Server

    # Source function library.

    . /etc/rc.d/init.d/functions

    # Source function library.

    if [ -f /etc/init.d/functions ]; then

    . /etc/init.d/functions

    elif [-f /etc/rc.d/init.d/functions ]; then

    . /etc/rc.d/init.d/functions

    else

    exit 0

    fi

    named=/usr/local/named/sbin/named

    prog=named

    RETVAL=0

    #start function

    start(){

    if [-n "'/sbin/pidof $prog'" ]

    then

    echo $prog": already running"

    echo

    return 1

    fi

    echo "Starting "$prog": "

    base=$prog

    $named &

    RETVAL=$?

    usleep 500000

    if [ -z "'/sbin/pidof $prog'" ]

    then

    #The child processes have died after fork()ing

    REVEL=1

    fi

    if [ $RETVAL -ne 0 ]

    then

    echo 'Startup failure'

    else

    echo 'Startup success'

    fi

    echo

    return$RETVAL

    }

    stop () {

    echo "Stopping "$prog":"

    killall$named

    RETVAL=$?

    if [ $RETVAL -ne 0 ]

    then

    echo "Shutdown failure"

    else

    echo "Shutdown success"

    fi

    echo

    }

    # See how we were called.

    case "$1" in

    start)

    start

    ;;

    stop)

    stop

    ;;

    status)

    status $named

    RETVAL=$?

    ;;

    restart)

    stop;

    usleep 500000

    start

    ;;

    *)

    echo $"Usage:$prog {start | stop | restart |status}"

    exit 1

    esac

    exit $RETVAL

       

    2.添加到到开机启动项:chkconfig named add

    3.检查开启动项中named启动级别是否on;

    [root@localhostinit.d]# chkconfig --list

    ip6tables0:off1:off2:on3:on4:on5:on6:off

    iptables0:off1:off2:on3:on4:on5:on6:off

    irqbalance0:off1:off2:off3:on4:on5:on6:off

    kdump0:off1:off2:off3:on4:on5:on6:off

    lvm2-monitor0:off1:on2:on3:on4:on5:on6:off

    mcelogd0:off1:off2:off3:on4:off5:on6:off

    mdmonitor0:off1:off2:on3:on4:on5:on6:off

    messagebus0:off1:off2:on3:on4:on5:on6:off

    named0:off1:off2:on3:on4:on5:on6:off

    netconsole0:off1:off2:off3:off4:off5:off6:off

    netfs0:off1:off2:off3:on4:on5:on6:off

    Bind服务器配置

    Bind的主要配置文件是包括named.conf和相应的区域文件,Bind中的给中配置都是通过修改这些文件来完成的,修改后需要重新启动Bind服务是配置生效。

    named.conf配置文件

    named.conf是Bind的主要配置文件,里面存储了大量的Bind自身的设置信息。Bind安装完后并不会自动创建该配置文件,用户需要通过命令手工生成,新生成的named.conf配置文件的默认内容如下:

    key"rndc-key" {

    algorithm hmac-md5;

    secret"dD7HdNQzJCCbe0SzXhEhKQ==";

    };

    controls{

    inet 127.0.0.1 port 953

    allow { 127.0.0.1; } keys {"rndc-key"; };

    };

    named.conf配置文件是由配置语句和注释组成。每条配置语句以分号“;”做为结束符,多条配置语句组成一个语句块;注释语句使用了两个“//”作为注释符。named.conf配置文件中所支持的所有配置语句如表:

    named.conf支持的所有语句:

    Linux下DNS服务器bind的安装、配置和应用

    其中,常用的配置语句介绍如下:

    1.acl语句

    acl语句用于定义地址匹配列表,其格式如下:

    acl acl –name {

    address_match_list

    };

    Bind默认定义了一些匹配列表,如下

    Linux下DNS服务器bind的安装、配置和应用

    1.controls语句

    controls语句用于定义rndc工具与Bind服务进程的通信,系统管理员可以通过rndc向Bind进程发出控制命令,并接受由Bind返回的结果。其格式如下:

    controls {

    [inet (ip_addr | *) [port ip_addr] allow {address_match_list}

    Keys{key_list};]

    [inet …;]

    [unix path perm number owner number groupnumber keys {key_list};]

    [unix …;]

    };

    2.include语句

    include语句用于把所指定的文件的内容添加进named.conf配置文件中,该语句的格式如下所示:

    include filename;

    3.key语句

    key语句用于定义TSIG或命令通道所使用的加密密钥。其格式如下

    key key_id {

    algorithm string;

    secret string;

    }

    4.options语句

    options语句用于设置影响整个DNS服务器的全局选项,该语句在named.conf中只能出现一次。如果没有设置语句,那么Bind将使用默认的options值,该语句支持的选项特别多,下面是一些常见的选项格式:

    options{

    [directorypath_name;]

    [forward (only | frist);]

    [forwarders {[ip_addr[port ip_port];……] };]

    [query-source ((ipv4_addr |*)

    [port (ip_port |*)] |

    [address (ipv4_addr| *)]

    [port (ip_port | *)] ); ]

    [query-source –v6( (ip6_addr | *)

    [port (ip_port |*)] |

    [address (ip6_addr| *)] |

    [port (ip_port |*)]);]

    [statistics-interval number ;]

    };

    Directory选项用于定义服务器的工作目录,在配置文件中所指定的所有相对路径都是相对于该路径来定义。该目录也是服务器中大部分输出文件(例如name.run)的存储位置。如果没有设置directory,那么系统默认使用”.”(即Bind启动的目录)作为工作目录。一般会把Bind的工作目录设置为/var/named,如下所示:

    directory “/var/named”;

    forwarders选项用于指定DNS请求的转发到其他DNS服务器上,该选项默认为空,也就是不进行转发。选项值可以是一个IP地址或主机名,也可以是主机的列表。不同主机IP地址或名称之间使用分号”;”进行分割。如下所示:

    forwareders {202.102.128.68; 192.168.152.3;8.8.8.8;8.8.4.4;};

    forward选项仅仅在forwareders选项不为空时生效。该选项用于控制DNS服务器的请求转发操作。如果选项值设置为first,则DNS服务器会先把请求发给forwarders选中的指定的远端DNS服务器。如果远端DNS服务器无法响应该请求,则Bind将尝试自行解析该请求;如果选择被设置为only,则bind值转发请求,并不进行处理。

    query-source和query-source-v6分别设置DNS服务器所使用的Ipv4或者Ipv6以及端口号。默认的端口号为53,如果指定其他端口号,将无法与其他的DNS服务器通信。。

    statistics-interval选项用于指定DNS服务器记录统计信息的时间间隔,单位为分钟。其默认值为60,最大值为28天(即40320分钟)。如果该选项设置为0,则服务器不记录统计信息。

    5.server语句

    Bind有可能与其他的DNS服务器进行通信,但并非所有的DNS服务器都运行同一个版本的Bind,而且就算安装了相同Bind版本的服务器,它们的设置,软硬件平台都会有所不同。在server语句中可以设置远程服务器的特征信息,以使双方能够正常通信,该语句的格式如下:

    server_ip_addr [/prefixlen] {

    [bogusyes_or_no;]

    [provide-ixfryes_or_no;]

    [request-ixfryes_or_no;]

    [edns yes_or_no;]

    [edns-udp-sizenumber;]

    [max-udp-sizenumber;]

    [transfersnumber;]

    [transfer-format(one-answer | many-answers);]

    [keys{string;[string; […]]}; ]

    [transfer-source(ipv4_addr| *) [port ip_port];]

    [transfer-source-v6(ip6_addr|*) [port ip_port]]

    [notify-source(ipv4_addr | *) [port ip_port];]

    [notify-source-v6(ip6_addr | *) [port ip_port];]

    [query-source[address (ip_addr | *) ] [port ip_port|*];]

    [query-srouce-v6[address (ip_addr | *)] [port ip_port | *];]

    [use-queryport-toolyes_or-no;]

    [queryport-pool-portsnumber;]

    [queryport-pool-intervalnumber;]

    }

    6.view语句

    view语句可以使用Bind根据客户端的地址决定需要返回的域名解析结果。也就是说,不同的主机通过同一台DNS服务器对同一个域名进行解析,会得到不同的解析结果。其格式如下:

    view view_name

    [class] {

    match-clients{address_match_list};

    match-destinations{address_match_list};

    match-recursive-onlyyes_or_no;

    [ view_option; …]

    [ zone_statement;…]

    };

    每一条view语句定义了一个客户端集合所能看到的视图,如果客户端匹配视图中的match-clients选项所定义的客户端列表,那么Bind将根据该视图返回解析结果。例如,希望对内网和外网用户进行区分,使他们访问同一个域名时,会得到不同的结果。可以通过view语句定义两个不同的视图,在两个视图中分别定义不同的属性。已达到上述的效果。配置如下:

    Linux下DNS服务器bind的安装、配置和应用

    8.zone语句

    zone语句是named.conf文件的核心部分。每一条zone语句定义一个区域,用户可以在这个区域中设置该区域相关的选项。Bind中可以设置多种类型的区域。

    Linux下DNS服务器bind的安装、配置和应用

    不同类型的区域,其zone语句定义的格式也有所不同,下面只介绍最常用的master和hint两种类型的区域的zone语句格式:

    Linux下DNS服务器bind的安装、配置和应用

    加入要定义一个根区域文件,可以如下:

    zone“.”{

    type master;

    file“named.root”;

    };

    主DNS区域文件是Bind照哦给你最基本的区域类型,它又可以分为正向解析和反向解析两种,。正向解析就是通过查询域名查询对应的IP地址;而反向解析则是通过IP地址查询对应的域名。

    例如:test.com

    zone“test.com”{

    type ;master;

    file“test.zone”;

    allow-update [none;];

    }

    Allow-update选项定义了允许对主区域进行动态DNS更新的服务器列表。None表示不运行进行更新。

    一般情况下,用户只会进行正向的解析,根据域名来查询对应的IP地址。但是在一起特殊的情况下,也会使用反向解析查询IP地址对应的域名。下面是一个反向解析的例子。

    zone“1.168.192.in-addr.arpa” in {

    type master;

    file “test.local”;

    allow-update (none;);

    };

    1.168.192.in-addr.arpa是该反向解析区域的名称。其中“in-addr.arpa”是反向解析区域名称中固定的后缀格式,.in-addr.arpa左边的部分是由需要解析的IP地址或网段的十进制表示方法逆序字符串。

    name.root配置文件

    named.roote是一个特殊的区域文件,在该文件中记录了Internet上的根DNS服务器的名称和IP地址。DNS服务器接收到客户端发送来的请求后,如果子本地找不到匹配的DNS记录,则把请求发送到该文中所定义的根DNS服务器上即兴逐级查询。由于internet上的根DNS服务器会随时发生变化,因为named.root文件的内容也是不断更新的,所以用户可以到定期到http://internic.net/domain下载最新版本的named.root文件

    可以看到,在该文件中定义了全球13个根DNS服务器,其中第一列为服务器名,第四列为服务器的IP地址

    正向解析区域文件

    正向解析区域文件用于映射域名和IP地址,文件中包含了该区域的所有参数,包括域名、IP地址、刷新时间、重试时间、超时等。下面是一个正向解析的区域文件的例子

    Linux下DNS服务器bind的安装、配置和应用

    第一行的“$ttl1D”用于设置客户端的DNS缓存数据的有效期。该值默认的单位为妙,用户可以明确指定使用H(小时)、D(天)、或W(星期)作为单位。

    第二到九行则用于设置该域的控制信息,可以看到,控制信息包括域名、有效时间、网络地址类型等,其格式如下所示:

    Linux下DNS服务器bind的安装、配置和应用

    name:定义SOA的域名,以“.”结束,也可以使用@代替

    ttl:定义有效时间,如果不设置该值,则系统默认使用第一行中定义的ttl值。

    class:定义网络的诋毁子类型。对于TCP/IP网络应设置为IN。

    orgin:定义这个域的主域名服务器的主机名,以“.”结尾。

    contact:定义该DNS服务器的管理员邮件地址,因此@在SOA记录中有特殊的意义,所以用”.”代替,本例中的root.test.com表示root@test.com。

    serial:定义区域文件的版本号,它是一个整数值。Bind可以通过它来得知区域文件时什么时间修改的。每次更改区域文件都应该时这个数加一。

    refresh:定义从DNS服务器在试图检查主DNS服务器的SOA记录之前应等待的时间。该选项以及括号中除了serial以外的其他选项都是以秒为单位,也可以使用M(分钟)、H(小时)、W(星期)等。如果SOA记录不经常改变,可以把这个值设置的大一些。在本例中为3小时。

    retry:定义从DNS服务器在主DNS不能使用时,重试对主DNS服务器发出请求应等待的时间。通常,该时间不应该超过1小时。在本例中设置为15分钟。

    expire:定义从DNS服务器在无法与主DNS服务器进行通信的情况下,其区域信息保存的时间。在本例中为一个星期。

    minimum:当没有定义TTL时,默认使用的TTL值。如果噢玩过的变化不大,那么可以把该值设置的大一些。在本例中为1天。

    在本例中第10行是DNS的资源记录(NS),指定该域中的DNS服务器名称。其格式如下:

    [name][ttl]classNSname-server-hostname

    本例中指定的DNS服务器为dns.test.com;

    反向解析区域

    反向解析区域文件用于定义IP地址到域名的解析,它采用的与正向借些文件类似的选项和格式,但由于是反向解析,所以该文件是使用PTR指针记录,而不是主机记录。

    例如:

    Linux下DNS服务器bind的安装、配置和应用

    第9~12行定义了用于反向解析的PTR记录,其格式如下所示:

    [address][ttl]addr-classPTRdomain-name

    配置实例

    环境:BBT公司现在要是实现这样的功能:内网用户可以正向解析所有内网的计算机以及外网的服务器,反向解析内网的计算机,允许使用递归查询;外网用户只能正向解析外网服务器,不能借些内外那个计算机。不允许使用递归解析。

    其局域网的网段为172.20.1.0/24,其中有5台计算机,分为为server1(172.20.1.1)、server2(172.20.1.2)、server3(172.20.1.3)、server4(172.20.1.4)和server5(172.20.1.5)。在外网中有3台应用服务器:FTP服务器(主机名为ftp,IP地址为61.124.100.1),网站服务器(主机名www,IP地址为61.124.100.2)和邮件服务器(主机名mail,IP地址为61.124.100.3)此外还有一台DNS服务器,其主机名为dns,内网IP地址为172.20.1.11,外网的IP地址为61.124.100.11,具体网络拓扑如下图:

    Linux下DNS服务器bind的安装、配置和应用

    1.配置named.conf

    为了区分内网网络用户的解析结果,需要通过视图实现。在本例中定义两个试图internal和external,分别对应内部网络和外部网络的用户。在这两个视图中分别定义不同的区域文件,从而实现内外网用户能得到不同的解析结果。定义bind的加密密钥以及mdc间的控制。

    Linux下DNS服务器bind的安装、配置和应用

    定义Bind的选项,内网用户所对应的视图以及各个解析域,如下所示:

    Linux下DNS服务器bind的安装、配置和应用

    定义外网用户所对应的视图以及相关的解析域,如下所示:

    Linux下DNS服务器bind的安装、配置和应用

    1.配置区域文件

    2.测试结果

    大功告成,享受成果吧。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢