站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

DDNS-提供 LAN 電腦名稱與 IP 對應服務

前言

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

何謂 NetBIOS 名稱

電腦名稱及工作群組即可稱之,可利用下列相關指令來查詢目前 NetBIOS 相關資訊

NetBIOS node-type

NetBIOS node-type 共有四種,若您要了解目前電腦使用何種 node 可使用指令 ipconfig /all 來查看 ex. Node Type . . . . . : Hybrid

WINS 用戶端預設採用 H-Node (Hybrid) 模式其 NetBIOS 名稱解析過程如下

  1. 檢查查詢的電腦名稱是不是自已
  2. 檢查本身的 NetBIOS 快取區有沒有資料
  3. 向 WINS Server 查詢
  4. 送廣播出去找
  5. 檢查 LMHOSTS (LMHOSTS 檔案路徑 %systemroot%\system32\drivers\etc)
  6. 檢查 HOSTS
  7. 向 DNS Server 查詢

實作環境

安裝及設定

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

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

DHCP 設定檔 (dhcpd.conf)

因為希望 DHCP Server 在分配 IP Address 資訊給 DHCP Client 時就順便將內部 Domain 的資訊給 DHCP Client,有關於 DHCP 詳細設定內容請參考站內文章 DHCP-發放 IP 資訊給 Lan User

 #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";                //動態更新正向解析檔案路徑 (Name >> IP)
        allow-update {192.168.88.1;};
 };
 zone "88.168.192.in-addr.arpa" {
        type master ;
        file "dyn/named.88.168.192.in-addr.arpa" ;     //動態更新反向解析檔案路徑 (IP >> Name)
        allow-update {192.168.88.1;};
 };

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

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

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

 named[273]: 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
 named[273]: limit files set to fdlimit (1024)
 named[273]: dynamic zone file 'dyn/named.weithenn.home' is writable                //DHCP Client 資訊寫入正向解析檔案
 named[273]: dynamic zone file 'dyn/named.88.168.192.in-addr.arpa' is writable      //DHCP Client 資訊寫入反向解析檔案
 named[274]: Ready to answer queries.

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";              //動態更新正向解析檔案路徑 (Name >> IP)
          allow-update {key "home";};
 };
 zone "88.168.192.in-addr.arpa" {
          type master ;
          notify yes;
          file "dynamic/named.88.168.192.in-addr.arpa";    //動態更新反向解析檔案路徑 (IP >> Name)
          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

參考

[Secure dynamic DNS howto]

[Log messages for BIND 8 named]

[ISC Mailing List Archives]

[Dynamic Updates in the Domain Name System]

[comp.protocols.dns.bind論壇]

[Dynamic DNS with DHCP and BIND9]

[Bind Dynamic DNS Update]

[Configurare named per l'aggiornamento dinamico mediante DHCP]

Me FAQ

Q1.named: denied update from [192.168.78.1].49197 for "weithenn.home" IN ?

Error Message:

啟動 named 服務後發現如下錯誤訊息?

 named[744]: 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:

Q3.named: denied update from [192.168.78.1].49202 for "88.168.192.in-addr.arpa" IN ?

Error Message:

啟動 named 服務後發現如下錯誤訊息?

 named[753]: denied update from [192.168.78.1].49202 for "88.168.192.in-addr.arpa" IN

ANS:

Q4.named: error processing update packet (YXDOMAIN) id 25494 from [192.168.78.1].49160 ?

Error Message:

啟動 named 服務後發現如下錯誤訊息?

 named[274]: 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 服務後發現如下錯誤訊息?

 named[7913]: sysquery: no addrs found for root NS

ANS:

表示您 DNS 內的 Root DNS 檔案太舊,請下載新的 Root DNS 檔案即可

 #cd /etc/named
 #fetch ftp://ftp.internic.net/domain/named.root
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com