推荐给好友 上一篇 | 下一篇

dhcpd.conf MAN配置文档--4 动态DNS更新

动态DNS更新(DYNAMIC DNS UPDATES
vcA\d~3QYG.q OBSD爱好者乐园2c8y;ksT
DHCP
服务器有可以动态更新DNS的能力。在配置文件中,你可以定义如何使DNS更新,这些更新是指符合RFC 2136DNS。支持RFC 2136应该能够从DHCP服务器中进行动态更新。
BSD爱好者乐园(Ut |#r`g[
      两个DNS更新草案已经实施,另一个正在规划中。两个已经实施的是ad-hocBSD爱好者乐园d.G R S5kW:D%g#q6]8@
DNS
更新模式和interim DHCP-DNS交互更新模式。如果当DHCP-DNS交互模式和DHCID模式通过IETF标准过程,就会有第三种方案,会是标准DNS更新模式。DHCP服务器必须被配置成一种或两种当前支持的模式,或者配置为不进行DNS更新。这些将在ddns-update-style中配置。

0z I Sm;bK/{
d*Z&n \&O5r7fAD-HOC DNS更新草案BSD爱好者乐园p$?.ujGJ

&o$M[0c|-B%kad-hoc
动态DNS更新草案现在有很多反对意见,而且不能工作,以后的ISC
%r COQW,V @$\DHCP
服务器计划中看起来也不会支持它。interim草案可以工作,允许失败恢复,现在也可以用,下面的描述仅仅作为资料。

W_#L9G&HT/[^B(P这个版本的ISC DHCP中的ad-hoc动态DNS更新草案仅仅是原型设计,它与已经标准化的IETF DHC工作组标准没有很多关系,但是安装很基本,也很有效,能够更新。这种模式与失败恢复不能同时工作,因为它没有解决两个不同的DHCP服务器更新同一组DNS记录。
N` {3Hx)\i      对于ad-hoc DNS更新方式,客户的FQDN起源自两个部分,首先,主机名是确定的,然后,域名是确定的,紧接着主机名。DHCP服务器决定客户端的主机名时,首先查找ddns-hostname配置选项,如果有,就用它;如果没有找到这个选项,服务器在FQDN选项中查找一个有效的主机名,把它发送给客户端。如果找到一个,就用它,否则如果客户端发送了host-name选项,就用它。否则,如果有一个host语句对应这个客户端,语句中的名称就会被用上。如果上面所有的都没有,服务器不会发送给客户端hostname,也不能进行DNS更新。
;kNK\.Vw      域名严格基于服务器的配置,而不基于客户端发送的内容。首先,如果有一个ddns-domainname配置选项,就用它;否则,如果有一个domain-name选项配置,就用它。如果两个都没有,服务器就不进行DNS更新。
o-K/o0G j&Fr      正如我们描述的,客户端有完全资格的域名用来作为”A”记录中的名字存储。A记录包含了租约中客户端被分配的IP地址。如果DNS服务器中已经有了一个相同名字的A记录,就不会对APTR记录更新了,这会阻止一个客户端宣称它的域名是某些网络的服务器。例如,如果你有一个文件服务器叫"fs.sneedville.edu",并且一个客户端宣称它的主机名是"fs",这时DNS就不会为这个用户更新DNS记录,同时会在日志文件中记录这个错误。BSD爱好者乐园"D*E5I/_6f4N;Q
      如果一个A记录更新成功,那么对应的PTR记录也会被更新,指向A记录。这个更新是无条件的,即使有相同名字的另一个PTR记录存在。既然IP地址已经被DHCP服务器分配了,它就应该是安全的。BSD爱好者乐园3jm| a}
      请注意当前我们假定客户端只有一个网络接口,如果客户端有两个网络接口,它会得到不希望得到的结果。现在这还是个bug,下一个版本也许会修复它。启用one-lease-per-client参数是有用的,那样漫游进来的客户就不会触发相同的地址分配。BSD爱好者乐园 ]KoST~u

a FSM8?L ?6} }DHCP
协议通常包含4个包交换,首先客户端发送DHCPDISCOVER信息,接着服务器回应一个DHCPOFFER信息,然后客户端发送一个DHCPREQUEST信息,服务器再回复一个DHCPACK信息。在当前的版本中,服务器在收到一个DHCPREQUEST信息后会要求DNS更新,这个动作在发送DHCPACK之前。如果它前面没有为客户端发送地址,它只发送DNS更新信息,为了最小化DHCP服务器的压力,如果它还没有完成为客户端发送地址时,它只发送DNS更新信息。
BSD爱好者乐园n7r.s,zGLhk8M
BSD爱好者乐园!XUq~T$Lu
      当客户端的租约过期时,DHCP服务器(如果它正好在操作,或者马上就要被操作)将会从DNS数据库中移去客户端的APTR记录。如果客户端通过发送
;F'QJkb"KDHCPRELEASE
信息释放了它的租约,服务器将会移去APTR记录。
BSD爱好者乐园8]5x t8LF? s

L4M-Aw^ A xN*~4WTHE INTERIM DNS UPDATE SCHEME过渡DNS更新方案
G r |'JCXBSD爱好者乐园2C!s/jj$}gz/U V {
interim DNS
更新方案案大多数遵守几个被IETF考虑并希望成为标准的草案,但现在还不是标准,也不是当前提议的精确标准。它们是:
BSD爱好者乐园1lP @{ z&H
BSD爱好者乐园*P,]3?0I)ml W

draft-ietf-dhc-ddns-resolution-??.txt

HK/tw&[

W5ld)M-F1Go/@U

9nyefXb8C

draft-ietf-dhc-fqdn-option-??.txt

%j7I5h,X4R;zE;q2Sk

.XLmo4u!f N

D#UZE'Z{6g

draft-ietf-dnsext-dhcid-rr-??.txtBSD爱好者乐园/fB v$b/_ w-v9hD

BSD爱好者乐园7p'E:@H`#g#B"r`

BSD爱好者乐园)hznOO4{


Mz?5k#B      因为我们的操作与标准有稍微的不同,这里简短的说明一下这种更新方式。
BRu~ am      第一点,理解这种方式的DNS更新不像ad-hoc方式,DHCP服务器不需要总是更新APTR记录,FQDN选项包含了一个标志,当由客户端发送时,它指示客户端希望更新自己的A记录,这种情况下,服务器可以被配置成信任客户端信息或者忽略这个信息。这由allow
9b"mUz-B/[c8tDyclient-updates
语句完成或者是ignore client-updates语句完成。默认情况下,客户端更新是被允许的。

1~7kn^o:ff      如果服务器配置允许客户端更新,然后如果客户端在FQDN选项中发送了一个完全合格的域名,服务器就会在FQDN选项中采用客户端发送的名字来更新PTR记录。例如,假定客户端是来自"radish.org"域的一个访问者,它的主机名是"jschmoe",服务器管理的是"example.org"域,DHCP客户端发送的FQDN选项是"jschmoe.radish.org.",它也要求更新自己的A记录,DHCP服务器因此不去试图为这个客户端设置A记录,但是要为这个IP地址设置PTR记录,它可以自行更新自己的A记录,假定"radish.org"DNS服务器允许这样做。
Sg `\+Zl9d"e      如果服务器配置不允许客户端更新,或者客户端不想自己更新,服务器就会简单的选择一个名字发送给客户端,可能使用客户端自己提供的主机名(在这个例子中是"jschmoe"),它将会把自己的域名传送给客户端,就像在ad-hoc update更新中一样。它会更新APTR记录,使用它为客户端选择的名字。如果客户端发送了完全合格的FQDN选项,服务器只会选用最左边部分,前面的例子中,"jschmoe"而不是"jschmoe.radish.org"
%p0N ?aQ9}kH两种更新模式的另一种不同是,在interim模式中,有一种方法允许不只一个DHCP服务器更新DNS数据库而不会偶然删除掉不该删掉的A记录,也不会添加应该添加的记录失败,它工作的方式如下:BSD爱好者乐园X/s}0XuRhu9n
DHCP服务器发布一个客户租约时,它建立一个文本串,这个文本串是一个MD5哈希处理的DHCP客户端鉴定(参见draft-ietf-dnsext-dhcid-rr-??.txt for details),这个更新给A记录增加了服务器选择名字和一个包含哈希鉴定字符串的TXT记录(hashid),如果这个更新成功,服务器的工作完成。如果因为A记录已经存在而导致更新失败,DHCP服务器会尝试添加A记录,前提是必须有一个和新的A记录同名的TXT记录,并且那个TXT记录包含相同的hashid(乱了,搞不清意思)If the update fails because the A record already exists, then the DHCP server attempts to add the A record with the prerequisite
k A \H:fc_that
.L o6H X(h(@}jX2Kthere must be a TXT record in the same name as the new A record, and that TXT record<A1><AF>s contents must be equal to hashid.
7il(w'M-CJ!Z}N B
如果这次更新成功,客户端就会拥有它的APTR记录,如果失败,客户端已经被分配的名字已经被使用了,不能被再用了,此时,DHCP服务器放弃进行为这个客户所做的DNS更新并为这个客户选择一个新的名称。
BSD爱好者乐园/EIv/A+]
BSD爱好者乐园)^#gi*~t\
interim DNS
更新方案被叫做interim有两个原因:一是它并不完全遵守草案,当前的草案使用新DHCID Rrtype,但是现在不能用,interim DNS更新使用TXT record替代。而且,现存的ddns草案要注DHCP服务器在PTR记录上发送DHCID
5ujiLf#KRR
,而interim更新方案不这样做,在我们的观点中,和作者一起工作的人都希望在下一个草案中去掉这些东西,或者说明为什么这样做是有用的。
BSD爱好者乐园*G2HQ r"\Or
      除了这些不同,服务器的更新并不很强势。因为每个DNS更新包含一个到DNS服务器的数据往返,即使它不真的修改DNS数据库,这样的更新也消耗资源,于是DHCP服务器不管它是否原来更新过记录(这个信息保存在lease)都不再尝试更新记录,而是认为记录已经更新。
7uHdt Ss DL      这会导致一种情况,DHCP服务器添加了一个记录,而这条记录又被其它机制删除掉了,但是DHCP服务器再也不去更新DNS,因为它认为它已经更新过了。这种情况下,可以通过移去租约文件中的相关内容来操作,一旦操作完成,下次客户端更新租约时就会DNS就会被更新。
8n&F5do:A,X$r b
}"tH_!x3F8s:c0y-TDNS动态更新安全
/{6|gv2[ ]-e`当设置DNS服务器允许通过DHCP动态更新后,就可能出现未授权的更新。为了避免出现这种情况,应该使用TSIG签名――使用共享密钥进行密码签名的方法。只要你保护好这个密钥,你的更新就应该是安全的。注意,DHCP协议自身没有提供安全,同时,客户端可以提供信息到DHCP服务器,而DHCP服务器使用这个信息进行更新,如同前面描述的一样。DNS服务器必须配置成允许DHCP服务器要更新的区域更新。例如,假定sneedville.edu域中的客户被分配地址是10.10.17.0/24子网,在这里,会需要一个key语句来确定将要使用的TSIG密钥,同时还要两个区域语句(zone),一个是A记录的,一个是PTR记录的,对于ISC BIND,会像这样:BSD爱好者乐园dan4U3_ oV$UB Wg
BSD爱好者乐园5u`4qN'C k

HWb1?|+Bkey DHCP_UPDATER {

da0AoY @k
#m.bM1O EHzalgorithm hmac-md5;

(g;iqQ CvF M
+F6BB rIr e zsecret pRP5FapFoJ95JEL06sv4PQ==;
BSD爱好者乐园K|p~7lJ0}``

i t7U s`*Tb};
BSD爱好者乐园;q m^;VDy3U?:y

-M'mj+f+t:IBSD爱好者乐园s Y s `.fzl
zone "example.org" {

eXY{)Qx'kB
+RV4qU6?r[9C~'\ytype master;
BSD爱好者乐园y;T?V9J+r

$\z MR dl6|$nfile "example.org.db";
BSD爱好者乐园^1M6kB v.}%M
BSD爱好者乐园:QxPh4B&p8t/M#A
allow-update { key DHCP_UPDATER; };

dc_{:^
WF j'w8{N)UU};

"V["G6~*x0`BSD爱好者乐园5LPx1\8RP8Vbs8XC
BSD爱好者乐园!}$Fs9Z ufd
zone "17.10.10.in-addr.arpa" {

0e"O@E%m].S{6gBSD爱好者乐园?#^IOk4ly9}
type master;

qN vM1]*pW
"K+BIOw5|*ffile "10.10.17.db";

7l3L^$kN5`0ge3{BSD爱好者乐园,yLc2lt
allow-update { key DHCP_UPDATER; };
BSD爱好者乐园dvHae;s{,u
BSD爱好者乐园3V?#APd(ka
};

$@m'e5~-s$[kv
*B2Kz zq,F/Q      同时也必须配置DHCP服务器来更新这个区域,可能需要添加如下的内容到dhcpd.conf文件中:BSD爱好者乐园"TD\(Q Y7u3w"j

-P.P YE ohh(qD/h$l
7wZ.Ypx;}2Q$Rkey DHCP_UPDATER {

AL%M!W5T!~5G
2{&N*RB,o;_ O&[algorithm hmac-md5;
BSD爱好者乐园$H$uQ`~lq'M4yT@
BSD爱好者乐园N4PwP1QsX;Kph
secret pRP5FapFoJ95JEL06sv4PQ==;

(C4K ~ p `3s|H'K x3FiBSD爱好者乐园@ s b#yL&A
};

b'E'k'a;k7^a F
-Ur9fn4[X3?9OBSD爱好者乐园/|a;e |n%~Nv
zone EXAMPLE.ORG. {
BSD爱好者乐园.R!? w F/o+M4h0Qu

8Mx0^'e'S"_\%Hprimary 127.0.0.1;

H0I C%a~%t]4T'^BSD爱好者乐园h tk)OCys
key DHCP_UPDATER;
BSD爱好者乐园s2v%y{*{|%D l/C)X{a

b1p/MBY?^6a2[}
BSD爱好者乐园J nF*t.T,hj

._[LH @
.ZHX8hIK F6_(hzone 17.127.10.in-addr.arpa. {
BSD爱好者乐园~:bO;|\6xsd

x8d/O'vV!z*sprimary 127.0.0.1;

$Z:H#`d b%r!FOZu
aL*\4nAA-Vkey DHCP_UPDATER;
BSD爱好者乐园JAnT;H-K/Z
BSD爱好者乐园})J7mD2`!r]*]V _4_
}

*I7J` N,}To+s
lv%cm:ev9r3u9X
4u S7_ q3zG`primary
语句指定区域数据需要更新的DNSIP地址。注意zone语句一定要对应DNSauthority记录,在上面的例子中,必须有一个"example.org.""17.10.10.in-addr.arpa."SOA记录。例如,如果有一个子域"foo.example.org",它没有独立的SOA,就不能为它配置一个zone语句。也一定要记住,在DHCP配置文件中,区域名称一定要以"."结束,这是首选句法。如果没有以"."结束,DHCP服务器就会被弄糊涂,也要注意在DHCP配置中,区域名称没有包含在引号里面,而在DNS配置中是要包含在引号里的。
BSD爱好者乐园3jNc dw!Z2F
      你应该自己选择密钥,当然ISC BIND 89安装版本里面有一个密钥生成工具,叫dnssec-keygenBIND 9中的工具看起来生成的密钥更随机,因此推荐使用BIND 9中的工具,即便不用BIND 9DNS服务器。如果使用BIND 9dnssec-keygen,上面的密钥将会按下面的方法生成:BSD爱好者乐园2~:\4eC,B_
BSD爱好者乐园f&{:J,wD c
BSD爱好者乐园,Q,?~` Yu+g+aw
dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER

L3RDTDQ"T@
Ja5af w2_%z UrBSD爱好者乐园AcC k~RX
BSD爱好者乐园|L,n{$k&j'TH
如果使用BIND 8dnskeygen程序,用下面的命令生成密钥:
BSD爱好者乐园AJ&I1X B:X&y0dtb
BSD爱好者乐园.b,z-}$JL]

%r|,r0f_ \\I,Fdnskeygen -H 128 -u -c -n DHCP_UPDATER

0Y"A#XqY]
C-m ~-?@of      如果想激活DNS日志记录DNS更新,需要一个logging语句:BSD爱好者乐园7Dm i|P@?
BSD爱好者乐园Vp,j,Ffqkv*k]
BSD爱好者乐园@8qb9c'C$?8G
logging {

M}5r$Fm\#} z&m0SBSD爱好者乐园3h(n6yIDh!Z"`k
channel update_debug {
BSD爱好者乐园4XqA4lq/{#cz

v[1c} M!L#a9bfile "/var/log/update-debug.log";

(Dar `z6z#f
_(rBB?F'XseverityBSD爱好者乐园;j9cgB$mj-D~
debug 3;

+dI8M q}$u5{S
E/N*wr5t6LN-U aeprint-category yes;

8_RW^_R
&J Ft0N0lprint-severity yes;
BSD爱好者乐园H oy4Xv#C;xV{

t:F$}T'Fzprint-time
o"H!]5RCTS3kyes;
BSD爱好者乐园 GMQ A.BV R

F3c&xU%hS};

(Bd4lJJI ?p1mBSD爱好者乐园Y{*m;M"p9NnQ.f
channel security_infoBSD爱好者乐园`P4RovI \2H9h@y
{

f9`$x\y L cBSD爱好者乐园8pM0@mIQ#O
file "/var/log/named-auth.info";

*pSVcK1Rxu s.aBSD爱好者乐园m _;zq7}vC
severityBSD爱好者乐园MJ B+F0}w
info;

)]~&F z?w%W#E%t
^_*M+[ Iv(Fg N,J'?,Lprint-category yes;

`3` u1U$g_r
,tHBx ~e&Sprint-severity yes;
BSD爱好者乐园v'TDZ9d!}7~L r
BSD爱好者乐园"C1bO7Uj:j&c
print-time
d5O&hQ5\| N0W6b3Q4zyes;
BSD爱好者乐园:KE9l.E]N
BSD爱好者乐园+ZNa|&s-X!_V
};

iR"Bz6UY
%T,g o3CWBSD爱好者乐园N m0b1E6~0VK(moL
category update { update_debug; };

T\.p*|YO`:e
+i3pa&Pu4\ Rcategory security { security_info; };
BSD爱好者乐园Yd@-iem'?
BSD爱好者乐园M|b8W L.h G6g4H
};

%f_:tcA} xBSD爱好者乐园D9Wx Yy3L6d9ts
BSD爱好者乐园8y RXKm,lc4i
在开始DNS服务前需要先建立/var/log/named-auth.info/var/log/update-debug.log两个文件。更多配置ISC BIND的信息,参见随机文档。
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: 翻译
 

评分:0

我来说两句

seccode