`

动态DNS介绍

阅读更多
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。
msn: yfydz_no1@hotmail.com
来源:http://yfydz.cublog.cn

1. 前言
目前IP资源属于有限资源,申请一个静态IP的成本基本相当于动态IP的10倍以上,因此很多用户选择动态IP方式来连接互联网,但这就带来一个问题,就是如果想向外提供服务时如何让互联网上其他用户知道自己的地址呢?动态DNS就用于解决这个问题。
具体过程描述如下:用户先到动态DNS服务提供商处申请一个域名,有收费的也有免费的,以后每次获取动态IP地址后,使用DNS更新协议更新 DNS服务提供商中的域名对应的IP,这样其他用户只要知道域名就可以了,每次访问该域名就会解析回当前的动态IP地址,从而可以进行访问。
动态DNS协议并不是什么新技术,只是利用了DNS协议中的更新技术,只是以前静态条目时更新机会较少,如今更新比较频繁而已,具体协议在RFC2136中定义。
 
2. 比较规则
1) 当两个RR(Resource Record, 资源记录)的名称、类别、类型、资源数据长度、资源数据域相同时,则这两个资源记录相同;
2) 名称里的字符串比较规则在RFC1035 2.3.3节中指定;
3) 不允许使用通配符“*”;
4) 不允许使用别名;
5) 在资源记录集中不允许使用以下的资源记录类型:SOA(Start of Authority),WKS(Well Known Service),CNAME(Canonical Names)

以下是为实现RR更新而定义的一些新的属性类型:
      CLASS = NONE (254)
      RCODE = YXDOMAIN (6)
      RCODE = YXRRSET (7)
      RCODE = NXRRSET (8)
      RCODE = NOTAUTH (9)
      RCODE = NOTZONE (10)
      Opcode = UPDATE (5)

3. 更新(UPDATE)消息的数据格式
3.1 整体数据格式
DNS消息的格式在RFC1035中定义,更新消息的格式如下:
 +---------------------+
 |        Header       | 消息头,表示是UPDATE消息,以及后面字段的长度
 +---------------------+
 |         Zone        | 指定要更新的区段
 +---------------------+
 |     Prerequisite    | 前提段,必须已经存在(更新)或不存在(新建)
 +---------------------+
 |        Update       | 更新段
 +---------------------+
 |   Additional Data   | 附加数据
 +---------------------+
3.2 消息头格式
                                      1  1  1  1  1  1
        0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                      ID                       |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |QR|   Opcode  |          Z         |   RCODE   |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                    ZOCOUNT                    |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                    PRCOUNT                    |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                    UPCOUNT                    |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                    ADCOUNT                    |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
各部分说明如下:
   ID:16位,请求的标志号,在回应包中ID号要和请求包中的相同;
   QR:1位,表示是请求(0)还是响应(1);
   Opcode:4位,操作类型,对于UPDATE类型为5;
   Z:7位,保留,必须置0;
   RCODE:4位,响应码,可取如下值:
   Mneumonic   Value   Description
  ------------------------------------------------------------
   NOERROR     0       正确无错误
   FORMERR     1       格式错误,服务器不能解析请求
   SERVFAIL    2       服务器失效
   NXDOMAIN    3       本应存在的域名不存在
   NOTIMP      4       服务器不支持指定的操作类型
   REFUSED     5       服务器因为策略或安全原因拒绝执行指定的操作类型
   YXDOMAIN    6       本应不存在的域名存在
   YXRRSET     7       本应不存在的RR集存在
   NXRRSET     8       本应存在的RR集不存在
   NOTAUTH     9       服务器无权认证在区段中的名称
   NOTZONE     10      在前提段或更新端中使用的名称没在区段中
   ZOCOUNT:在区段中的RR的数目;
   PRCOUNT:在前提段中RR的数目;
   UPCOUNT:在更新段中RR的数目;
   ADCOUNT:在附加段中RR的数目;

3.3 区段部分
                                      1  1  1  1  1  1
        0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                                               |
      /                     ZNAME                     /
      /                                               /
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                     ZTYPE                     |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
      |                     ZCLASS                    |
      +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  ZNAME:区段名称
  ZTYPE:必须为SOA
  ZCLASS:区段的类别

3.4 前提段部分
                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
NAME:该资源记录所属的域名
TYPE:2字节,RR类型码,该字段确定RDATA域的意义
CLASS:2字节,指定RDATA域数据的类别
TTL:32位无符号整数,指定RR在丢弃前应该保留的时间,以秒为单位
RDLENGTH:16位整数,说明RDATA域长度
RDATA:描述资源的变长字符串
前提段可说明以下几种情况:
(1) RR集存在,取值独立,至少存在一个指定名称和类型的RR
(2) RR集存在,取值是相关的,存在一组指定名称和类型的RR
(3) RR集不存在;
(4) 名称已经被使用;
(5) 名称未被使用;

3.5 更新段部分

这个部分格式和前提段相同,包含要在区段中增加或删除的RR,可说明以下几种情况
(1) 增加RR到RR集
(2) 删除一个RR集
(3) 从名称中删除所有RR集
(4) 从一个RR集中删除一个RR

3.6 附加段部分
这个部分格式和前提段相同,包含与更新段自己或者要添加的新RR相关的RR。
 
4. 服务器端的操作
服务器收到了UPDATE请求后,如果不能识别该UPDATE请求或者服务器没实现该功能,将回应一个NOTIMP消息给请求端。然后依次分析区段、前提段、更新段和附加段的数据,如果没有错误发生,则完成RR的更新操作,服务器在向请求端回应前要将更新结果保存到非易失存储器(通常就是硬盘) 中,服务器要保证每个更新操作是原子的。

5. 结论
现在已经有了很多支持DDNS的客户端更新软件,如花生壳等,这样只要从DDNS服务提供商申请域名后,每次拨号获取动态地址后可以用这些更新软件更新域名地址,这样就不用申请固定IP地址也能自动向外提供服务,而动态IP比静态IP要便宜得多。

6. 附录
一些DDNS服务提供商地址:
http://www.2mydns.com/
http://www.adsldns.org/
http://freedns.afraid.org/
http://www.dnsart.com/
http://www.blrf.net/dyndns/
http://www.changeip.com/
http://www.cjb.net/
http://dynamicdns.constanttime.com/
http://www.cm.nu/cmdns/
http://www.darsite.com/eng
http://www.ddns.nu/
http://www.ddts.net/
http://dns2go.deerfield.com/
http://www.dfdns.com/
http://www.dhis.org/dhis/
http://www.dhs.org/
http://www.dns4biz.de/
http://www.dnsexit.com/ 
http://www.dnsmadeeasy.com/
http://www.dnspark.com/
http://www.dnswiz.com/
http://www.dnsd.be/
http://www.dnsq.org/
http://www.dtdns.com/
http://www.dyn.ca/
http://www.dyn.ee/
http://www.dyn.to/
http://www.dynaccess.de
http://www.dynamic-dns.de/
http://www.dynamip.com/
http://www.dyn.ro/
http://dyndns.1kr.net/
http://www.dyndns.com/
http://dyndns.dk/
http://www.dyndns.org/
http://www.dyndsl.com/
http://www.dynip.com/
http://www.dynips.com/
http://dyns.cx/
http://www.dynu.com/
http://www.dynup.net/
http://www.easydns.com/dynamicdns.php3 
http://www.eddns.com/
http://www.elmit.com/
http://www.enetcanada.ca/ddns/
http://www.everydns.net/
http://www.evilroot.org/
http://www.freealias.de/
http://www.getmyip.com/
http://www.hn.org/
http://www.homepc.org/
http://www.hldns.com/
http://www.io.com/products/ddns.html
http://www.inside.net/dns/
http://www.ipupdater.com/
http://www.microtech.co.gg/dns/
http://ddns.mindriot.net/
http://www.minidns.net/
http://www.myinternet.com/
http://www.myserver.org/
http://www.name-keeper.com/
http://nerdcamp.net/dynamic/dns.cgi
http://www.nettica.com/
http://www.nexuz.net/
http://nicolas.cx/
http://www.nols.com/
http://www.no-ip.com/
http://www.ods.org/
http://www.orgdns.org/
http://www.ownip.net/ 
http://www.pimpdomain.com/
http://www.planetdns.net/
http://www.powerdns.com/
http://www.prout.be/dns/
http://www.routeyourdomain.com/
http://www.selfhost.com/
http://websvr.net/DynamicHost/
http://www.sitelutions.com/info/sldns
http://www.soliddns.com/
http://www.staticcling.org/
http://www.thatip.com/
http://www.tjns.tj/
http://www.tzo.com/
http://uck.me.uk/
http://www.webreactor.net/
http://www.whyi.org/
http://dns.widge.net/
http://www.worldwidedns.net/
http://www.xdisk.co.uk/
http://www.yyweb.com/DDNS/
http://www.zeropain.com/
http://www.zfc.com/vdns/
http://www.zoneedit.com/


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics