歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

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


> 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)



> bind 8裡面,nsupdate使用 -k keydir:keyname的格式來使用 keyname 是 dnskeygen 生成key的時候指定的 keyname,但是要加一個點"." 5. 最後實現 使用一個程序(cgi或者其他服務程序)調用 nsupdate, 並指定正確的驗證密鑰,就可以實現動態dns 6. 參考 named.conf(5), nsupdate(1), dnskeygen(1)



Copyright © Linux教程網 All Rights Reserved