当前位置:Linux教程 - Linux综合 - DyDNS原理以及实现

DyDNS原理以及实现

  2003,04,20 1. DyDNS i.e. 动态域名 可以让不固定ip的用户使用一个固定的域名,每次他们的ip改变的时候,只要更新这个dns数据,就可以让他们的机器通过域名被访问到 2. 原理 每个internet domain name 记录都有一个 ttl(time-to-live) 标识,域名缓存服务器根据这个标识决定每隔多长时间更新一次它的数据。那么,只需要把动态dns的ttl值设的小一点,就可以保证域名的改变能及时生效。 3. bind 与动态dns的实现 A. bind 是Linux/unix上用的非常普遍的域名服务器软件。bind本身就提供了动态更新域名数据的机制。 bind 的 named.conf里面的 zone 语句,有一个参数 allow-update 语法: allow-update { address_match_list } 即指定了能向bind发起 域名更新 指令的机器的ip/地址列表。 缺省情况下,任何机器都不能发起域名更新指令。 例: zone "abc.com" { type master; file "abc.com"; allow-update {127.0.0.1; 10.240.0.1; 192.168.1.1;}; }; 安全: 如果使用了 ip地址匹配机制,那么相应的机器上的所有用户都可以发起域名更新指令,如果这个机器上有很多普通用户的话,这可能是一个麻烦。这种情况下,需要用bind的高级验证机制来解决(使用密钥)。 B. nsupdate 工具 随bind一起发行的工具除了 named ,nslookup之外,还有一个 nsupdate工具,用来发起域名更新指令。 用法: nsupdate [ -d ] [ -k keydir:keyname ] [ -v ] [ filename ] -d 表示运行于debug模式 -k 指定一个用于验证的密钥 -v 表示使用tcp而不是udp nsupdate的指令从 filename 指定的文件内获得,如果没有指定文件,就从标准输入获得 nsupdate 缺省与/etc/resolve.conf里面指定的主域名服务器通讯 主要指令 : 增加一个域名: update add domainname ttl [class] type value ttl是增加的域名记录的 time-to-live属性, class是缺省 IN ( internet ) type 可以是 A/CNAME/NS/SOX 一般用于dydns是 A value是这个域名记录的值 ,对于 A类型记录,值一般是ip地址 删除一个域名: update delete domainname 这些指令可以与先决条件一起使用: 以 domainname 不存在为条件: prereq nxdomain domainname 以 domainname 存在为条件 prereq yxdomain domain-name 任何空行表示commit 例: i. 增加一个域名 # nsupdate >update add new.abc.com 60 IN A 127.0.0.1 > # nslookup new.abc.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: new.abc.com Address: 127.0.0.1 ii. 删除一个域名 为了保证不会出错,这里首先检查该域名是否存在 # nsupdate > prereq yxdomain new.abc.com > update delete new.abc.com > # nslookup -sil new.abc.com Server: 127.0.0.1 Address: 127.0.0.1#53 ** server can't find new.abc.com: NXDOMAIN 注释: 以prereq开头,空行结束的指令段可以看作一个条件语句段,只有在prereq所要求的条件满足的时候才会被执行。 因此,一段通用的用于动态dns 注册/登录 的nsupdate指令可以写成: # nsupdate > prereq yxdomain xxx.abc.com > update delete xxx.abc.com > > update add xxx.abc.com 60 IN A xxx.xxx.xxx.xxx
[1] [2] 下一页 

> 4. bind的高级验证机制 (基于密钥) bind支持用密钥进行的验证机制,只有拥有这个密钥的nsupdate进程 ( 可以用nsupdate的 -k 参数指定给nsupdate)才能进行特定的操作,特别有用的是域名更新操作。 i. 为验证生成密钥 # dnskeygen -H 128 -h -n abc.com Generating 128 bit HMAC-MD5 Key for abc.com Generated 128 bit Key for abc.com. id=0 alg=157 flags=513 生成两个文件 Kabc.com.+157+00000.private 和 Kabc.com.+157+00000.key 内容分别为 # cat /etc/bind/sec/Kabc.com.+157+00000.private Private-key-format: v1.2 Algorithm: 157 (HMAC) Key: /G9ZaFJIyeG1roPSlJbfyw== # cat /etc/bind/sec/Kabc.com.+157+00000.key abc.com. IN KEY 513 3 157 /G9ZaFJIyeG1roPSlJbfyw== 确认使这两个文件只对拥有者可读写 ii. 修改named.conf, 使之能够使用密钥验证 key abc.com. { algorithm hmac-md5; secret "/G9ZaFJIyeG1roPSlJbfyw=="; }; // 这里的 secret key就是 Kabc.com.+157+00000.private 文件中的 key zone "abc.com" { type master; allow-update { key abc.com.;}; file "abc.com"; }; iii. 在调用nsupdate的时候,使用密钥 nsupdate -k /etc/bind/sec/:abc.com. > bind 8里面,nsupdate使用 -k keydir:keyname的格式来使用 keyname 是 dnskeygen 生成key的时候指定的 keyname,但是要加一个点"." 5. 最后实现 使用一个程序(cgi或者其他服务程序)调用 nsupdate, 并指定正确的验证密钥,就可以实现动态dns 6. 参考 named.conf(5), nsupdate(1), dnskeygen(1)

(出处:http://www.sheup.com)


上一页 [1] [2] 

> bind 8里面,nsupdate使用 -k keydir:keyname的格式来使用 keyname 是 dnskeygen 生成key的时候指定的 keyname,但是要加一个点"." 5. 最后实现 使用一个程序(cgi或者其他服务程序)调用 nsupdate, 并指定正确的验证密钥,就可以实现动态dns 6. 参考 named.conf(5), nsupdate(1), dnskeygen(1)

(出处:http://www.sheup.com/)


上一页 [1] [2] [3]