Linux下DNS配置文件详解
Linux 下DNS 配置文件祥解最近,为了配置DNS 服务器我收集了不少有关配置DNS 服务器方面的资料。在这里我将这些资料加上我在配置DNS 服务器时的一些经验进行一下整理。希望能对和我一样在配置
Linux 下DNS 配置文件祥解
最近,为了配置DNS 服务器我收集了不少有关配置DNS 服务器方面的资料。在这里我将这些资料加上我在配置DNS 服务器时的一些经验进行一下整理。希望能对和我一样在配置DNS 服务器时遇到困难的朋友一些启示。
DNS 服务器软件即BIND 的安装应该说是比较容易的,正常情况下是不会出现什么问题的。因此,本文在着重要讨论的是DNS 服务器的几个配置文件的配置问题。本文将以REDHA T8.0自带的BIND9.2.1为依据进行讨论。以下是本人这次配置DNS 服务器的几个配置文件:
/etc/named.conf
/在NAMED.CONF 配置文件中使用//和/* */来进行注释,
options { /*OPTIONS选项用来定义一些影响整个DNS 服务器的环境,如这里的DI RECTORY 用来指定在本文件指定的文件的路径,如这里的是将其指定到 /var/named 下, 在这里你还可以指定端口等等。不指定则端口是53
*/
directory "/var/named";
}; //
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN { //在这个文件中是用zone 关键字来定义域区的,一个zone 关键字定义一个域区 type hint;
/*在这里type 类型有三种,它们分别是master,slave 和hint 它们的含义分别是:
master:表示定义的是主域名服务器
slave :表示定义的是辅助域名服务器
hint:表示是互联网中根域名服务器
*/
file "named.ca"; //用来指定具体存放DNS 记录的文件
};
zone "localhost" IN { //定义一具域名为localhost 的正向区域
type master;
file "localhost.zone" ;
allow-update { none; };
};
zone "test.net" IN { //指定一个域名为test.net 的正向区域
,type master;
file "test.net”
allow-update { none;};
};
zone "0.0.127.in-addr.arpa" IN { //定义一个IP 为127.0.0.*的反向域区
type master;
file "named.local";
allow-update { none; };
};
zone "0.192.168.in-addr.arpa" IN { //定义一个IP 为168.192.0.*反向域区
type master;
file "168.192.0";
/var/named/test.net文件
@ IN SOA linux.test.net. Webmaster.test.net. ( SOA表示授权开始
/*上面的IN 表示后面的数据使用的是INTERNET 标准。而@则代表相应的域名,如在这里代表test.net, 即表示一个域名记录定义的开始。而linux.test.net 则是这个域的主域名服务器,而webmaster.test.net 则是管理员的邮件地址。注意这是邮件地址中用. 来代替常见的邮件地址中的@.而SOA 表示授权的开始
*/
2003012101 ; serial (d. adams) /*本行前面的数字表示配置文件的修改版本,格式是年月日当日修改的修改的次数,每次修改这个配置文件时都应该修改这个数字,要不然你所作的修改不会更新到网上的其它DNS 服务器的数据库上,即你所做的更新很可能对于不以你的所配置的DNS 服务器为DNS 服务器的客户端来说就不会反映出你的更新,也就对他们来说你更新是没有意义的。
*/
28800 ; refresh
/*定义的是以为单位的刷新频率 即规定从域名服务器多长时间查询一个主服务器,以保证从服务器的数据是最新的
*/
7200 ;retry
/*上面的这个值是规定了以秒为单位的重试的时间间隔,即当从服务试图在主服务器上查询更时,而连接失败了,则这个值规定了从服务多长时间后再试
*/
3600000 ; expiry
/*上面这个用来规定从服务器在向主服务更新失败后多长时间后清除对应的记录,上述的数值是以分钟为单位的
*/
8400 )
/*上面这个数据用来规定缓冲服务器不能与主服务联系上后多长时间清除相应的记 录
*/
IN NS linux
,IN MX 10 linux
linux IN A 168.192.0.14
it-test1 IN A 168.192.0.133
www IN CNAME linux
/*上面的第一列表示是主机的名字,省去了后面的域。
NS :表示是这个主机是一个域名服务器,
A :定义了一条A 记录,即主机名到IP 地址的对应记录
MX 定义了一邮件记录
CNAME :定义了对应主机的一个别名
/var/named/168.192.0
@ IN SOA linux.test.net. webmastert.linux.net. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.test.net.
/*以上的各关键字的含义跟test.net 是相同的
14 IN PTR linux.test.net.
133 IN PTR it-test1.test.net.
/*
上面的第一列表示的是主机的IP 地址。省略了网络地址部分。如14完整应该是: 168.192.0.14
PTR :表示反向记录
最后一列表示的是主机的域名。
Linux 下配置完整安全的DHCP 服务器详解
DHCP 是动态主机配置协议. 这个协议用于向计算机自动提供IP 地址, 子网掩码和路由信息。网络管理员通常会分配某个范围的IP 地址来分发给局域网上的客户机。当设备接入这个局域网时,它们会向 DHCP 服务器请求一个 IP 地址。然后DHCP 服务器为每个请求的设备分配一个地址,直到分配完该范围内的所有 IP 地址为止。已经分配的IP 地址必须定时地延长借用期。这个延期的过程称作leasing ,确保了当客户机设备在正常地释放IP 地址之前突然从网络断开时被分配的地址可以归还给服务器。本文以Redhat Linux 9.0为例,介绍如何建立一个完整和安全的DHCP 服务器。
,一、建立DHCP 服务器配置文件
可以使用Redhat Linux 9.0自身携带rpm 包安装。安装结束后, DHCP 端口监督程序 dhcpd 配置文件是/etc目录中的名为dhcpd.conf 的文件。下面手工建立/etc/dhcpd.conf文件。/etc/dhcpd.conf通常包括三部分:parameters 、declarations 、option 。
1.DHCP 配置文件中的parameters (参数):表明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户。主要内容见表1
参数 解释
ddns-update-style 配置DHCP-DNS 互动更新模式。
default-lease-time 指定确省租赁时间的长度,单位是秒。
max-lease-time 指定最大租赁时间长度,单位是秒。
hardware 指定网卡接口类型和MAC 地址。
server-name 通知DHCP 客户服务器名称。
get-lease-hostnames flag 检查客户端使用的IP 地址。
fixed-address ip 分配给客户端一个固定的地址。
authritative 拒绝不正确的IP 地址的要求。
2. DHCP 配置文件中的declarations (声明):用来描述网络布局、提供客户的IP 地址等。主要内容见表2:
声明 解释
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP 地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients ﹔deny unknown-client 是否动态分配IP 给未知的使用者。 allow bootp;deny bootp 是否响应激活查询。
allow booting﹔deny booting 是否响应使用者查询。
2005520124131.htm 开始启动文件的名称,应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。
3. DHCP配置文件中的option (选项):用来配置DHCP 可选参数,全部用option 关键字作为开始,主要内容包括见表3:
,选项 解释
subnet-mask 为客户端设定子网掩码。
domain-name 为客户端指明DNS 名字。
domain-name-servers 为客户端指明DNS 服务器IP 地址。
host-name 为客户端指定主机名称。
routers 为客户端设定默认网关。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP 地址。
time -offset 为客户端设定和格林威治时间的偏移时间,单位是秒。
注意:如果客户端使用的是视窗操作系统,不要选择"host-name" 选项,即不要为其指定主机名称。
下面是一个笔者使用的DHCP 配置文件,这是一个C类网络,共126个IP 地址可以分配的例子。读者可以复制后使用,注意红色部分是必须要修改的。
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.3;
option domain-name "www.cao.com"; #DNS名称#
option domain-name-servers 192.168.1.3;
option time-offset -18000;
range dynamic-bootp 192.168.1.128 192.168.1.255;
default-lease-time 21600;
max-lease-time 43200;
host ns {
hardware ethernet 52:54:AB:34:5B:09;#运行DHCP 的网络接口的MAC 地址# fixed-address 192.168.1.9;
}
}
,二、建立客户租约文件
运行DHCP 服务器还需要一个名为 dhcpd.leases 的文件,保持所有已经分发出去的 IP 地址。在Redhat Linux 发行版本中,该文件位于 /var/lib/dhcp/ 目录中。如果您通过 RPM 安装 ISC DHCP,那么该目录应该已经存在。dhcpd.leases 的文件格式为:
Leases address {statement }
一个典型的文件内容如下:
lease 192.168.1.255 { #DHCP服务器分配的IP 地址#
starts 1 2005/05/02 03:02:26; # lease 开始租约时间#
ends 1 2005/05/02 09:02:26; # lease 结束租约时间#
binding state active;
next binding state free;
hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC 地址#
uid "10050$0 6"; #用来验证客户机的UID 标示#
client-hostname "cjh1"; #客户机名称#
}
注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT ),不是本地时间。
第一次运行DHCP 服务器时dhcpd.leases 是一个空文件,也不用手工建立。如果不是通过 RPM 安装 ISC DHCP,或者 dhcpd 已经安装,那么您应该试着确定 dhcpd 将其 lease 文件写到何处,并确保该文件存在。也可以手工建立一个空文件:
#touch /var/lib/dhcp/dhcpd.leases
三、启动和检查DHCP 服务器
,使用命令启动DHCP 服务器:
#service dhcpd start
使用ps 命令检查dhcpd 进程:
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
使用检查dhcpd 运行的端口:
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
四、配置DHCP 客户端
通常网管员使用选择手工配置 DHCP 客户,需要修改 /etc/sysconfig/network 文件来启用联网;并修改 /etc/sysconfig/network-scripts 目录中每个网络设备的配置文件。在该目录中,每个设备都有一个叫做 ifcfg-eth ? 的配置文件,eth ?是网络设备的名称。 如eth0等。如果你想在引导时启动联网,NETWORKING 变量必须 被设为 yes 。 除了此处之外/etc/sysconfig/network 文件应该包含以下行:
NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
五、DHCP 配置常见错误排除
,通常配置DHCP 服务器很容易,不过,在这里有一些技巧可以帮助您避免出现问题。对服务器而言,要确保网卡正常工作,并具备广播功能。对客户机而言,还要确保客户机的网卡正常工作。最后,要考虑网络的拓扑,并考虑客户机向 DHCP 服务器发出的广播消息是否会受到阻碍。另外如果dhcpd 进程没有启动,那么可以浏览 syslog 消息文件来确定是哪里出了问题。这个消息文件通常是 /var/log/messages。
典型故障:
1.DHCP 服务器配置完成,没有语法错误。但是网络中的客户机却没办法取得IP 地址。
通常是Linux DHCP 服务器沒有办法接收來自255.255.255.255 的 DHCP 客户机的Request 封包造成的。一般是Linux DHCP 服务器的网卡没有设置具有MULTICAST 功能。为了让dhcpd(dhcp程序的守护进程) 能够正常的和DHCP 客户机沟通,dhcpd 必须传送封包到255.255.255.255这个IP 地址,但是有些Linux 系统里255.255.255.255这个IP 地址被用来做为监听区域子网域(local subnet)广播的 IP 地址,所以需要在路由表(routing table)里加入255.255.255.255以激活MULTICAST 功能;
使用命令:
route add -host 255.255.255.255 dev eth0
如果报告错误消息:255.255.255.255:Unkown host
那么请先修改/etc/hosts加入一行:
255.255.255.255 dhcp
2. DHCP客户端程序和DHCP 服务器不兼容
由于Linux 有许多发现版本,不同版本使用DHCP 客户端程序和DHCP 服务器也不相同。Linux 提供了四种DHCP 客户端程序:pump, dhclient, dhcpxd, 和dhcpcd 。了解不同Linux 发行版本的服务器端和客户端程序对于常见错误排除是必要的。笔者曾经遇到过使用SuSE Linux 9.1 DHCP服务器和使用Mandrake Linux 9.0客户机不兼容的情况。此时就必须更换客户端程序。方法是先停止客户机的网络服务,卸载原程序,安装和服务器端兼容程序。附表:主要Linux 发行版使用的DHCP 客户端。
发行版本
,缺省 DHCP 客户端
可选 DHCP 客户端
DHCP 客户端启动
脚本
附加配置文件
Red Hat Linux 9.0
dhclient
无
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0
Debian Linux 3.0
dhclient
无
/sbin/ifup
/etc/network/interfaces,
/etc/dhclient.conf
Mandrake Linux 9.1
dhclient
dhcpcd, dhcpxd, pump
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0, /etc/dhclient-eth0.conf
SuSE Linux 9.1
dhcpcd
dhclient
/sbin/ifup-dhcp
/etc/sysconfig/network/dhcp, /etc/sysconfig/network/ifcfg-eth0
六、DHCP 服务器的安全
1. 在指定网络接口启动DHCP 服务器
如果你的Linux 系统连接了不止一个网络界面,但是你只想让 DHCP 服务器启动其中之一,
,你可以配置 DHCP 服务器只在那个设备上启动。在 /etc/sysconfig/dhcpd 中,把界面的名称添加到 DHCPDARGS 的列表中:
DHCPDARGS=eth0
或者直接使用命令:
Echo “DHCPDARGS=eth0”>> /etc/ sysconfig/dhcpd
这样对于带有两个网卡的防火墙机器,更加安全:一个网卡可以被配置成 DHCP 客户来从互联网上检索 IP 地址;另一个网卡可以被用作防火墙之后的内部网络的 DHCP 服务器。仅指定连接到内部网络的网卡使系统更加安全,因为用户无法通过互联网来连接它的守护进程。
2. 让DHCP 服务器在监牢中运行
所谓" 监牢" 就是指通过chroot 机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破坏或被侵入,所受的损失也较小。
将软件chroot 化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot 目录中,通常称这个目录为chroot jail (chroot" 监牢" )。如果要在" 监牢" 中运行dhcpd ,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dhcpd 复制到其中。同时dhcpd 需要几个库文件,可以使用ldd (library Dependency Display缩写)命令,ldd 作用是显示一个可执行程序必须使用的共享库。
ldd dhcpd