Dynamic Host Configuration Protocol 主機的設定問題(類似 IP 分享器的後端功能)
想像兩種情況:(1)如果你在工作單位使用的是筆記型電腦,而且常常要帶著你的筆記型電腦到處跑, 那麼由第四章、連上 Internet 的說明中會發現,哇! 我的網路卡參數要常常修改啊!而且,每到一個新的地方,就得問清楚該地的網路參數才行!真是麻煩。 (2)你的公司常常有訪客或貴客來臨,因為他們也帶來筆電,所以也得常常跑來找你問網路參數才能設定他的電腦。 哇!這兩種情況都會讓你想哭哭吧?這個時候,動態主機設定協定 (DHCP) 可就大大的派上用場啦!DHCP 這個服務可以自動的分配 IP 與相關的網路參數給用戶端,來提供用戶端自動以伺服器提供的參數來設定他們的網路。 如此一來,使用者只要將自己的筆電設定好經由 DHCP 協定來取得網路參數後,一插上網路線,呵呵!馬上就可以享受 Internet 的服務啦!很方便吧!所以得來瞧一瞧這個好用的協定喔!
在正式的進入 DHCP (Dynamic Host Configuration Protocol) 伺服器設定之前,我們先來認識一下 DHCP 這個協定吧!還有,需要瞭解的是,我們是否『一定』得設定 DHCP 這個伺服器呢?這裡都需要釐清一下概念喔!
在開始 DHCP 的說明之前,我們先來複習一下之前在第二章網路基礎裡面提到的幾個網路參數吧! 要設定好一個網路的環境,使電腦可以順利的連上 Internet ,那麼你的電腦裡面一定要有底下幾個網路的參數才行,分別是:
其中,那個 IP, netmask, network, broadcast 與 gateway 都可以在 /etc/sysconfig/network-scripts/ifcfg-eth[0-n] 這檔案裡面設定,DNS 伺服器的位址則是在 /etc/resolv.conf 裡頭設定。只要這幾個項目設定正確,那麼電腦應該就沒問題的可以上網了! 所以說,你家裡面的 3, 4 部電腦,你都可以手動的來設定好你所需要的網路參數, 然後利用 NAT 伺服器的功能,就可以大搖大擺的連上 Internet 了!真是不錯 ^_^,不是嗎?
好了,現在讓我們換一個大一些些的場景吧!假設你是學校宿舍的網路管理員,所管理的學生電腦大概有 100 部好了,那麼你怎麼設定好這 100 部的電腦呢?
這三種解決方案所需要的時間都不相同,如果你選擇的是(1),那麼鳥哥個人認為,你不是工作狂就是瘋掉了, 因為所要花費的時間與你所得的薪水與付出的心力是完全不成比例的。如果選擇是(2),那麼很可能你會被掛上獨裁者、 沒良心的管理員的稱號!如果是選擇(3)呢?恭喜你!這個方案的管理時間花費最短,也是最不麻煩的作法啦!
呵呵!知道鳥哥要說些什麼了嗎?是的!這個 DHCP (Dynamic Host Configuration Protocol) 伺服器最主要的工作,就是在進行上面的第三個方案,也就是自動的將網路參數正確的分配給網域中的每部電腦, 讓用戶端的電腦可以在開機的時候就立即自動的設定好網路的參數值,這些參數值可以包括了 IP、netmask、network、gateway 與 DNS 的位址等等。如此一來,身為管理員的你,只要注意到這一部提供網路參數的主機有沒有掛掉就好了, 其他同學們的個人電腦,哈!你想都不必想要怎麼去幫忙!因為 DHCP 主機已經完全都幫你搞定啦! ^_^! 阿!當管理員最大的幸福就是可以喝喝茶、聊聊天就能控管好一切的網路問題呢!
你必需要知道的是,DHCP 通常是用於區域網路內的一個通訊協定,他主要藉由用戶端傳送廣播封包給整個物理網段內的所有主機, 若區域網路內有 DHCP 伺服器時,才會回應用戶端的 IP 參數要求。所以囉,DHCP 伺服器與用戶端是應該要在同一個物理網段內的。 至於整個 DHCP 封包在伺服器與用戶端的來來回回情況有點像底下這樣:(註1)
戶端取得 IP 參數的程序可以簡化如下:
以上就是 DHCP 這個協定在 Server 端與 Client 端的運作狀態,由上面這個運作狀態來看,我們可以曉得,只要 Server 端設定沒有問題,加上 Server 與 Client 在硬體連線上面確定是 OK 的,那麼 Client 就可以直接藉由 Server 來取得上網的網路參數,當然啦,只要我們這些管理員能夠好好的、正確的管理好我們的 DHCP 伺服器, 嘿嘿!那麼上網的設定自然就變成一件很簡單的事情啦!不過,關於上述的流程還是有一些需要額外說明的啦:
在上面的步驟裡面,注意到第二步驟了嗎?就是伺服器會去比較用戶端的 MAC 硬體位址,並判斷該 MAC 是否需要給予一個固定的 IP 呢!所以啦,我們可以設定 DHCP 伺服器給予用戶端的 IP 參數主要有兩種:
# 1. 觀察自己的 MAC 可用 ifconfig: [root@www ~]# ifconfig | grep HW eth0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD eth1 Link encap:Ethernet HWaddr 08:00:27:2A:30:14 # 因為鳥哥有兩張網卡,所以有兩個硬體位址喔! # 2. 觀察別人的 MAC 可用 ping 配合 arp [root@www ~]# ping -c 3 192.168.1.254 [root@www ~]# arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.254 ether 00:0c:6e:85:d5:69 C eth0
除非你的區域網路內的電腦有可能用來做為主機之用,所以必需要設定成為固定 IP ,否則使用動態 IP 的設定比較簡單,而且使用上面具有較佳的彈性。怎麼說呢?假如你是一個 ISP 好了,而你只申請到 150 個 IP 來做為你的客戶連線之用。那麼你是否真的只能邀集到 150 的使用者?呵呵!當然不囉!我可以邀集 200 個使用者以上呢!
為什麼?這樣想好了,我今天開了一家餐館,裡面只有 20 個座位,那麼是否我一餐只能賣給 20 個人呢?當然不是啦!因為客人是人來人往的,有人先吃有人後吃,所以同樣是 20 個座位,但是可以有 40 個人來吃我的簡餐,因為來的時間不一樣嘛!瞭解了嗎?呵呵!對啦!你這個 ISP 雖然只有 150 個 IP 可以發放,但是因為你的使用者並非 24 小時都掛在線上的,所以你可以將這 150 個 IP 做良好的分配,讓 200 個人來『輪流使用』這 150 個 IP 哩!
事實上現在主流的 ADSL 寬頻撥接上網也有使用到『靜態 IP 』與『固定 IP 』之類的概念喔! 舉例來說好了,hinet/seed net 等主要 ISP 都有提供所謂的:『一個固定 IP 搭配 7~8 個浮動 IP 』的 ADSL 撥接功能,也就是說同樣透過一條電話線撥接到 ISP ,但是其中一個撥接是可以取得固定的 IP 呢! 而其他的則是非固定的 IP ,DHCP 的 static/dynamic 跟這個玩意兒有點類似啦! ^_^
怪了!如果我們觀察上面 DHCP 運作模式的第四個步驟,你會發現最後 DHCP 伺服器還會給予一個租約期限! 幹嘛還要這樣的一個期限呢?其實設定期限還是有個優點啦!最大的優點就是可以避免 IP 被某些使用者一直佔用著,但該使用者卻是 Idle (發呆) 的狀態!
舉個例子來說,我們剛剛不是說到,我有 150 個 IP ,但是偏偏我有 200 個用戶嗎?我們以 2010 年的世界盃足球賽來說明好了。假設每個使用者都急著上網知道世足賽的消息, 那麼某些熱門對戰時段網路將可能達到使用尖峰!也就是說,這 200 個人同時要來使用這 150 個 IP ,有可能嗎?當然不可能!肯定會有 50 個人無法連線,因為『很抱歉!目前系統正在忙線中,請你稍後再撥!』
那怎麼辦?這個時候租約到期的方式就很有用處啦!那幾個已經連線進來很久的人, 就會因為租約到期而被迫離線,這個時候該 IP 就會被釋放出來,哈哈!大家趕快搶呀!先搶到先贏喔! 所以,那 50 個人 (包括被迫離線的那個朋友) 只好繼續的、努力的、加油的來進行 DHCP 的要求囉! ^_^""
雖然說是優點,但是其實如果站在使用者的角度來看,還是可能會造成公憤的!憑什麼大家一起交錢, 我先連線進來就需要先被踢出去?~呵呵!所以囉,如果要當 ISP ,還是得要先規劃好服務的方針才行呦! 這樣你可以瞭解租約到期的行為了嗎?! ^_^
既然有租約時間,那麼是否代表我用 DHCP 取得的 IP 就得要『手動』的在某個時間點去重新取得新的 IP 呢?不需要的啦!因為目前的 DHCP 用戶端程式大多會主動的依據租約時間去重新申請 IP (renew) 的!也就是說在租約到期前你的 DHCP 用戶端程式就已經又重新申請更新租約時間了。所以除非 DHCP 主機掛點, 否則你所取得的 IP 應該是可以一直使用下去的!
或許你曾經發現過一件事情,那就是當我的網域裡面有兩部以上的 DHCP 伺服器時, 到底哪一部伺服器會提供我的這部用戶端電腦所發出的 DHCP 要求?呵呵!很抱歉,俺也不曉得! 因為在網路上面,很多時候都是『先搶先贏』的, DHCP 的回應也是如此!當 Server1 先回應時,你使用的就是 Server1 所提供的網路參數內容,如果是 Server2 先回應,你就是使用 Server2 的參數來設定你的用戶端 PC !不過,前提之下當然是這些電腦的『物理連線』都是在一起的啊!
因為這個特色的關係,所以當你在練習 DHCP 伺服器的設定之前, 不要在已經正常運作的區網下測試,否則會很慘。舉個鳥哥的例子來說好了,某一次其他系的研究生在測試網路安全時, 在原有的區網上面放了一部 IP 分享器,結果你猜怎麼著?整棟大樓的網路都不通了!因為那時整棟大樓的網路是串接在一起的, 而我們學校是使用 DHCP 讓用戶端上網。由於 IP 分享器的設定並不能連上 Internet ,哇!大家都無法上網了啦! 那你曉得了嗎?不要隨便測試啦這個 DHCP 伺服器!
既然 DHCP 的好處是『免用戶端設定』,而且對於行動裝置的上網方面非常的方便!那麼是否代表你就得要架設一部 DHCP 呢?那可不一定!接下來要告知大家的是幾個概念性的問題, 你倒不一定『必需』遵守底下的一些概念呢!反正,自己的網域自己『爽』就好啦!
在某些情況之下,倒是強烈的建議架設 DHCP 主機的!什麼情況呢?例如:
雖然 DHCP 有很多好處,但是你有沒有發現一個步驟怪怪的呀!回頭看一下那個步驟一, 用戶端在開機的時候會主動的發送訊息給網域上的所有機器,這個時候,如果網域上就是沒有 DHCP 主機呢?很抱歉,那麼你的這部用戶端電腦,『仍然會持續的發送訊息!』 真正的時間與次數不曉得會有多久,不過,肯定會超過 30 秒以上, 甚至可以達到一分鐘以上!哇!那麼這段時間你能幹嘛?呵呵!除了等、還是等! 所以囉,如果電腦數不多,還是使用手動的方式來設定一下就好了!方便嘛!
如前所述,上面的都是概念性的說法,事實上,一件事情的解決之道是有很多的方案的, 沒有所謂的『完全正確』的方案,只有『相對可行、並且符合經濟效益與功能』的方案! 所以囉,架設任何網站之前,請先多評估評估吶!
事實上,目前市面上的 IP 分享器已經便宜到爆了!而 IP 分享器本身就含有 DHCP 的功能。 所以如果你只是想要單純的使用 DHCP 在你的區域網路當中而已,那麼建議你直接購買一部 IP 分享器來使用即可, 因為至少它很省電。如果你還有其他考量的話,才來架設 DHCP 吧!底下我們以一個簡單的範例來架設 DHCP 先。
DHCP 的軟體需求很簡單,就是只要伺服器端軟體即可,在 CentOS 6.x 上面,這個軟體的名稱就是 dhcp 囉!如果是預設安裝,那麼這個軟體是不會安裝的,請自行使用 yum 去裝好這個軟體吧!安裝完畢之後, 你可以使用『 rpm -ql dhcp 』來看看這個軟體提供了哪些檔案,基本上,比較重要的檔案資料如下:
就跟你說很簡單吧!整個軟體資料也不過才如此而已呢!
在 CentOS 5.x 以前,這個檔案都被放置到 /etc/dhcpd.conf 的,新版的才放置於此處。其實 DHCP 的設定很簡單啊,只要將 dhcpd.conf 設定好就可以啟動了。不過編輯這個檔案時你必須要留意底下的規範:
基本上,我們剛剛前面提過說, DHCP 的 IP 分配可分為給予動態 IP 與固定 IP ,其中又需要瞭解的是, 如果需要設定固定 IP 的話,那麼就必須要知道要設定成固定 IP 的那部電腦的硬體位址 (MAC) 才行,請使用 arp 或 ifconfig 來查知你的介面的 MAC 吧!好了,那麼需要設定的項目有哪些呢? 其實 dhcpd.conf 裡頭的設定主要分為兩大項目,一個是伺服器運作的整體設定 (Global) 一個是 IP 設定模式 (動態或固定), 每個項目的設定值大概有底下這幾項:
假設你的 dhcpd 只管理一個區段的區網,那麼除了 IP 之外的許多網路參數就可以放在整體設定的區域中,這包括有租約期限、DNS 主機的 IP 位址、路由器的 IP 位址還有動態 DNS (DDNS) 更新的類型等等。當固定 IP 及動態 IP 內沒有規範到某些設定時,則以整體設定值為準。這些參數的設定名稱為:
由於 dhcpd 主要是針對區域網路來給予 IP 參數的,因此在設定 IP 之前,我們得要指定一個區網才行。 指定區網的方式使用如下的參數:
subnet NETWORK_IP netmask NETMASK_IP { ... }我們知道區網要給予 network / netmask IP 這兩個參數才行,例如之前談過的: 192.168.100.0 / 255.255.255.0 這樣的設定值。 上頭設定值當中, subnet 與 netmask 是關鍵字,而大寫部分就填上你的區網參數囉。那在括號內還有什麼參數需要設定的? 那就是到底 IP 是固定的還是動態的設定啊:
假設我的環境當中,Linux 主機除了 NAT 伺服器之外還得要負責其他伺服器,例如郵件伺服器的支援。 而在後端區域網路中則想要提供 DHCP 的服務。整個硬體配置的情況就如同第三章的圖 3.2-1所示的內部獨立區網 (centos.vbird 網域)。 需要注意的是,在圖中 Linux Router 有兩塊介面,其中 eth1 對內而 eth0 對外,至於其他的網路參數設計為:
那我的設定檔就會像底下這個樣子了:
[root@www ~]# vim /etc/dhcp/dhcpd.conf # 1. 整體的環境設定 ddns-update-style none; <==不要更新 DDNS 的設定 ignore client-updates; <==忽略用戶端的 DNS 更新功能 default-lease-time 259200; <==預設租約為 3 天 max-lease-time 518400; <==最大租約為 6 天 option routers 192.168.100.254; <==這就是預設路由 option domain-name "centos.vbird"; <==給予一個領域名稱 option domain-name-servers 168.95.1.1, 139.175.10.20; # 上面是 DNS 的 IP 設定,這個設定值會修改用戶端的 /etc/resolv.conf 檔案內容 # 2. 關於動態分配的 IP subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.101 192.168.100.200; <==分配的 IP 範圍 # 3. 關於固定的 IP 啊! host win7 { hardware ethernet 08:00:27:11:EB:C2; <==用戶端網卡 MAC fixed-address 192.168.100.30; <==給予固定的 IP } } # 相關的設定參數意義,請查詢前一小節的介紹,或者 man dhcpd.conf
夠簡單吧!這樣就設定好了!你可以複製上頭的資料然後修改一下,讓裡頭的 IP 參數符合你的環境, 就能夠設定好你的 DHCP 伺服器了。接下來理論上你就能夠啟動 dhcp 了。不過,在某些早期的 Linux distribution 上面, 當你的 Linux 主機具有多個介面時,你的一個設定可能會讓多個介面同時來監聽,那就可能會發生錯誤了。
舉例來說,我們現在的設定是 192.168.100.0/24 這個在 eth1 上頭的網域,假設你還有一個介面 eth2 在 192.168.2.0/24 好了, 那萬一你的 DHCP 同時監聽兩塊介面的話,想一想,如果 192.168.2.0/24 網域的用戶端發送出 dhcp 封包的要求時, 他會取得什麼 IP ?當然是 192.168.100.X !所以囉,我們就得要針對 dhcpd 這個執行檔設定他監聽的介面, 而不是針對所有的介面都監聽啊!你說是吧!^_^!那如何處理呢?在 CentOS (Red Hat 系統) 可以這樣做:
[root@www ~]# vim /etc/sysconfig/dhcpd DHCPDARGS="eth0"
不過這個動作在 CentOS 5.x 以後的版本上面已經不需要了,因為新版本的 dhcp 會主動的分析伺服器的網段與實際的 dhcpd.conf 設定, 如果兩者無法吻合,就會有錯誤提示,人性化多了。 ^_^!接下來我們可以開始啟動 dhcp 試看看囉!
開始來啟動 dhcp 吧!在啟動前你得要注意幾件事情喔:
另外你要注意的是:dhcpd 使用的埠口是 port 67 ,並且啟動的結果會記錄在 /var/log/messages 檔案內,你最好能去觀察一下 /var/log/messages 所顯示的 dhcpd 相關資訊才好。
# 1. 啟動後觀察一下埠口的變化: [root@www ~]# /etc/init.d/dhcpd start [root@www ~]# chkconfig dhcpd on [root@www ~]# netstat -tlunp | grep dhcp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name udp 0 0 0.0.0.0:67 0.0.0.0:* 1581/dhcpd # 2. 固定去看看登錄檔的輸出資訊 [root@www ~]# tail -n 30 /var/log/messages Jul 27 01:51:24 www dhcpd: Internet Systems Consortium DHCP Server 4.1.1-P1 Jul 27 01:51:24 www dhcpd: Copyright 2004-2010 Internet Systems Consortium. Jul 27 01:51:24 www dhcpd: All rights reserved. Jul 27 01:51:24 www dhcpd: For info, please visit https://www.isc.org/software/dhcp/ Jul 27 01:51:24 www dhcpd: WARNING: Host declarations are global. They are not limited to the scope you declared them in. Jul 27 01:51:24 www dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file Jul 27 01:51:24 www dhcpd: Wrote 0 deleted host decls to leases file. Jul 27 01:51:24 www dhcpd: Wrote 0 new dynamic host decls to leases file. Jul 27 01:51:24 www dhcpd: Wrote 0 leases to leases file. Jul 27 01:51:24 www dhcpd: Listening on LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24 Jul 27 01:51:24 www dhcpd: Sending on LPF/eth1/08:00:27:2a:30:14/192.168.100.0/24 ....(以下省略)....
看到這些資料就是成功的象徵啦!尤其是上述有特殊字體的部分。恭喜你啊!真是『福氣啦!』不過, 萬一你看到的登錄檔是類似底下的模樣呢?
Jul 27 01:56:30 www dhcpd: /etc/dhcp/dhcpd.conf line 7: unknown option dhcp.domain-name-server Jul 27 01:56:30 www dhcpd: option domain-name-server#011168. Jul 27 01:56:30 www dhcpd: ^ Jul 27 01:56:30 www dhcpd: /etc/dhcp/dhcpd.conf line 9: Expecting netmask Jul 27 01:56:30 www dhcpd: subnet 192.168.100.0 network Jul 27 01:56:30 www dhcpd: ^ Jul 27 01:56:30 www dhcpd: Configuration file errors encountered -- exiting
上述的資料表示在第 7, 9 行恐怕有點設定錯誤,設定錯誤的地方在行號底下還有指數符號 (^) 特別標註出來! 由上面的情況來看,第 7 行的地方應該是 domain-name-servers 忘了加 s 了,而第 9 行則是參數下錯, 應該是 netmask 而非 network !這樣瞭解乎?
如果你有仔細的瞧過第二章的網路基礎的話,那麼應該還會記得那個 /etc/hosts (第四章 4.4.1) 會影響內部電腦在連線階段的等待時間吧?那麼我現在使用 DHCP 之後,糟糕!我怎麼知道哪一部 PC 連上我的主機,那要怎麼填寫 /etc/hosts 的內容呢?這真是太簡單了!就將所有可能的電腦 IP 都加進去該檔案呀! ^_^ !以鳥哥為例,在這個例子中,鳥哥的分配的 IP 至少有 192.168.100.30, 192.168.100.101 ~ 192.168.100.200 ,所以 /etc/hosts 可以寫成:
[root@www ~]# vim /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.100.254 vbird-server 192.168.100.30 win7 192.168.100.101 dynamic-101 192.168.100.102 dynamic-102 ....(中間省略).... 192.168.100.200 dynamic-200
這樣一來,所有可能連進來的 IP 都已經有紀錄了,哈哈!當然沒有什麼大問題囉! ^_^!不過, 更好的解決方案則是架設內部的 DNS 伺服器,這樣一來,內部的其他 Linux 伺服器也不必更改 /etc/hosts 就能夠取得每部主機的 IP 與主機名稱對應,那樣就更加妥當啦!
DHCP 的用戶端可以是 Windows 也可以是 Linux 呢!鳥哥的網域內使用三部電腦,就如圖 3.2-1 所示的那樣。 Linux 與 Windows XP 的設定方式已經分別在第四章與第三章談過了,底下就稍微介紹過而已。至於圖示的部分, 我們主要是以 Windows 7 來做介紹囉。
Linux 的網路參數設定還記得吧?不記得的話就得要打屁股了!在第四章 (4.2.2) 我們談過自動取得 IP 的方式,設定真的很簡單:
[root@clientlinux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=dhcp <==就是他!指定這一個就對了! [root@clientlinux ~]# /etc/init.d/network restart
同時記得要拿掉預設路由的設定喔!改完之後,就將我們的整個網路重新啟動即可 (不要使用 ifdown 與 ifup ,因為還有預設路由要設定!)。請注意,如果你是在遠端進行這個動作, 你的連線『肯定會掛掉!』,因為網路卡被你關了嘛!呵呵!所以請在本機前面才進行喔!如果執行的結果有找到正確的 DHCP 主機,那麼幾個檔案可能會被更動喔:
# 1. DNS 的 IP 會被更動呢!查閱一下 resolv.conf 先: [root@clientlinux ~]# cat /etc/resolv.conf search centos.vbird <==還記得設定過 domain-name 否? domain centos.vbird <==還記得設定過 domain-name 否? nameserver 168.95.1.1 <==這就是我們在 dhcpd.conf內的設定值 nameserver 139.175.10.20 # 2. 觀察一下路由啦! [root@clientlinux ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.100.254 0.0.0.0 UG 0 0 0 eth0 # 嗯!沒錯!路由也被正確的捉到了!OK的啦! # 3. 察看一下用戶端的指令吧! [root@clientlinux ~]# netstat -tlunp | grep dhc Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:68 0.0.0.0:* 1694/dhclient # 你沒看錯!確實是有個小程式在監測 DHCP 的連線狀態吶! # 4. 看一看用戶端租約所記載的資訊吧! [root@clientlinux ~]# cat /var/lib/dhclient/dhclient* lease { interface "eth0"; fixed-address 192.168.100.101; <==取得的 IP 呦! option subnet-mask 255.255.255.0; option routers 192.168.100.254; option dhcp-lease-time 259200; option dhcp-message-type 5; option domain-name-servers 168.95.1.1,139.175.10.20; option dhcp-server-identifier 192.168.100.254; option domain-name "centos.vbird"; renew 4 2011/07/28 05:01:24; <==下一次預計更新 (renew) 的時間點 rebind 5 2011/07/29 09:06:36; expire 5 2011/07/29 18:06:36; } # 這個檔案會記錄該介面卡所曾經要求過的 DHCP 資訊喔!重要! # 有沒有看出來,他幾乎就與你設定的 /etc/dhcp/dhcpd.conf 類似? ^_^
有沒有發現其實你的用戶端取得的資料都被記載在 /var/lib/dhclient/dhclient*-eth0.leases 裡頭啊? 如果你有多張網卡,那麼每張網卡自己的 DHCP 要求就會被寫入到不同檔名的檔案當中去! 觀察該檔案就知道你的資料是如何囉!這可也是挺重要的呦!
例題:
在文獻中談到,如果區網內有多個 DHCP 伺服器 (假設有 DHCP1, DHCP2),那麼每次用戶端對整個物理網路區段廣播時,DHCP 伺服器將是先搶先贏的局面。
但是若第一次取得 DHCP1 伺服器的 IP 後,未來重新啟動網路,都只會取得 DHCP1 的網路參數,這是為什麼?
答:
看到上述的 dhclient-eth0.leases 用戶端檔案了嗎?因為你的主機想要取得上次取得的網路參數,因此將會對 DHCP1 要求網路參數。
如果你想要使用先搶先贏的方式來取得 IP ,或者想要使用 DHCP2 來取得 IP ,那麼得要修訂或者刪除 dhclient-eth0.leases 才行。
|
在 Windows 底下設定 DHCP 協定以取得 IP 實在是很簡單喔!例如,你可以到第三章的 3.2.2 小節去瞧瞧如何設定的擷取圖示。 我們這裡以 Windows 7 作為介紹好了。你可以依據『開始』-->『控制台』-->『檢視網路狀態及工作』 -->『變更介面卡設定』,在出現的圖示中,選擇屬於你的相關網卡,然後連擊兩下之後,就開始底下的設定程序:
C:\Users\win7> ipconfig /all ....(前面省略).... 乙太網路卡 區域連線: 連線特定 DNS 尾碼 . . . . . . . . : centos.vbird 描述 . . . . . . . . . . . . . . .: Intel(R) PRO/1000 MT Desktop Adapter 實體位址 . . . . . . . . . . . . .: 08-00-27-11-EB-C2 DHCP 已啟用 . . . . . . . . . . . : 是 自動設定啟用 . . . . . . . . . . .: 是 連結-本機 IPv6 位址 . . . . . . . : fe80::ec92:b907:bc2a:a5fa%11(偏好選項) IPv4 位址 . . . . . . . . . . . . : 192.168.100.30(偏好選項) <==這是取得的IP 子網路遮罩 . . . . . . . . . . . .: 255.255.255.0 租用取得 . . . . . . . . . . . . .: 2011年7月27日 上午 11:59:18 <==這是租約 租用到期 . . . . . . . . . . . . .: 2011年7月30日 上午 11:59:18 預設閘道 . . . . . . . . . . . . .: 192.168.100.254 DHCP 伺服器 . . . . . . . . . . . : 192.168.100.254 <==這一部 DHCP 伺服器 DNS 伺服器 . . . . . . . . . . . .: 168.95.1.1 <==取得的 DNS 139.175.10.20 NetBIOS over Tcpip . . . . . . . .: 啟用 C:\Users\win7> ipconfig /renew # 這樣可以立即要求更新 IP 資訊喔!這樣就 OK 的啦!簡單吧!
如果你要管理的是幾十部甚至是幾百部的電腦時,你總是希望能夠根據座位來進行 IP 的給予吧?因此,固定 IP 配合 MAC 就顯的很重要啦!那麼如何取得每部主機的 IP 呢?還有,你怎麼查詢到相關的租約呢?以及,如果你還想要進行遠端開機, 幫使用者在固定的時間就開機呢?那就來看看底下的其他用途吧!
用戶端會主動的紀錄租約資訊,那伺服器端更不能忘記記錄囉!伺服器端是記錄在這個地方:
[root@www ~]# cat /var/lib/dhcpd/dhcpd.leases lease 192.168.100.101 { starts 2 2011/07/26 18:06:36; <==租約開始日期 ends 5 2011/07/29 18:06:36; <==租約結束日期 tstp 5 2011/07/29 18:06:36; cltt 2 2011/07/26 18:06:36; binding state active; next binding state free; hardware ethernet 08:00:27:34:4e:44; <==客戶端網卡 }
從這個檔案裡面我們就知道有多少用戶端已經向我們申請了 DHCP 的 IP 使用了呢!很容易瞭解吧!
想一想,如果你有一百台電腦要管理,每部電腦都希望是固定 IP 的情況下,那你要如何處置? 很簡單,透過 DHCP 的 fixed-address 就行啦!但是,這一百台電腦的 MAC 如何取得?你要怎麼改啦? 難道每部電腦都去抄寫,然後再回來設定 dhcpd.conf 嗎?這也太可怕了吧?既然每部電腦最終都得要開機, 那麼你在開機之後,利用手動的方法來設定好每部主機的 IP 後,在根據底下的腳本來處理好你的 dhcpd.conf 囉!
[root@www ~]# vim setup_dhcpd.conf
#!/bin/bash
read -p "Do you finished the IP's settings in every client (y/n)? " yn
read -p "How many PC's in this class (ex> 60)? " num
if [ "$yn" = "y" ]; then
for site in $(seq 1 ${num})
do
siteip="192.168.100.${site}"
allip="$allip $siteip"
ping -c 1 -w 1 $siteip > /dev/null 2>&1
if [ "$?" == "0" ]; then
okip="$okip $siteip"
else
errorip="$errorip $siteip"
echo "$siteip is DOWN"
fi
done
[ -f dhcpd.conf ] && rm dhcpd.conf
for site in $allip
do
pcname=pc$(echo $site | cut -d '.' -f 4)
mac=$(arp -n | grep "$site " | awk '{print $3}')
echo " host $pcname {"
echo " hardware ethernet ${mac};"
echo " fixed-address ${site};"
echo " }"
echo " host $pcname {" >> dhcpd.conf
echo " hardware ethernet ${mac};" >> dhcpd.conf
echo " fixed-address ${site};" >> dhcpd.conf
echo " }" >> dhcpd.conf
done
fi
echo "You can use dhcpd.conf (this directory) to modified your /etc/dhcp/dhcpd.conf"
echo "Finished."
這個腳本的想法很簡單,如果你管理的電腦都是 Linux 的話,那麼先開機後使用『 ifconfig eth0 YOURIP 』 來設定對應的 IP ,在鳥哥這個例子中,我使用的是 192.168.100.X/24 這個區段,此時 IP 就設定好了! 然後在透過上面的腳本跑一次,每部電腦的 MAC 與 IP 對應就順利的寫入 dhcpd.conf 囉! 然後你在將它貼上 /etc/dhcp/dhcpd.conf 即可!如果你管理的電腦是 Windows 的話, 那使用文字介面下達『 netsh interface ip set address xxx 』之類的指令來修訂囉!
既然已經知道用戶端的 MAC 位址了,如果用戶端的主機符合一些電源標準, 並且該用戶端主機所使用之網路卡暨主機板支援網路喚醒的功能時,我們就可以透過網路來讓用戶端電腦開機了。 如果你有一部主機想要讓他可以透過網路來啟動時,你必須要在這部用戶端電腦上進行:
接下來請到永遠開著的主機 DHCP 伺服器上面 (其實只要任何一部 Linux 主機均可!) ,安裝 net-tools 這個軟體後, 就會取得 ether-wake 這個指令,這就是網路喚醒的主要功能!那該如何使用這個指令呢?假設用戶端主機的 MAC 為 11:22:33:44:55:66 並且與我的伺服器 eth1 相連接好了,那麼你想要讓這部主機被喚醒,就這樣做吧:
[root@www ~]# ether-wake -i eth1 11:22:33:44:55:66 # 更多功能可以這樣查閱喔: [root@www ~]# ether-wake -u
然後你就會發現,哈哈!那部用戶端主機被啟動了!以後如果你要連到區域網路內的話, 只要能夠連上你的防火牆主機,然後透過這個 ether-wake 軟體,就能夠讓你區域網路內的主機啟動了, 控管上面就更加方便的啦!你說是吧! ^_^
我們知道區域網路內如果很多 Linux 伺服器時,你得要將 private IP 加入到每部主機的 /etc/hosts 裡面, 這樣在連線階段的等待時間才不會有逾時或者是等待太久的問題。問題是,如果電腦數量太大,又有很多測試機時, 這時你得要常常去更新維護那些重灌過的機器的 /etc/hosts ,煩不煩吶?
此時在區網內架設一部 DNS 伺服器負責主機名稱解析就很重要!因此既然已經有 DNS 伺服器幫忙進行主機名稱的解析,那你根本不需要更動 /etc/hosts !未來的新機器或者是新灌的電腦也不需要改寫任何網路參數,這樣維護會輕鬆很多。 因此,一個好的區網內,理論上,我們應該在 DHCP 伺服器主機上面在安裝一個 DNS 伺服器,提供內部電腦的名稱解析為宜。 相關的設定就請參考第十九章 DNS 的介紹囉。
鳥哥在崑山資訊傳播系 (http://www.dic.ksu.edu.tw) 負責五間電腦教室的維護,每間電腦教室內部的 giga switch 是低階的有網管功能的機器!有網管功能機器的設定資訊比較多, switch 也能夠進行封包異常的偵測與抵擋。問題是,如果抵擋的行為『太超過』時,也可能造成許多問題。
鳥哥管理的電腦教室在重新啟動網路取得 DHCP 時,都會等待幾乎達 30 秒,雖然最終是成功的,但是等這麼久呢! 取得 IP 之後,網路速度卻又是正常的,一切沒問題~就是教導網路參數設定時,學生都會哇哇叫!以為失敗了, 有的等了將近一分鐘才告知取得 IP 且為正常...
後來問了有經驗的計中的羅組長,才發現可能是 switch 的問題。大多在設定位於『L2 Features』-->『Spanning Tree』-->『STP Port Settings』的子項目之類的字眼,將 STP 之類的埠口都設定為關閉 (Disabled) 看看, 鳥哥做完這個設定後,DHCP 的取得就順暢了!連帶的網路開機功能也就沒有問題~這部份也提供給大家參考呦!