歡迎您光臨本站 註冊首頁

DHCP + DNS (bind) == DDNS

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

DHCP + DNS (bind) == DDNS

我們在辦室的時候,有時會去訪問別的機器,如果是在windows下,我們有時候會用機器名去訪問,因為netbios/wins會幫我們來把機器名轉成IP的。下面給大家介紹一種用動態DNS來解析機器名的辦法。不過,不是用的w2k的DDNS,而是用的Linux.

準備:一台(或兩台)Linux伺服器,用來做DHCP server和DNS server。也可以把它做成兩台伺服器。

安裝:伺服器的安裝過程,請參考其它文檔,記住把 dhcp 和 bind, bind-utils 裝上就行了。

配置:

一、DHCP的配置:

配置DHCP server 時很簡單,可以參考 /usr/share/doc/dhcp-x.xx/dhcpd.conf.sample來做。也可以先把這個文件cp 到 /etc/dhcpd.conf,然後根據自己的需要做適當修改。下面貼出我的一個/etc/dhcpd.conf,供大家參考:

   ddns-update-style interim;
   ignore client-updates;

   key DHCP_UPDATER {
           algorithm HMAC-MD5;
           secret  qhB++OR5yWo8BTXwk/m4ng;
   };

   zone bj.pnx. {
           primary 127.0.0.1;
           key DHCP_UPDATER;
   }

   zone 251.168.192.in-addr.arpa. {
           primary 127.0.0.1;
           key DHCP_UPDATER;
   }

   subnet 192.168.251.0 netmask 255.255.255.0 {
           range 192.168.251.100 192.168.251.200;
   # --- default gateway
           option routers                  192.168.251.254;
           option subnet-mask              255.255.255.0;

   #       option nis-domain               "domain.org";
           option domain-name              "bj.pnx";
           option domain-name-servers      192.168.251.63,192.168.251.254;

   #       option time-offset              28800;  # PRC Standard Time
   #       option ntp-servers              192.168.251.220;
   #       option netbios-name-servers     192.168.1.1;

   #       range dynamic-bootp 192.168.0.128 192.168.0.255;
           default-lease-time 21600;
           max-lease-time 43200;
  
   }  


幾個要注意的地方:
1. "ddns-update-style"
   這個就是動態DNS的更新方式,有幾個選項,我用的是interim,可以用 man dhcpd.conf找到另外的幾個選項。

2. "ignore client-updates"
   這個選項是不允許客戶機更新DNS記錄。當然,也可能允許,但會有一點問題。

3. "key DHCP_UPDATER"
   這個是更新DNS的KEY,是必須的。其中algorithm 后的是生成key的演算法,key的生成是用 "dnssec-keygen -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER"。
   
4. "zone"
   要更新的zone,如果是本機就是DNS server,primay 就寫127.0.0.1,要是其它機器是DNS server, 就寫那台機器的IP。

別的都是一般DNS該有的了,要注意的是一定要有 range 那一行,不然就分不了IP啦。

配好以後,可以啟動一下試試, service dhcpd start,如果沒問題,把dhcpd改成開機就啟動,chkconfig --level 2345  dhcpd on。

二、bind(named)的配置。

關於bind(named)配置的文章有很多了。這裡只把與普通配置不同的地方寫出來。
下面給我的named.conf供大家參考:

   // generated by named-bootconf.pl

   options {
           directory "/var/named";
           /*
            * If there is a firewall between you and nameservers you want
            * to talk to, you might need to uncomment the query-source
            * directive below.  Previous versions of BIND always asked
            * questions using port 53, but BIND 8.1 uses an unprivileged
            * port by default.
            */
   //        forwarders { 192.168.1.254; };
           // query-source address * port 53;
   };

   //
   // a caching only nameserver config
   //
   controls {
           inet 127.0.0.1 allow { localhost; } keys { rndckey; };
   };

   key DHCP_UPDATER {
           algorithm HMAC-MD5;
           secret qhB++OR5yWo8BTXwk/m4ng;
   };

   zone "." IN {
           type hint;
           file "named.ca";
   };

   zone "localhost" IN {
           type master;
           file "localhost.zone";
           allow-update { none; };
   };

   zone "0.0.127.in-addr.arpa" IN {
           type master;
           file "named.local";
           allow-update { none; };
   };

   zone "1.168.192.in-addr.arpa" IN {
           type master;
           file "1.168.192.zone";
           allow-update { key DHCP_UPDATER; };
   };

   zone "test.com" IN {
           type master;
           file "test.com";
           allow-update { key DHCP_UPDATER; };
   };
   include "/etc/rndc.key";


其中多了的是

   key DHCP_UPDATER {
           algorithm HMAC-MD5;
           secret qhB++OR5yWo8BTXwk/m4ng;
   };

這就是更新dns要用的key,必須和dhcpd.conf里的一樣。

還有就是每個 zone 都可以用 key 來update了。

這樣就行了。然後啟動一下試試吧。

你就可以ping 機器名來找你同事的機器了。

本人只在windows客戶機上試驗過,Linux好象會有一點問題。哪位有興趣,共同研究一下。 :em02:

更新一下:

#===/etc/dhclient.conf for linux =======
send host-name "your host name";
request subnet-mask, broadcast-address, routers,
        domain-name, domain-name-servers;
require subnet-mask, domain-name-servers;
timeout 60;
retry 60;
reboot 10;
select-timeout 5;
initial-interval 2;
script "/sbin/dhclient-script";
《解決方案》

DHCP + DNS (bind) == DDNS

不錯.
《解決方案》

DHCP + DNS (bind) == DDNS

謝謝版主!
《解決方案》

DHCP + DNS (bind) == DDNS

HI,你好:
請問你這樣配置的服務,加入客戶端是Linux時,DNS也能自動更行嗎?
我沒有採用你的這種DDNS的更新方式,可是如果客戶端時windows時不會有問題,可是當客戶端是linux時,需要在linux客戶端編輯一個文件/etc/dhclient.confDNS才能更新,不信你可以看看/var/lib/dhcp/的文件的內容,客戶端分配的IP沒有Hostname的記錄。
《解決方案》

DHCP + DNS (bind) == DDNS

這個我知道,給Linux分配的IP都 是沒有主機名的。

因為我的客戶機都是windows的,Linux的我都用靜態IP。

麻煩老兄把那個 /etc/dhclient.conf寫出來吧。謝謝啦。
《解決方案》

DHCP + DNS (bind) == DDNS

我的/etc/dhclient.conf內容如下:
send fqdn.fqdn "hostname";
send fqdn.encoded  on;
send fqdn.server-update off;
但是我在Redhat8&9中還是不行,只有在/etc/rc.d/rc.local中加入下面的命令:
/sbin/dhclient
注意必須在/sbin存在這個可執行的文件。我知道在redhat中是存在的。
謝謝!希望能相互探討,我會把我的試驗步驟寫出來使得這個帖子更完善。你認為如何?
《解決方案》

DHCP + DNS (bind) == DDNS

把 /etc/sysconfig/network-script/ifcfg-eth0 里的 PROTOCOL設成DHCP也不行么?
《解決方案》

DHCP + DNS (bind) == DDNS

郵件發送和接收是在那個文件里配置啊
《解決方案》

DHCP + DNS (bind) == DDNS

原帖由 "q1208c"]把 /etc/sysconfig/network-script/ifcfg-eth0 里的 PROTOCOL設成DHCP也不行么?

不行的,只能得到IP。不能更新資料庫,我猜測是客戶發出DHCP請求中沒有包含客戶的主機名造成的。
《解決方案》

DHCP + DNS (bind) == DDNS

send host-name "";
    request subnet-mask, routers, domain-name, domain-name-servers;
}
我是這樣寫的,但是可以確定DDNS使用正常

[火星人 ] DHCP + DNS (bind) == DDNS已經有479次圍觀

http://coctec.com/docs/service/show-post-23064.html