伺服器架設篇 - CentOS 6.x

第十二章、網路參數控管者: DHCP 伺服器

Dynamic Host Configuration Protocol 主機的設定問題(類似 IP 分享器的後端功能)

最近更新時間: 2011/07/27

想像兩種情況:(1)如果你在工作單位使用的是筆記型電腦,而且常常要帶著你的筆記型電腦到處跑, 那麼由第四章、連上 Internet 的說明中會發現,哇! 我的網路卡參數要常常修改啊!而且,每到一個新的地方,就得問清楚該地的網路參數才行!真是麻煩。 (2)你的公司常常有訪客或貴客來臨,因為他們也帶來筆電,所以也得常常跑來找你問網路參數才能設定他的電腦。 哇!這兩種情況都會讓你想哭哭吧?這個時候,動態主機設定協定 (DHCP) 可就大大的派上用場啦!DHCP 這個服務可以自動的分配 IP 與相關的網路參數給用戶端,來提供用戶端自動以伺服器提供的參數來設定他們的網路。 如此一來,使用者只要將自己的筆電設定好經由 DHCP 協定來取得網路參數後,一插上網路線,呵呵!馬上就可以享受 Internet 的服務啦!很方便吧!所以得來瞧一瞧這個好用的協定喔!

12.1 DHCP 運作的原理

在正式的進入 DHCP (Dynamic Host Configuration Protocol) 伺服器設定之前,我們先來認識一下 DHCP 這個協定吧!還有,需要瞭解的是,我們是否『一定』得設定 DHCP 這個伺服器呢?這裡都需要釐清一下概念喔!

12.1.1 DHCP 伺服器的用途

在開始 DHCP 的說明之前,我們先來複習一下之前在第二章網路基礎裡面提到的幾個網路參數吧! 要設定好一個網路的環境,使電腦可以順利的連上 Internet ,那麼你的電腦裡面一定要有底下幾個網路的參數才行,分別是:

  • IP, netmask, network, broadcast, gateway, DNS IP

其中,那個 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. 藉由一部主機來自動的分配所有的網路參數給宿舍內的任何一部電腦?

這三種解決方案所需要的時間都不相同,如果你選擇的是(1),那麼鳥哥個人認為,你不是工作狂就是瘋掉了, 因為所要花費的時間與你所得的薪水與付出的心力是完全不成比例的。如果選擇是(2),那麼很可能你會被掛上獨裁者、 沒良心的管理員的稱號!如果是選擇(3)呢?恭喜你!這個方案的管理時間花費最短,也是最不麻煩的作法啦!

呵呵!知道鳥哥要說些什麼了嗎?是的!這個 DHCP (Dynamic Host Configuration Protocol) 伺服器最主要的工作,就是在進行上面的第三個方案,也就是自動的將網路參數正確的分配給網域中的每部電腦, 讓用戶端的電腦可以在開機的時候就立即自動的設定好網路的參數值,這些參數值可以包括了 IP、netmask、network、gateway 與 DNS 的位址等等。如此一來,身為管理員的你,只要注意到這一部提供網路參數的主機有沒有掛掉就好了, 其他同學們的個人電腦,哈!你想都不必想要怎麼去幫忙!因為 DHCP 主機已經完全都幫你搞定啦! ^_^! 阿!當管理員最大的幸福就是可以喝喝茶、聊聊天就能控管好一切的網路問題呢!

12.1.2 DHCP 協定的運作方式

你必需要知道的是,DHCP 通常是用於區域網路內的一個通訊協定,他主要藉由用戶端傳送廣播封包給整個物理網段內的所有主機, 若區域網路內有 DHCP 伺服器時,才會回應用戶端的 IP 參數要求。所以囉,DHCP 伺服器與用戶端是應該要在同一個物理網段內的。 至於整個 DHCP 封包在伺服器與用戶端的來來回回情況有點像底下這樣:(註1)

DHCP 封包在伺服器與用戶端的傳遞情況
圖 12.1-1、

戶端取得 IP 參數的程序可以簡化如下:

  1. 用戶端:利用廣播封包發送搜索 DHCP 伺服器的封包:

    若用戶端網路設定使用 DHCP 協定取得 IP (在 Windows 內為『自動取得 IP』),則當用戶端開機或者是重新啟動網路卡時, 用戶端主機會發送出搜尋 DHCP 伺服器的 UDP 封包給所有物理網段內的電腦。此封包的目標 IP 會是 255.255.255.255, 所以一般主機接收到這個封包後會直接予以丟棄,但若區域網路內有 DHCP 伺服器時,則會開始進行後續行為。

  2. 伺服器端:提供用戶端網路相關的租約以供選擇:

    DHCP 伺服器在接收到這個用戶端的要求後,會針對這個用戶端的硬體位址 (MAC) 與本身的設定資料來進行下列工作:

    • 到伺服器的登錄檔中尋找該用戶之前是否曾經用過某個 IP ,若有且該 IP 目前無人使用,則提供此 IP 給用戶端;
    • 若設定檔針對該 MAC 提供額外的固定 IP (static IP) 時,則提供該固定 IP 給用戶端;
    • 若不符合上述兩個條件,則隨機取用目前沒有被使用的 IP 參數給用戶端,並記錄下來。

    總之,伺服器端會針對用戶端的要求提供一組網路參數租約給用戶端選擇,由於此時用戶端尚未有 IP ,因此伺服器端回應的封包資訊中, 主要是針對用戶端的 MAC 來給予回應。此時伺服器端會保留這個租約然後開始等待用戶端的回應。

  3. 用戶端:決定選擇的 DHCP 伺服器提供的網路參數租約並回報伺服器:

    由於區域網路內可能並非僅有一部 DHCP 伺服器,但用戶端僅能接受一組網路參數的租約。 因此用戶端必需要選擇是否要認可該伺服器提供的相關網路參數的租約。當決定好使用此伺服器的網路參數租約後, 用戶端便開始使用這組網路參數來設定自己的網路環境。此外,用戶端也會發送一個廣播封包給所有物理網段內的主機, 告知已經接受該伺服器的租約。此時若有第二台以上的 DHCP 伺服器,則這些沒有被接受的伺服器會收回該 IP 租約。至於被接受的 DHCP 伺服器會繼續進行底下的動作。

  4. 伺服器端:記錄該次租約行為並回報用戶端已確認的回應封包資訊:

    當伺服器端收到用戶端的確認選擇後,伺服器會回傳確認的回應封包,並且告知用戶端這個網路參數租約的期限, 並且開始租約計時喔!那麼該次租約何時會到期而被解約 (真可怕的字眼) ?你可以這樣想:

    • 用戶端離線:不論是關閉網路介面 (ifdown)、重新開機 (reboot)、關機 (shutdown) 等行為,皆算是離線狀態,這個時候 Server 端就會將該 IP 回收,並放到 Server 自己的備用區中,等待未來的使用;

    • 用戶端租約到期:前面提到 DHCP server 端發放的 IP 有使用的期限,用戶端使用這個 IP 到達期限規定的時間,而且沒有重新提出 DHCP 的申請時,就需要將 IP 繳回去!這個時候就會造成斷線。但用戶也可以再向 DHCP 伺服器要求再次分配 IP 囉。

以上就是 DHCP 這個協定在 Server 端與 Client 端的運作狀態,由上面這個運作狀態來看,我們可以曉得,只要 Server 端設定沒有問題,加上 Server 與 Client 在硬體連線上面確定是 OK 的,那麼 Client 就可以直接藉由 Server 來取得上網的網路參數,當然啦,只要我們這些管理員能夠好好的、正確的管理好我們的 DHCP 伺服器, 嘿嘿!那麼上網的設定自然就變成一件很簡單的事情啦!不過,關於上述的流程還是有一些需要額外說明的啦:

    DHCP 伺服器給予用戶端的 IP 參數為固定或動態:

在上面的步驟裡面,注意到第二步驟了嗎?就是伺服器會去比較用戶端的 MAC 硬體位址,並判斷該 MAC 是否需要給予一個固定的 IP 呢!所以啦,我們可以設定 DHCP 伺服器給予用戶端的 IP 參數主要有兩種:

  • 固定 (Static) IP:

    只要那個用戶端電腦的網路卡不換掉,那麼 MAC 肯定就不會改變,由於 DHCP 可以根據 MAC 來給予固定的 IP 參數租約,所以該電腦每次都能以一個固定的 IP 連上 Internet !呵呵! 這種情況比較適合當這部用戶端電腦需要用來做為提供區域內的一些網路服務的主機之用 (所以 IP 要固定)。那麼如何在 Linux 上面知道網路卡的 MAC 呢?很簡單啦!有很多的方式,最簡單的方式就是使用 ifconfig 及 arp 來進行:
    # 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
    

  • 動態 (dynamic) IP:

    Client 端每次連上 DHCP 伺服器所取得的 IP 都不是固定的!都直接經由 DHCP 所隨機由尚未被使用的 IP 中提供!

除非你的區域網路內的電腦有可能用來做為主機之用,所以必需要設定成為固定 IP ,否則使用動態 IP 的設定比較簡單,而且使用上面具有較佳的彈性。怎麼說呢?假如你是一個 ISP 好了,而你只申請到 150 個 IP 來做為你的客戶連線之用。那麼你是否真的只能邀集到 150 的使用者?呵呵!當然不囉!我可以邀集 200 個使用者以上呢!

為什麼?這樣想好了,我今天開了一家餐館,裡面只有 20 個座位,那麼是否我一餐只能賣給 20 個人呢?當然不是啦!因為客人是人來人往的,有人先吃有人後吃,所以同樣是 20 個座位,但是可以有 40 個人來吃我的簡餐,因為來的時間不一樣嘛!瞭解了嗎?呵呵!對啦!你這個 ISP 雖然只有 150 個 IP 可以發放,但是因為你的使用者並非 24 小時都掛在線上的,所以你可以將這 150 個 IP 做良好的分配,讓 200 個人來『輪流使用』這 150 個 IP 哩!

Tips 鳥哥 其實 IP 只有 Public IP 與 Private IP 兩種,中文翻譯成『公共 IP』與『私有 IP』這兩個, 至於其他所謂的『靜態 IP』、『實體 IP』、『虛擬 IP』、『浮動式 IP』等等,都是藉由一些 IP 取得的方式來分類的, 關於 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 應該是可以一直使用下去的!

Tips 鳥哥 一般來說,假設租約期限是 T 小時,那麼用戶端在 0.5T 會主動向 DHCP 伺服器發出重新要求網路參數的封包。 如果這次封包要求沒有成功,那麼在 0.875T 後還會再次的發送封包一次。正因如此,所以伺服器端會啟動 port 67 監聽用戶要求,而用戶會啟動 port 68 主動向伺服器要求哩!鳥哥覺得這是很特殊的一件事呢!
    多部 DHCP 伺服器在同一物理網段的情況

或許你曾經發現過一件事情,那就是當我的網域裡面有兩部以上的 DHCP 伺服器時, 到底哪一部伺服器會提供我的這部用戶端電腦所發出的 DHCP 要求?呵呵!很抱歉,俺也不曉得! 因為在網路上面,很多時候都是『先搶先贏』的, DHCP 的回應也是如此!當 Server1 先回應時,你使用的就是 Server1 所提供的網路參數內容,如果是 Server2 先回應,你就是使用 Server2 的參數來設定你的用戶端 PC !不過,前提之下當然是這些電腦的『物理連線』都是在一起的啊!

因為這個特色的關係,所以當你在練習 DHCP 伺服器的設定之前, 不要在已經正常運作的區網下測試,否則會很慘。舉個鳥哥的例子來說好了,某一次其他系的研究生在測試網路安全時, 在原有的區網上面放了一部 IP 分享器,結果你猜怎麼著?整棟大樓的網路都不通了!因為那時整棟大樓的網路是串接在一起的, 而我們學校是使用 DHCP 讓用戶端上網。由於 IP 分享器的設定並不能連上 Internet ,哇!大家都無法上網了啦! 那你曉得了嗎?不要隨便測試啦這個 DHCP 伺服器!

12.1.3 何時需要架設 DHCP 伺服器

既然 DHCP 的好處是『免用戶端設定』,而且對於行動裝置的上網方面非常的方便!那麼是否代表你就得要架設一部 DHCP 呢?那可不一定!接下來要告知大家的是幾個概念性的問題, 你倒不一定『必需』遵守底下的一些概念呢!反正,自己的網域自己『爽』就好啦!

    使用 DHCP 的幾個時機

在某些情況之下,倒是強烈的建議架設 DHCP 主機的!什麼情況呢?例如:

  • 具有相當多行動裝置的場合:
    例如你的公司內部很多筆記型電腦使用的場合!因為這種筆電本身就是移動性的裝置, 如果每到一個地方都要去問人家『喂!你這邊的網路參數是什麼?』還得要擔心是否會跟人家的 IP 相衝突等等的問題!這個時候,DHCP 可就是你的救星囉!

  • 區域內電腦數量相當的多時:
    另外一個情況就是你所負責的網域內電腦數量相當龐大時, 大到你沒有辦法一個一個的進行說明來設定他們自己的網路參數,這個時候為了省麻煩,還是架設 DHCP 來的方便吶!況且,維護一部你熟悉的 DHCP 主機,要比造訪幾十個不懂電腦的人要簡單的多哩!^_^

    不建議使用 DHCP 主機的時機

雖然 DHCP 有很多好處,但是你有沒有發現一個步驟怪怪的呀!回頭看一下那個步驟一, 用戶端在開機的時候會主動的發送訊息給網域上的所有機器,這個時候,如果網域上就是沒有 DHCP 主機呢?很抱歉,那麼你的這部用戶端電腦,『仍然會持續的發送訊息!』 真正的時間與次數不曉得會有多久,不過,肯定會超過 30 秒以上, 甚至可以達到一分鐘以上!哇!那麼這段時間你能幹嘛?呵呵!除了等、還是等! 所以囉,如果電腦數不多,還是使用手動的方式來設定一下就好了!方便嘛!

  • 在你網域內的電腦,有很多機器其實是做為主機的用途,很少用戶需求,那麼似乎就沒有必要架設 DHCP ;
  • 更極端的情況是,像一般家裡,只有 3 ~ 4 部電腦,這個時候,架設 DHCP 只能拿來練練功力,事實上,並沒有多大的效益;
  • 當你管理的網域當中,大多網路卡都屬於老舊的型號,並不支援 DHCP 的協定時;
  • 很多使用者的資訊知識都很高,那麼也沒有需要架設 DHCP 啦。


如前所述,上面的都是概念性的說法,事實上,一件事情的解決之道是有很多的方案的, 沒有所謂的『完全正確』的方案,只有『相對可行、並且符合經濟效益與功能』的方案! 所以囉,架設任何網站之前,請先多評估評估吶!

12.2 DHCP 伺服器端的設定

事實上,目前市面上的 IP 分享器已經便宜到爆了!而 IP 分享器本身就含有 DHCP 的功能。 所以如果你只是想要單純的使用 DHCP 在你的區域網路當中而已,那麼建議你直接購買一部 IP 分享器來使用即可, 因為至少它很省電。如果你還有其他考量的話,才來架設 DHCP 吧!底下我們以一個簡單的範例來架設 DHCP 先。

12.2.1 所需軟體與檔案結構

DHCP 的軟體需求很簡單,就是只要伺服器端軟體即可,在 CentOS 6.x 上面,這個軟體的名稱就是 dhcp 囉!如果是預設安裝,那麼這個軟體是不會安裝的,請自行使用 yum 去裝好這個軟體吧!安裝完畢之後, 你可以使用『 rpm -ql dhcp 』來看看這個軟體提供了哪些檔案,基本上,比較重要的檔案資料如下:

  • /etc/dhcp/dhcpd.conf
    這個就是 dhcp 伺服器的主要設定檔咯!在某些 Linux 版本上頭這個檔案可能不存在,所以如果你確定有安裝 dhcp 軟體卻找不到這個檔案時,請手動自行建立它即可。
    Tips 鳥哥 其實 dhcp 軟體在釋出的時候都會附上一個範例檔案,你可以使用『 rpm -ql dhcp 』來查詢到 dhcpd.conf.sample 這個範例檔案,然後將該檔案複製成為 /etc/dhcp/dhcpd.conf 後,再手動去修改即可,這樣設定比較容易啦!
  • /usr/sbin/dhcpd
    啟動整個 dhcp daemon 的執行檔啊!其實最詳細的執行方式應該要使用『 man dhcpd 』來查閱一番的呢!^_^

  • /var/lib/dhcp/dhcpd.leases
    這檔案頗有趣的!我們前面原理部分不是有提到『租約』嗎?DHCP 伺服器端與用戶端租約建立的啟始與到期日就是記錄在這個檔案當中的咯!

就跟你說很簡單吧!整個軟體資料也不過才如此而已呢!

12.2.2 主要設定檔 /etc/dhcp/dhcpd.conf 的語法

在 CentOS 5.x 以前,這個檔案都被放置到 /etc/dhcpd.conf 的,新版的才放置於此處。其實 DHCP 的設定很簡單啊,只要將 dhcpd.conf 設定好就可以啟動了。不過編輯這個檔案時你必須要留意底下的規範:

  • 『 # 』為註解符號;
  • 除了右括號 ")" 後面之外,其他的每一行設定最後都要以『 ; 』做為結尾!重要!
  • 設定項目語法主要為:『 <參數代號> <設定內容> 』,例如:
    default-lease-time 259200;
  • 某些設定項目必須以 option 來設定,基本方式為『 option <參數代碼> <設定內容> 』例如:
    option domain-name "your.domain.name";

基本上,我們剛剛前面提過說, DHCP 的 IP 分配可分為給予動態 IP 與固定 IP ,其中又需要瞭解的是, 如果需要設定固定 IP 的話,那麼就必須要知道要設定成固定 IP 的那部電腦的硬體位址 (MAC) 才行,請使用 arp 或 ifconfig 來查知你的介面的 MAC 吧!好了,那麼需要設定的項目有哪些呢? 其實 dhcpd.conf 裡頭的設定主要分為兩大項目,一個是伺服器運作的整體設定 (Global) 一個是 IP 設定模式 (動態或固定), 每個項目的設定值大概有底下這幾項:

    整體設定 (Global)

假設你的 dhcpd 只管理一個區段的區網,那麼除了 IP 之外的許多網路參數就可以放在整體設定的區域中,這包括有租約期限、DNS 主機的 IP 位址、路由器的 IP 位址還有動態 DNS (DDNS) 更新的類型等等。當固定 IP 及動態 IP 內沒有規範到某些設定時,則以整體設定值為準。這些參數的設定名稱為:

  • default-lease-time 時間
    使用者的電腦也能夠要求一段特定長度的租約時間,但若使用者沒有特別要求租約時間的話, 那麼就以此為預設的租約時間。後面的時間參數預設單位為秒;

  • max-lease-time 時間
    與上面的預設租約時間類似,不過,這個設定值是在規範使用者所能要求的最大租約時間。也就是說, 使用者要求的租約時間若超過此設定值,則以此值為準;

  • option domain-name "領域名稱"
    如果你在 /etc/resolv.conf 裡面設定了一個『 search google.com 』的話,這表示當你要搜尋主機名稱時, DNS 系統會主動幫你加上這個領域名稱的意思。

  • option domain-name-servers IP1, IP2
    這個設定參數可以修改用戶端的 /etc/resolv.conf 檔案!就是 nameserver 後面接的那個 DNS IP 囉!特別注意設定參數最末尾為『servers』 (有 s 喔);

  • ddns-update-style 類型
    因為 DHCP 用戶端所取得的 IP 通常是一直變動的,所以某部主機的主機名稱與 IP 的對應就很難處理。此時 DHCP 可以透過 ddns (請參考第十章第十九章 DNS 的說明) 來更新主機名與 IP 的對應。不過我們這裡不談這麼複雜的東西,所以你可以將他設定為 none 喔

  • ignore client-updates
    與上一個設定值較相關,用戶端可以透過 dhcpd 伺服器來更新 DNS 相關的資訊。不過,這裡我們也先不談這個, 因此就將它設定為 ignore (忽略) 了。

  • option routers 路由器的位址
    設定路由器的 IP 所在,記得那個『 routers 』要加 s 才對!

    IP 設定模式 (動態或固定)

由於 dhcpd 主要是針對區域網路來給予 IP 參數的,因此在設定 IP 之前,我們得要指定一個區網才行。 指定區網的方式使用如下的參數:

subnet NETWORK_IP netmask NETMASK_IP { ... }

我們知道區網要給予 network / netmask IP 這兩個參數才行,例如之前談過的: 192.168.100.0 / 255.255.255.0 這樣的設定值。 上頭設定值當中, subnet 與 netmask 是關鍵字,而大寫部分就填上你的區網參數囉。那在括號內還有什麼參數需要設定的? 那就是到底 IP 是固定的還是動態的設定啊:

  • range IP1 IP2:
    在這個區網當中,給予一個連續的 IP 群用來發放成動態 IP 的設定,那個 IP1 IP2 指的是開放的 IP 範圍。 舉例來說,你想要開放 192.168.100.101 到 192.168.100.200 這 100 個 IP 用來作為動態分配,那就是: range 192.168.100.101 192.168.100.200;

  • host 主機名 { ... };
    這個 host 就是指定固定 IP 對應到固定 MAC 的設定值,那個主機名稱可以自己想想再給予即可。 不過在大括號內就得要指定 MAC 與固定的 IP 囉!那這兩個設定值怎麼設定呢?看看底下囉:

    • hardware ethernet 硬體位址
      利用網路卡上面的固定硬體位址來設定,亦即該設定僅針對這個硬體位址有效的意思;

    • fixed-address IP位址
      給予一個固定的 IP 位址的意思。
說再多也沒有什麼用啦!讓我們實際來玩一個案例吧!你就知道該如何處理了。

12.2.3 一個區域網路的 DHCP 伺服器設定案例

假設我的環境當中,Linux 主機除了 NAT 伺服器之外還得要負責其他伺服器,例如郵件伺服器的支援。 而在後端區域網路中則想要提供 DHCP 的服務。整個硬體配置的情況就如同第三章的圖 3.2-1所示的內部獨立區網 (centos.vbird 網域)。 需要注意的是,在圖中 Linux Router 有兩塊介面,其中 eth1 對內而 eth0 對外,至於其他的網路參數設計為:

  • Linux 主機對內的 eth1 的 IP 設定為 192.168.100.254 這個;
  • 內部網段設定為 192.168.100.0/24 這一段,且內部電腦的 router 為 192.168.100.254 ,此外 DNS 主機的 IP 為中華電信的 168.95.1.1 及 Seednet 的 139.175.10.20 這兩個;
  • 我想要讓每個使用者預設租約為 3 天,最長為 6 天;
  • 只想要分配的 IP 只有 192.168.100.101 到 192.168.100.200 這幾個,其他的 IP 則保留下來;
  • 我還有一部主機,他的 MAC 是『 08:00:27:11:EB:C2 』,我要給他的主機名稱為 win7 ,且 IP 為 192.168.100.30 這個 (請對照圖 3.2-1 喔!)。

那我的設定檔就會像底下這個樣子了:

[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 試看看囉!

12.2.4 DHCP 伺服器的啟動與觀察

開始來啟動 dhcp 吧!在啟動前你得要注意幾件事情喔:

  • 你的 Linux 伺服器網路環境已經設定好,例如 eth1 已經是 192.168.100.254;
  • 你的防火牆規則已經處理好,例如:(1)放行內部區網的連線、(2)iptables.rule 的 NAT 服務已經設定妥當;

另外你要注意的是: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 !這樣瞭解乎?

12.2.5 內部主機的 IP 對應

如果你有仔細的瞧過第二章的網路基礎的話,那麼應該還會記得那個 /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 與主機名稱對應,那樣就更加妥當啦!

12.3 DHCP 用戶端的設定

DHCP 的用戶端可以是 Windows 也可以是 Linux 呢!鳥哥的網域內使用三部電腦,就如圖 3.2-1 所示的那樣。 Linux 與 Windows XP 的設定方式已經分別在第四章與第三章談過了,底下就稍微介紹過而已。至於圖示的部分, 我們主要是以 Windows 7 來做介紹囉。

12.3.1 用戶端是 Linux

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 要求就會被寫入到不同檔名的檔案當中去! 觀察該檔案就知道你的資料是如何囉!這可也是挺重要的呦!

Tips 鳥哥 你或許會問說, dhcp 不是都會隨機取得 IP 嗎?那為什麼這部用戶端 clientlinux.centos.vbird 每次都能夠取得相同的固定 IP 呢? 很簡單,因為上頭的 dhclient-eth0.leases 裡面的 fixed-address 指定了想要固定 IP 的選項。如果 DHCP 伺服器的該 IP 沒有被用走,也在規定的 range 設定值內,那就會發放給你這個 IP 了。如果你想要不同的 IP 呢? 那就將你想要的 IP 取代上述的設定值啦!
例題:
在文獻中談到,如果區網內有多個 DHCP 伺服器 (假設有 DHCP1, DHCP2),那麼每次用戶端對整個物理網路區段廣播時,DHCP 伺服器將是先搶先贏的局面。 但是若第一次取得 DHCP1 伺服器的 IP 後,未來重新啟動網路,都只會取得 DHCP1 的網路參數,這是為什麼?
答:
看到上述的 dhclient-eth0.leases 用戶端檔案了嗎?因為你的主機想要取得上次取得的網路參數,因此將會對 DHCP1 要求網路參數。 如果你想要使用先搶先贏的方式來取得 IP ,或者想要使用 DHCP2 來取得 IP ,那麼得要修訂或者刪除 dhclient-eth0.leases 才行。

12.3.2 用戶端是 Windows

在 Windows 底下設定 DHCP 協定以取得 IP 實在是很簡單喔!例如,你可以到第三章的 3.2.2 小節去瞧瞧如何設定的擷取圖示。 我們這裡以 Windows 7 作為介紹好了。你可以依據『開始』-->『控制台』-->『檢視網路狀態及工作』 -->『變更介面卡設定』,在出現的圖示中,選擇屬於你的相關網卡,然後連擊兩下之後,就開始底下的設定程序:

  1. 如上所述,點擊網路卡設定後,會出現如下圖示:

    區域網路的 Windows 7 系統設定 DHCP 的方式
    圖 12.3-1、區域網路的 Windows 7 系統設定 DHCP 的方式

  2. 在圖 12.3-1 的地方按下箭頭所指的『內容』處,就會出現如下畫面囉:

    區域網路的 Windows 7 系統設定 DHCP 的方式
    圖 12.3-2、區域網路的 Windows 7 系統設定 DHCP 的方式

    在上面的畫面當中,先點選 TCP/IP4 第四版 IP 協定,然後按下『內容』就可以開始來修改網路參數囉!

  3. 接下來如下圖所示,你只要勾選『自動取得 IP 位址』那個項目,然後按下『確定』並離開設定畫面, 如此一來 Windows 就會開始自動取得 IP 的工作了。

    區域網路的 Windows 7 系統設定 DHCP 的方式
    圖 12.3-3、區域網路的 Windows 7 系統設定 DHCP 的方式

  4. 那你如何確認你的 IP 已經被順利的取得呢?如果是在早期的 Windows 95 ,你可以使用一個名為『 winipcfg 』 來觀察你的 IP 設定。不過在 windows 2000 以後,你可能需要使用命令提示字元來觀察才行。你可以使用: 『開始』-->『所有程式』-->『附屬應用程式』-->『命令提示字元』來取出終端機,然後這樣處理看看:
    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 的啦!簡單吧!

12.4 DHCP 伺服器端進階觀察與使用

如果你要管理的是幾十部甚至是幾百部的電腦時,你總是希望能夠根據座位來進行 IP 的給予吧?因此,固定 IP 配合 MAC 就顯的很重要啦!那麼如何取得每部主機的 IP 呢?還有,你怎麼查詢到相關的租約呢?以及,如果你還想要進行遠端開機, 幫使用者在固定的時間就開機呢?那就來看看底下的其他用途吧!

12.4.1 檢查租約檔案

用戶端會主動的紀錄租約資訊,那伺服器端更不能忘記記錄囉!伺服器端是記錄在這個地方:

[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 使用了呢!很容易瞭解吧!

12.4.2 讓大量 PC 都具有固定 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 』之類的指令來修訂囉!

12.4.3 使用 ether-wake 實行遠端自動開機 (remote boot)

既然已經知道用戶端的 MAC 位址了,如果用戶端的主機符合一些電源標準, 並且該用戶端主機所使用之網路卡暨主機板支援網路喚醒的功能時,我們就可以透過網路來讓用戶端電腦開機了。 如果你有一部主機想要讓他可以透過網路來啟動時,你必須要在這部用戶端電腦上進行:

  1. 首先你得要在 BIOS 裡面設定『網路喚醒』的功能,否則是沒有用的喔!
  2. 再來你必須要讓這部主機接上網路線,並且電源也是接通的。
  3. 將這部主機的 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 軟體,就能夠讓你區域網路內的主機啟動了, 控管上面就更加方便的啦!你說是吧! ^_^

Tips 鳥哥 鳥哥辦公室有一部桌機是經常用來測試的機器,但是因為比較耗電,因此當鳥哥離開辦公室時,就會將電腦關閉。 不過鳥哥辦公室有一部 NAT server 在負責防火牆的第一道關卡,當鳥哥在家裡有需要查詢到學校桌機的資料時, 桌機關了怎辦?沒關係,透過 NAT server 登入後,使用 ether-wake 喚醒桌機,那就能夠開機進去工作囉! 這樣也比較不怕耗電問題~

12.4.4 DHCP 與 DNS 的關係

我們知道區域網路內如果很多 Linux 伺服器時,你得要將 private IP 加入到每部主機的 /etc/hosts 裡面, 這樣在連線階段的等待時間才不會有逾時或者是等待太久的問題。問題是,如果電腦數量太大,又有很多測試機時, 這時你得要常常去更新維護那些重灌過的機器的 /etc/hosts ,煩不煩吶?

此時在區網內架設一部 DNS 伺服器負責主機名稱解析就很重要!因此既然已經有 DNS 伺服器幫忙進行主機名稱的解析,那你根本不需要更動 /etc/hosts !未來的新機器或者是新灌的電腦也不需要改寫任何網路參數,這樣維護會輕鬆很多。 因此,一個好的區網內,理論上,我們應該在 DHCP 伺服器主機上面在安裝一個 DNS 伺服器,提供內部電腦的名稱解析為宜。 相關的設定就請參考第十九章 DNS 的介紹囉。

    DHCP 回應速度與有網管 switch 的設定問題

鳥哥在崑山資訊傳播系 (http://www.dic.ksu.edu.tw) 負責五間電腦教室的維護,每間電腦教室內部的 giga switch 是低階的有網管功能的機器!有網管功能機器的設定資訊比較多, switch 也能夠進行封包異常的偵測與抵擋。問題是,如果抵擋的行為『太超過』時,也可能造成許多問題。

鳥哥管理的電腦教室在重新啟動網路取得 DHCP 時,都會等待幾乎達 30 秒,雖然最終是成功的,但是等這麼久呢! 取得 IP 之後,網路速度卻又是正常的,一切沒問題~就是教導網路參數設定時,學生都會哇哇叫!以為失敗了, 有的等了將近一分鐘才告知取得 IP 且為正常...

後來問了有經驗的計中的羅組長,才發現可能是 switch 的問題。大多在設定位於『L2 Features』-->『Spanning Tree』-->『STP Port Settings』的子項目之類的字眼,將 STP 之類的埠口都設定為關閉 (Disabled) 看看, 鳥哥做完這個設定後,DHCP 的取得就順暢了!連帶的網路開機功能也就沒有問題~這部份也提供給大家參考呦!

Tips 鳥哥 網友鞏立偉兄來信談到,STP 主要的目的是在抵擋廣播風暴,若偵測到廣播風暴時,該 switch 的埠口會被停用。 只是啟動這個功能後,會較緩慢的進入運作狀態,所以會產生較慢的情況發生。較好的 switch 會支援 RSTP (Rapid spanning tree protocol),速度會較快一些。感謝朋友提供的資訊喔!^_^

12.5 重點回顧

  • DHCP (Dynamic Host Configuration Protocol) 可以提供網路參數給用戶端電腦,使其自動設定網路的功能;
  • 透過 DHCP 的統一管理,在同一網域當中就比較不容易出現 IP 衝突的情況發生;
  • DHCP 可以透過 MAC 的比對來提供 Static IP (或稱為固定 IP),否則通常提供用戶端 dynamic IP (或稱為動態 IP);
  • DHCP 除了 Static IP 與 Dynamic IP 之外,還可以提供租約行為之設定;
  • 在租約期限到期之前,用戶端 dhcp 軟體即會主動的要求更新 (約 0.5, 0.85 倍租約時間左右);
  • DHCP 可以提供的 MAC 比對、Dynamic IP 的 IP 範圍以及租約期限等等,都在 dhcpd.conf 這個檔案當中設定的;
  • 一般的情況之下,使用者需要自行設定 dhcpd.leases 這個檔案,不過,真正的租約檔案記錄是在 /var/lib/dhclient/dhclient-eth0.leases 裡面;
  • 如果只是要單純的 DHCP 服務,建議可以購買類似 IP 分享器的設備即可提供穩定且低耗電的網路服務。
  • DHCP 服務與 DNS 服務的相關性很高;
  • 若 DHCP 用戶端取得 IP 的速度太慢,或許可以找一下有網管 switch 的 STP 設定值。

12.6 本章習題

  • DHCP 主要的兩種 IP 分配模式為何?
    主要的兩種分配模式分別為 Dynamic IP 與 Static IP , Static IP 透過 MAC 的比對,至於 Dynamic IP 則是直接取用網域中尚未被使用到的 IP 來進行 Client 端的分配。
  • 在有 DHCP 主機存在的網域當中,且 client 端亦使用 DHCP 來規劃用戶端的網路參數,那麼請問,在該網域當中,Client 端透過 DHCP 取得 IP 的流程為何?
    1. 首先, Client 端會發出一個 DHCP 要求封包;
    2. server 端接收到要求後,會主動的回應資訊給 Client ;
    3. Client 若接受該 DHCP 主機所提供的參數,則主機會記錄下租約資訊,至於 client 端則開始以主機提供的參數設定其網路
  • DHCP 是如何發送 Static IP 的?可以使用何種指令取得該資訊?
    DHCP 主要利用網路卡的硬體位址,亦即俗稱的『網路卡卡號』,也就是 MAC 來進行 Client 端的比對的,至於主動取得 Client 端的方式,可以透過 ping 以及 arp 來獲得。
  • 在 DHCP 伺服器的租約檔,亦即 /var/lib/dhcpd/dhcpd.leases 當中,記錄了什麼資訊?
    這個檔案主要記錄了 Client 端連上 Server 端的紀錄資料,他會被 DHCP 主機用來判定與 Client 端的租約行為喔!
  • DHCP 的登錄檔放置於何處?
    就是最重要的 /var/log/messages 這個檔案啦(預設狀況下!)

12.7 參考資料與延伸閱讀

修改歷史:
  • 2002/11/23:第一次完成
  • 2003/03/15:加入相關重點回顧、與練習題
  • 2003/09/10:修改版面去!
  • 2006/12/05:將舊的文章移動到此處
  • 2006/12/06:好累!怎麼老是在說累~總之,完成囉~新增加 ether-wake 的網路喚醒功能。
  • 2011/02/24:將基於 CentOS 4.x 的舊的文章移動到此處
  • 2011/03/03:加入了 DNS 的相關性,有網管的 STP 會影響 DHCP 的取得等資料。
  • 2011/07/27:將基於 CentOS 5.x 的版本移動到此處
  • 2011/07/27:主要是將 Windows 的圖示以 Windows 7 來示意囉!
2002/11/24以來統計人數
計數器
伺服器篇文件
各版本彙整說明
CentOS 6.x