DHCP + DNS (bind) == DDNS
发表于:2007-07-04来源:作者:点击数:
标签:
我们在办室的时候,有时会去访问别的机器,如果是在 windows 下,我们有时候会用机器名去访问,因 .net bios/wins会帮我们来把机器名转成IP的。下面给大家介绍一种用动态DNS来解析机器名的办法。不过,不是用的w2k的DDNS,而是用的Linux. 准备:一台(或两台
我们在办室的时候,有时会去访问别的机器,如果是在
windows下,我们有时候会用机器名去访问,因
.netb
ios/wins会帮我们来把机器名转成IP的。下面给大家介绍一种用动态DNS来解析机器名的办法。不过,不是用的w2k的DDNS,而是用的Linux.
准备:一台(或两台)Linux
服务器,用来做DHCP server和DNS server。也可以把它做成两台服务器。
安装:服务器的安装过程,请参考其它文档,记住把 dhcp 和 bind, bind-utils 装上就行了。
配置:
一、DHCP的配置:
配置DHCP server 时很简单,可以参考 /usr/share/doc/dhcp-x.xx/dhcpd.conf.sample来做。也可以先把这个文件cp 到 /etc/dhcpd.conf,然后根据自己的需要做适当修改。下面贴出我的一个/etc/dhcpd.conf,供大家参考:
[code:1:d8a5943397]
ddns-update-style interim;
ignore client-updates;
key DHCP_UPDATER {
algorithm HMAC-MD5;
secret qhB++OR5yWo8BTXwk/m4ng;
};
zone bj.pnx. {
primary 127.0.0.1;
key DHCP_UPDATER;
}
zone 251.168.192.in-addr.arpa. {
primary 127.0.0.1;
key DHCP_UPDATER;
}
subnet 192.168.251.0 netmask 255.255.255.0 {
range 192.168.251.100 192.168.251.200;
# --- default gateway
option routers 192.168.251.254;
option subnet-mask 255.255.255.0;
# option nis-domain "domain.org";
option domain-name "bj.pnx";
option domain-name-servers 192.168.251.63,192.168.251.254;
# option time-offset 28800; # PRC Standard Time
# option ntp-servers 192.168.251.220;
# option netbios-name-servers 192.168.1.1;
# range dynamic-bootp 192.168.0.128 192.168.0.255;
default-lease-time 21600;
max-lease-time 43200;
}
[/code:1:d8a5943397]
几个要注意的地方:
1. "ddns-update-style"
这个就是动态DNS的更新方式,有几个选项,我用的是interim,可以用 man dhcpd.conf找到另外的几个选项。
2. "ignore client-updates"
这个选项是不允许客户机更新DNS记录。当然,也可能允许,但会有一点问题。
3. "key DHCP_UPDATER"
这个是更新DNS的KEY,是必须的。其中algorithm 后的是生成key的算法,key的生成是用 "dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER"。
4. "zone"
要更新的zone,如果是本机就是DNS server,primay 就写127.0.0.1,要是其它机器是DNS server, 就写那台机器的IP。
别的都是一般DNS该有的了,要注意的是一定要有 range 那一行,不然就分不了IP啦。
配好以后,可以启动一下试试, service dhcpd start,如果没问题,把dhcpd改成开机就启动,chkconfig --level 2345 dhcpd on。
二、bind(named)的配置。
关于bind(named)配置的文章有很多了。这里只把与普通配置不同的地方写出来。
下面给我的named.conf供大家参考:
[code:1:d8a5943397]
// generated by named-bootconf.pl
options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you w
ant * to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
//forwarders { 192.168.1.254; };
// query-source address * port 53;
};
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
key DHCP_UPDATER {
algorithm HMAC-MD5;
secret qhB++OR5yWo8BTXwk/m4ng;
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "1.168.192.zone";
allow-update { key DHCP_UPDATER; };
};
zone "test.com" IN {
type master;
file "test.com";
allow-update { key DHCP_UPDATER; };
};
include "/etc/rndc.key";
[/code:1:d8a5943397]
其中多了的是
[code:1:d8a5943397]
key DHCP_UPDATER {
algorithm HMAC-MD5;
secret qhB++OR5yWo8BTXwk/m4ng;
};
[/code:1:d8a5943397]
这就是更新dns要用的key,必须和dhcpd.conf里的一样。
还有就是每个 zone 都可以用 key 来update了。
这样就行了。然后启动一下试试吧。
你就可以ping 机器名来找你同事的机器了。
本人只在
windows客户机上试验过,Linux好象会有一点问题。哪位有兴趣,共同研究一下。 :em02:
更新一下:
[code:1:d8a5943397]
#===/etc/dhclient.conf for
linux =======
send host-name "your host name";
request subnet-mask, broadcast-address, routers,
domain-name, domain-name-servers;
require subnet-mask, domain-name-servers;
timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;
script "/sbin/dhclient-script";
[/code:1:d8a5943397]
好好先生 回复于:2004-06-10 10:47:32 |
不错.
|
q1208c 回复于:2004-06-10 10:55:40 |
谢谢版主!
|
hongfengyue 回复于:2004-06-10 14:04:48 |
HI,你好: 请问你这样配置的服务,加入客户端是Linux时,DNS也能自动更行吗? 我没有采用你的这种DDNS的更新方式,可是如果客户端时windows时不会有问题,可是当客户端是linux时,需要在linux客户端编辑一个文件/etc/dhclient.confDNS才能更新,不信你可以看看/var/lib/dhcp/的文件的内容,客户端分配的IP没有Hostname的记录。
|
q1208c 回复于:2004-06-10 15:38:20 |
这个我知道,给Linux分配的IP都 是没有主机名的。
因为我的客户机都是windows的,Linux的我都用静态IP。
麻烦老兄把那个 /etc/dhclient.conf写出来吧。谢谢啦。
|
hongfengyue 回复于:2004-06-10 17:35:43 |
我的/etc/dhclient.conf内容如下: send fqdn.fqdn "hostname"; send fqdn.encoded on; send fqdn.server-update off; 但是我在Redhat8&9中还是不行,只有在/etc/rc.d/rc.local中加入下面的命令: /sbin/dhclient 注意必须在/sbin存在这个可执行的文件。我知道在redhat中是存在的。 谢谢!希望能相互探讨,我会把我的试验步骤写出来使得这个帖子更完善。你认为如何?
|
q1208c 回复于:2004-06-10 17:56:15 |
把 /etc/sysconfig/network-script/ifcfg-eth0 里的 PROTOCOL设成DHCP也不行么?
|
zhouweivip 回复于:2004-06-10 18:04:37 |
邮件发送和接收是在那个文件里配置啊
|
hongfengyue 回复于:2004-06-11 08:58:49 |
[quote:0a5f868668="q1208c"]把 /etc/sysconfig/network-script/ifcfg-eth0 里的 PROTOCOL设成DHCP也不行么?[/quote:0a5f868668] 不行的,只能得到IP。不能更新数据库,我猜测是客户发出DHCP请求中没有包含客户的主机名造成的。
|
铅笔 回复于:2004-06-11 23:17:43 |
send host-name ""; request subnet-mask, routers, domain-name, domain-name-servers; } 我是这样写的,但是可以确定DDNS使用正常
|
原文转自:http://www.ltesting.net