DDNS - 建立內部動態名稱解析機制

1、前言

本次實作為利用 zh-Bind 8(或 Bind9) 加上 DHCP 來達成動態 DNS 名稱解析 LAN 端電腦名稱及 IP Address 對應,再開始以前先了解一下相關資訊。


何謂 NetBIOS 名稱

電腦名稱及工作群組即可稱之,可利用下列相關指令來查詢目前 NetBIOS 相關資訊。
  • nbtstat -n: 檢查目前電腦的 NetBIOS 名稱。
  • nbtstat -c: 檢查目前電腦的 NetBIOS 快取區內的資料。

NetBIOS node-type

NetBIOS node-type 共有四種,若您要了解目前電腦使用何種 node 可使用指令 ipconfig /all 來查看 ex. Node Type . . . . . : Hybrid。
  • B-node: 利用廣播方式 (Broadcast)。
  • P-node: 利用點對點方式直接找 WINS。
  • M-node: B + P 也就是先 B 再 P。
  • H-node: P + B 先 P 再 B。 

WINS 用戶端預設採用 H-Node (Hybrid) 模式其 NetBIOS 名稱解析過程如下:
  1. 檢查查詢的電腦名稱是不是自已。
  2. 檢查本身的 NetBIOS 快取區有沒有資料。
  3. 向 WINS Server 查詢。
  4. 送廣播出去找。
  5. 檢查 LMHOSTS (LMHOSTS 檔案路徑 %systemroot%\system32\drivers\etc)。
  6. 檢查 HOSTS。
  7. 向 DNS Server 查詢。





文章目錄

1、前言
2、實作環境
3、安裝及設定
4、Zh-Bind 8 部份 (中/英文電腦名稱解析)
          DHCP 設定檔 (dhcpd.conf)
          zh-bind 設定檔 (named.conf)
          步驟1.安裝 zh-bind 套件
          步驟2.修改 zh-bind 設定檔 (named.conf)
          步驟3.修改正/反向解析檔案
          步驟4.啟動 zh-bind 服務
5、Bind 9 部份 (英文電腦名稱解析)
          步驟1.產生 TSIG Key
          步驟2.修改 BIND 設定檔 (named.conf)
          步驟3.修改 dhcpd.conf
          步驟4.修改 rc.conf
          步驟5.啟動相關服務 named 及 dhcpd 服務
6、參考
7、Me FAQ
          Q1.named: denied update from 192.168.78.1.49197 for "weithenn.home" IN ?
          Q2.dhcpd: Unable to add forward map from 王小明.weithenn.home to 192.168.88.88: timed out ?
          Q3.named: denied update from 192.168.78.1.49202 for "88.168.192.in-addr.arpa" IN ?
          Q4.named: error processing update packet (YXDOMAIN) id 25494 from 192.168.78.1.49160 ?
          Q5.安裝 zh-bind8.3.7 套件時出現錯誤?
          Q6.named: sysquery: no addrs found for root NS?





2、實作環境

  • FreeBSD 6.x-RELEASE
  • FreeBSD 5.x-RELEASE
  • isc-dhcp3-3.x
  • BIND 9.3.2
  • zh-bind-8.3.7





3、安裝及設定

在配合名稱解析套件 BIND 採用 zh-bind (中/英文 電腦名稱解析)、BIND (英文 電腦名稱解析) 二部份進行說明。





4、Zh-Bind 8 部份 (中/英文電腦名稱解析)

DHCP 設定檔 (dhcpd.conf)

因為希望 DHCP Server 在分配 IP Address 資訊給 DHCP Client 時就順便將內部 Domain 的資訊給 DHCP Client。
vi /usr/local/etc/dhcpd.conf      //修改 DHCP 設定檔內容如下
 option domain-name "weithenn.home";        //指定內部 Domain Name
 option domain-name-servers 192.168.88.10;  //指定內部 DNS IP
 option netbios-name-servers 192.168.88.10; //指定內部 WINS IP
 option netbios-dd-server 192.168.88.10;
 option netbios-node-type 8;
 option netbios-scope "";
 default-lease-time 28800;
 max-lease-time 86400;
 # If this DHCP server is the official DHCP server for the local
 # network, the authoritative directive should be uncommented.
 authoritative;
 # ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates.
 ddns-updates on;
 ddns-update-style interim;
 do-forward-updates on;
 ddns-domainname "weithenn.home";
 # Use this to send dhcp log messages to a different log file (you also
 # have to hack syslog.conf to complete the redirection).
 log-facility local7;
 # This is a very basic subnet declaration.
 zone weithenn.home. {
        primary dmz.weithenn.home;
 }
 zone 88.168.192.in-addr.arpa. {
        primary dmz.weithenn.home;
 }
 subnet 192.168.88.0 netmask 255.255.255.0 {
        range 192.168.88.10 192.168.88.200;
        option routers 192.168.88.1;
        option subnet-mask 255.255.255.0;
 }




zh-bind 設定檔 (named.conf)

步驟 1. 安裝 zh-bind 套件

為何安裝 zh-bind? 因為內建的 BIND 套件僅支援英文電腦名稱,安裝 zh-bind 可支援解析 中文電腦名稱。
cd /usr/ports/chinese/bind8  //切換到安裝路徑
make install clean            //安裝並清除暫存檔案




步驟 2. 修改 zh-bind 設定檔 (named.conf)

修改 zh-bind 設定檔 named.conf 建立 2 個區域 (Zone) 請依個人網路環境自行調整。
vi /etc/namedb/named.conf
 zone "weithenn.home" {
        type master;
        notify yes;
        file "dyn/named.weithenn.home";              //動態更新向解析路徑
        allow-update {192.168.88.1;};
 };
 zone "88.168.192.in-addr.arpa" {
        type master ;
        file "dyn/named.88.168.192.in-addr.arpa" ;   //動態更新向解析路徑
        allow-update {192.168.88.1;};
 };




步驟 3. 修改正/反向解析檔案

建立及修改正 / 反向解析檔案 (zone file) 內容如下請依個人網路環境自行調整。

正向解析檔案 (Name > IP): 屆時 DHCP Client 資料將會動態更新至此檔。
vi /etc/namedb/dyn/named.weithenn.home
 ;BIND DUMP V8
 $ORIGIN home.
 weithenn 3600 IN SOA dmz.weithenn.home.  hostmaster.bsd.weithenn.org. (
                                2004121301      ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
3600 IN NS dmz.weithenn.home. ;Cl=2


反向解析檔案 (IP > Name): 屆時 DHCP Client 資料將會動態更新至此檔。
vi /etc/namedb/primary/named.88.168.192.in-addr.arpa
 $TTL    3600
 @       IN      SOA     dmz.weithenn.home. hostmaster.bsd.weithenn.org.  (
                                2004121301      ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
         IN      NS      dmz.weithenn.home.
 1       IN      PTR     gateway.weithenn.home.
 10      IN      PTR     dmz.weithenn.home.




步驟 4. 啟動 zh-bind 服務

請鍵入如下指令啟動 zh-bind 服務,再預設的情況下 zh-bind 服務找尋的 zh-bind 設定檔為 /usr/local/etc/named.conf,因此我們必須建立連結至個人習慣設定檔路徑上 /etc/namedb/named.conf 以便 zh-bind 服務可正確找到我們所設定的設定檔。
/usr/local/sbin/named -u bind -g bind     //啟動zh-bind
修改 /etc/rc.conf 以便系統重新開機時能自動載入 zh-bind 服務
vi /etc/rc.conf     //加入如下三行內容
 named_enable="YES"
 named_program="/usr/local/sbin/named"
 named_flags="-u bind -g bind"

啟動 zh-bind 服務成功後可看到類似如下訊息,由下列訊息可知正在動態更新 DHCP Client 資訊並寫入指定的正 / 反向解析檔案 (zone file)。
 named273: starting (/etc/namedb/named.conf). named 8.3.7-REL Sat Jan 10 23:50:22 GMT 2004 root@wv1u.btc.adaptec
 .com:/usr/obj/usr/src/usr.sbin/named
 named273: limit files set to fdlimit (1024)
 named273: dynamic zone file 'dyn/named.weithenn.home' is writable  //寫入正向解析
 named273: dynamic zone file 'dyn/named.88.168.192.in-addr.arpa' is writable   //寫入反向解析
 named274: Ready to answer queries.






5、Bind 9 部份 (英文電腦名稱解析)

步驟 1. 產生 TSIG Key

請於 Master DNS Server 鍵入如下指令產生 TSIG key (Symmetric HMAC-MD5 keys) 並記得所設定的 keyname (ex. home)。
dnssec-keygen -a HMAC-MD5 -b 512 -n HOST <keyname>
執行完指令後系統會產生 2 個檔案 .key、.private
 K<keyname>+157+<keyid>.key
 K<keyname>+157+<keyid>.private

此例實所產生的 keyname 為 home 其產生的相關檔案如下所示,其中 keyid 是唯一的 Serial Number
 Khome.+157+60109.key
 Khome.+157+60109.private




步驟 2. 修改 BIND 設定檔 (named.conf)

zone file 的內容與 zh-bind 相同就不在多述,而 named.conf 設定則有些微不同。
vi /etc/namedb/named.conf
 ### Internal DDNS Zone
 key "home" {
    algorithm HMAC-MD5;
    secret "GlMeusOMdPwbdVM+spMyHjCig/CxMw==";   //secret 內容為 Khome.+157+60109.key (從最後算起)
 };
 zone "weithenn.home" {
          type master;
          notify yes;
          file "dynamic/named.weithenn.home";    //動態更新正向解析路徑
          allow-update {key "home";};
 };
 zone "88.168.192.in-addr.arpa" {
          type master ;
          notify yes;
          file "dynamic/named.88.168.192.in-addr.arpa";    //動態更新反向解析路徑
          allow-update {key "home";};
 };

上例的 secret 內即為抓 .key 的內容 (第 8 個欄位值),例如此例的 Khome.+157+60109.key 內容如下:
cat Khome.+157+60109.key
 home. IN KEY 512 3 157 hz0fEkyD3IpzPQyQGV+xZYSxZdLNbJ+Tlsvzpl2VAIIwKnCkgMQLrzMu GlMeusOMdPwbdVM+spMyHjCig/CxMw==




步驟 3. 修改 dhcpd.conf

與 zh-bind 所設定的 dhcpd.conf 內容不一樣的地方如下:
 key home {
        algorithm hmac-md5;
        secret "GlMeusOMdPwbdVM+spMyHjCig/CxMw==";
 }
 zone weithenn.home. {
        primary gateway.weithenn.home.
        key home;
 }
 zone 88.168.192.in-addr.arpa. {
        primary gateway.weithenn.home.
        key home;
 }




步驟 4. 修改 rc.conf

修改 /etc/rc.conf 以便系統重新開機時能自動載入 named 服務。
vi /etc/rc.conf          //加入如下三行內容
 named_enable="YES"
 named_flags="-u bind"
 dhcpd_enable="YES"




步驟 5. 啟動相關服務 named 及 dhcpd 服務

鍵入如下指令啟動 named 及 dhcpd 服務。
/etc/rc.d/named start                //啟動 named 服務
/usr/local/etc/rc.d/isc-dhcpd.sh   //啟動 dhcpd 服務

若設定及正確的話應該可以看到 zonefile.jnl 暫存檔最後就會更新內容至 zone file,值得注意的是 Bind9 是把 dynamic update 更新的資料是先寫在 zonefile.jnl 內,而不是直接對 zonefile 直接進行更新寫入動作,所以若是直接把 named 服務停止則更新到 zonefile.jnl 檔案內資料將不會寫入 zonefile 內,此時必須使用 rndc stop 才可將 zonefile.jnl 內更新資料回存至 zonefile 。
 named.weithenn.home.jnl
 named.88.168.192.in-addr.arpa.jnl






6、參考






7、Me FAQ

Q1. named: denied update from 192.168.78.1.49197 for "weithenn.home" IN ?

Error Message:
啟動 named 服務後發現如下錯誤訊息?
named744: denied update from 192.168.78.1.49197 for "weithenn.home" IN

Ans:
請於 DNS 設定檔 name.conf 中 weithenn.home 的 zone 下加入此行 allow-update {192.168.78.1;}; 也就是允許 DHCP Server 的 IP Address 進行 zone file 的更新。



Q2. dhcpd: Unable to add forward map from 王小明.weithenn.home to 192.168.88.88: timed out ?

Error Message:
啟動 named 服務後發現如下錯誤訊息?
dhcpd: Unable to add forward map from 王小明.weithenn.home to 192.168.88.88: timed out

Ans:
  1. 請確定啟動 zh-bind 才可解析中文電腦名稱
  2. 請確定設定檔路徑
預設值: /usr/local/etc/named.conf
修改後: /etc/namedb/named.conf (建立連結至如上路徑)




Q3. named: denied update from 192.168.78.1.49202 for "88.168.192.in-addr.arpa" IN ?

Error Message:
啟動 named 服務後發現如下錯誤訊息?
 named753: denied update from 192.168.78.1.49202 for "88.168.192.in-addr.arpa" IN

Ans:
  1. 請確定啟動 zh-bind 才可解析中文電腦名稱
  2. 請確定設定檔路徑
預設值: /usr/local/etc/named.conf
修改後: /etc/namedb/named.conf (建立連結至如上路徑)




Q4. named: error processing update packet (YXDOMAIN) id 25494 from 192.168.78.1.49160 ?

Error Message:
啟動 named 服務後發現如下錯誤訊息?
 named274: error processing update packet (YXDOMAIN) id 25494 from 192.168.78.1.49160

Ans:
找了google Google後查到 YXDOMAIN 訊息長示不應該存在的某一名字但它存在。
此次為將正向解析檔案內該筆對應資料刪除後再重新啟動 DNS 服務便不在出現錯誤訊息
vi /etc/namedb/dyn/named.weithenn.home
 gateway 3600 IN A 192.168.78.1 ;Cl=2     //刪除此筆解析記錄




Q5. 安裝 zh-bind8.3.7 套件時出現錯誤?

Error Message:
安裝 zh-bind8.3.7 套件時出現如下錯誤訊息 (FreeBSD 6.0-Release -p7) 且安裝無法繼續
 ns_notify.c: In function `sysnotify_slaves':
 ns_notify.c:310: warning: passing arg 3 of `nlookup' from incompatible pointer type
 ns_notify.c: In function `sysnotify_ns':
 ns_notify.c:362: warning: passing arg 3 of `nlookup' from incompatible pointer type
 (u=${USER-root} d=`pwd` h=`hostname || uname -n` t=`date`;  sed -e "s|%WHEN%|${t}|" -e "s|%VERSION%|"8.3.7-REL"|"
  -e "s|%WH OANDWHERE%|${u}@${h}:${d}|"  < version.c > tmp_version.c); sleep 1
 sed: 1: "s|%WHEN%|2006年 5月25日 ...": bad flag in substitute command: '?
 *** Error code 1
 Stop in /usr/ports/chinese/bind8/work/src/bin/named.
 *** Error code 1


Ans:
升級為 FreeBSD 6.1-Stable 後再次執行安裝即可順利安裝了。
 zh-bind-8.3.7       The Berkeley Internet Name Domain, an implementation of DNS



Q6. named: sysquery: no addrs found for root NS?

Error Message:
啟動 named 服務後發現如下錯誤訊息?
 named7913: sysquery: no addrs found for root NS

Ans:
表示您 DNS 內的 Root DNS 檔案太舊,請下載新的 Root DNS 檔案即可。
cd /etc/named
fetch ftp://ftp.internic.net/domain/named.root