## 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 (請參考[第十章](http://linux.vbird.org/linux_server/0270dynamic_dns.php)與[第十九章 DNS](http://linux.vbird.org/linux_server/0350dns.php) 的說明) 來更新主機名與 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](http://linux.vbird.org/linux_server/0120intranet.php#fig3.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 對應
如果你有仔細的瞧過第二章的[網絡基礎](http://linux.vbird.org/linux_server/0110network_basic.php)的話,那么應該還會記得那個 [/etc/hosts (第四章 4.4.1)](http://linux.vbird.org/linux_server/0130internet_connect.php#problem_hosts) 會影響內部計算機在聯機階段的等待時間吧?那么我現在使用 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 與主機名對應,那樣就更加妥當啦!
* * *
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀