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

 时间:2024-10-24 02:12:10

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.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的安装、配置和应用

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

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

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

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

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的安装、配置和应用

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

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

1.配置区域文件

2.测试结果

大功告成,享受成果吧。

  • 如何使用Jquery获取Form表单中被选中的radio值
  • jquery如何让div随着滚动条的改变而改变
  • 易语言编辑框下如何新建子程序
  • labview中字符串的一种用法
  • ubuntu20.04隐藏或删除文件夹左边的标签
  • 热门搜索
    持枪证怎么办理 混沌怎么包 我的世界怎么输入指令 dwg文件怎么打开 恶心怎么办 尿不尽是怎么回事 得了外痔疮怎么办 微信怎么设置主题皮肤 鸡肝怎么做 环境变量怎么设置