Archive for 08月, 2008

Aug 18 2008

bind 下的委派

Published by David under 网络|Network

在BIND DNS服务器中创建一个DNS子域是相当简单的,步骤分为三个部分:

1.命名子域

2.将子域委派给一个或者多个域名服务器

3.提供“域名服务器黏结记录”(nameserver glue records)和子域的命名空间(namespace)内部的主机名给任意一个委派的域名服务器,以便子域外部的机器可以解析这个域名服务器。

事实上,第一和第二步已经实现了每个子域名服务器的单一记录,当你将子域名委派给在DNS子域里面有主机名的服务器时,需要第三步,但并不是必需的。

创建子域

为了创建子域,你需要以root进入到父域名的主DNS服务器,编辑父域名的zone文件,完成编辑之后重新加载zone(reload zone)。

在BIND的配置文件/etc/named.conf中zone声明了你的父域,定义了zone文件名和你想要修改的域。

记住,zone文件将会存放在/etc/named.conf中全局选项所声明的directory下(默认是/var/named)。

这里是named.conf文件zone生命的一个例子,zone文件名是testdomain.bogus.zone:

zone “testdomain.bogus” {
type master;
file “testdomain.bogus.zone”;
allow-update { none; };
};

在修改zone文件之前先做个备份,然后用你喜欢的文本编辑器打开zone文件:

# cd /var/named

# cp testdomain.bogus.zone testdomain.bogus.zone.backup

# vim testdomain.bogus.zone

下面是域名testdomain.bogus的zone文件的一个例子,在那里,我们将创建子域subdomain1.testdomain.bogus。

假设已存在的testdomain.bogus的zone文件已经包含所有下面显示的记录,到”EXISTING RECORDS STOP HERE”这行。

下面黑体的记录(”EXISTING RECORDS STOP HERE”行之后)是我们要创建DNS子域的新记录,委派给三个域名服务器,并且添加了一条NS glue记录给子域里的一个域名服务器。

$TTL 3D
@ IN SOA ns1.testdomain.bogus. root.testdomain.bogus. (
2004080203 ; zone file serial #
8H ; refresh
2H ; retry
1W ; expire
1D ) ; SOA minimum
; NS’S AUTHORITATIVE FOR PARENT DOMAIN:
testdomain.bogus. NS ns1.testdomain.bogus.
testdomain.bogus. NS ns2.testdomain.bogus.
;
; A RECORDS FOR THE PARENT DOMAIN’S AUTHORITATIVE NS’S:
ns1.testdomain.bogus. A 10.1.2.3
ns2.testdomain.bogus. A 10.1.2.4
;
; ORDINARY HOSTS IN TESTDOMAIN.BOGUS:
host01 A 10.1.2.11
host02 A 10.2.2.12
;
; EXISTING RECORDS STOP HERE
;
; HERE WE CREATE OUR DNS SUBDOMAIN BY ADDING THESE RECORDS:
; Name the subdomain: Now delegate it to these nameservers (MUST be an FQDN hostname, NOT AN IP):
subdomain1.testdomain.bogus. NS ns1.subdomain1.testdomain.bogus. ; inside the subdomain - needs NS glue record
subdomain1.testdomain.bogus. NS ns1.testdomain.bogus. ; not in subdomain - no glue required
subdomain1.testdomain.bogus. NS ns.myisp.bogus. ; not in subdomain - no glue required
;
; GLUE RECORD FOR ns1.subdomain1.testdomain.bogus -
; NEEDED SINCE IT IS INSIDE THE SUBDOMAIN
ns1.subdomain1.testdomain.bogus. A 10.4.5.6

注意:在保存文件,重新加载(reloading)之前,别忘了增加zone文件的序号(serial number)!

上面例子中,子域委派权威给其中一个父域名服务器ns1.testdoamin.bogus。并不需要父域名的NS也是子域名的NS,是DNS管理员有权限管理的任意一个就行。

你需要创建子域的zone文件,将子域添加到将成为子域的权威的服务器的/etc/named.conf配置文件。以下是主服务器上基本的子域的zone声明部分:

zone “subdomain1.testdomain.bogus” {
type master;
file “subdomain1.testdomain.bogus.zone”;
allow-update { none; };
};

子域zone文件的基本部分:

$TTL 3D
@ IN SOA ns1.subdomain1.testdomain.bogus. root.subdomain1.testdomain.bogus. (
2004080203 ; zone file serial#
8H ; refresh
2H ; retry
1W ; expire
1D ) ; SOA minimum
;
subdomain1.testdomain.bogus. NS ns1.subdomain1.testdomain.bogus.
;
; A RECORDS FOR THIS SUBDOMAIN
ns1.subdomain1.testdomain.bogus. A 10.4.5.6
host01 A 10.4.5.6

在父域名服务器reload父域的zone文件之前,建议你正确配置了子域的域名服务器,并且能正确提供子域的记录。

当你觉得子域名服务器已经正常工作,以root身份执行下面命令,reload父域的zone文件:

# rndc reload

现在,你就拥有了子域DNS。

关于BIND DNS服务器配置的文档,DNS原理,请参考下面资源:

*BIND Administrator’s Reference Manual, HTML格式(在安装了bind RPM包的红帽企业版Linux 系统上可以得到)

/usr/share/doc/bind-[version]/arm/Bv9ARM.html

*Linux Documentation Project Website中的DNS HOW-TO

http://www.tldp.org/HOWTO/DNS-HOWTO.html

simple sample:
abc.com 如何委任 tmp.abc.com
linux 下很簡單:
在 abc.com 的 db file 中加兩行(或多行,若有多個 ns 的話):
tmp IN NS ns1.tmp.abc.com.
ns1.tmp IN A 1.2.3.4

問題二:
在 ns1.tmp.abc.com 的 named.conf 中設一個 forward zone :

zone “abc.com” IN {
type forward;
forwarders { 4.3.2.1; };
};
4.3.2.1 是 abc.com 的 ns 所用 IP 。

No responses yet

Aug 15 2008

用Excle的Vlookup函数对比二张表格中的不同数据

Published by David under 应用|Application

需求:二张sheet表,一张包含有完整的身份证信息及姓名,另一张仅有前一张的部分身份证。现在要从部分身份证信息的表中查找完整信息表中的姓名。
函数: VLOOKUP
说明: 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。
当比较值位于数据表首列时,可以使用函数 VLOOKUP 代替函数 HLOOKUP。
在 VLOOKUP 中的 V 代表垂直,H代表水平。
语法: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
参数说明: Lookup_value 为需要在数据表第一列中查找的数值。Lookup_value 可以为数值、引用或文本字符串。
Table_array 为需要在其中查找数据的数据表。可以使用对区域或区域名称的引用,例如数据库或数据清单。
如果 range_lookup 为 TRUE,则 table_array 的第一列中的数值必须按升序排列:…、-2、-1、0、1、2、…、-Z、FALSE、TRUE;
否则,函数 VLOOKUP 不能返回正确的数值。如果 range_lookup 为 FALSE,table_array 不必进行排序。
Table_array 的第一列中的数值可以为文本、数字或逻辑值,文本不区分大小写。
Col_index_num 为 table_array 中待返回的匹配值的列序号。Col_index_num 为 1 时,返回 table_array 第一列中的数值;
col_index_num 为 2,返回 table_array 第二列中的数值,以此类推。如果 col_index_num 小于 1,函数 VLOOKUP 返回错误值值 #VALUE!;
如果 col_index_num 大于 table_array 的列数,函数 VLOOKUP 返回错误值 #REF!。
Range_lookup 为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,
也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值;如果 range_value 为 FALSE,函数 VLOOKUP 将返回精确
匹配值。如果找不到,则返回错误值 #N/A。
range_lookup参数经常采用false,这样不必排序,返回精确匹配。

=VLOOKUP(A1,’完整表’!$A$2:$C$3931,2,FALSE)
完整表中的2为姓名列,A1为部分表中的身份证列,$A$2:$C$3931为完整表中的查找范围

No responses yet

Close
E-mail It