|
第十三章 架
設 DHCP Server
|
| 13.1 DHCP 概述 | ||
| 13.1.1 | 何謂 DHCP | |
| 13.1.2 | DHCP 分配 IP 位址的方式 | |
| 13.1.3 | DHCP 的運作流程 --- 更新租約期 | |
| 13.2 設定 DHCP Server | ||
| 13.2.1 | 需安裝套件及套件清單 | |
| 13.2.2 | 設定 DHCP Server --- 設定 /etc/dhcpd.conf、修改 /etc/sysconfig/dhcpd | |
| 13.2.3 | 檢視 /var/lib/dhcp/db/dhcpd.leases | |
| 13.2.4 | 綜合範例 | |
| 13.3 設定 DHCP Client | ||
| 13.3.1 | 設定 Linux Client | |
| 13.3.2 | 設定 Windows Client | |
| DHCP Client 向 DHCP Server 取得 IP 位址後,並不是永久的使用該位址,而只是能使用一段時間而已,這段時間就是所謂的租約期,只要
Client 的租約期一到,就必須釋放 (release) 此位址,這樣 DHCP 才能把剛剛收回的位址再提供給其它的用戶端使用。 一般使用動態分配的時機是為了解決 IP 位址的不足,像現在很多的 ISP 都是透過這種動態分配的方式。舉個例子,假設 ISP 本身有 1000 個 IP 位址可供應,但客戶數可能不只 1000 人,不過由於所有客戶在同一時間上網的機率不高,所以 ISP 就可以輪流租用給客戶端來使用。雖然 ISP 不一定採用 DHCP 的方式,但其動態分配的原理是相同的。 |
| DHCP Client 每次開機時所分配到的 IP 位址都是固定的時候,稱之為自動分配。您要是有一些比較特殊的主機,像工作站或伺服器等級之類的,就可採用自動分配的方式來給予這些主機固定的 IP。至於自動分配的原理,是根據 Client 主機的 MAC 位址來指派一個永久的 IP 位址給它,因此這個位址就沒有所謂的租約期了。 |
| 1. | DHCPDISCOVER: 當用戶端首次以 DHCP Client 端的身分登入網路時,會先發出一個 DHCPDISCOVER 的廣播封包,內含來源位址 0.0.0.0、目的位址 255.255.255.255 等訊息。而送出這個廣播封包的目的就是在找尋一台能提供 IP 位址的 DHCP Server。 |
|||
| 2. | DHCPOFFER: DHCP Server 在收到這個 DHCPDISCOVER 廣播封包後,會從目前尚未出租出去的 IP 位址中挑一個,然後再利用廣播方式回應給 Client 一個 DHCPOFFER 封包,此封包還包含租約期限的訊息。另外若網路中有多台 DHCP 主機存在,則 Client 會以收到的第一個 DHCPOFFER 訊息為主。 |
|||
| 3. | DHCPREQUEST: Client 端在收到 DHCPOFFER 封包後,會先送出一個 ARP Request 的廣播封包,來確定對方所提供的 IP 位址沒有其他的主機在使用,那萬一發現這個位址已被其它主機使用掉的話,Client 端就會送出一個 DHCPDECLINE 的拒絕訊息給 Server,然後再送出一個 DHCPDISCOVER 的廣播封包來重新索取 IP 位址。 好了,假使 Client 已確定此位址尚未被使用,那麼接著就會送出一個 DHCPREQUEST 的廣播封包來回應給這台 DHCP Server。之所以還是送出廣播封包的用意,是為了告知其他未被選上的 DHCP Server,這樣這些 DHCP Server 才可將原本打算保留給 Client 的 IP 位址釋放出來給其他 Client 使用。
|
|||
| 4. | DHCPACK: DHCP Server 收到 DHCPREQUEST 的訊息後,會回應一個 DHCPACK 的確認訊息給 Client ( 此時還是透過廣播方式,因 Client 尚未正式取得 IP 位址 ),此訊息裡包含了指派給 Client 端使用的 IP 位址、網路遮罩、預設閘道器、DNS Server 等等,而在 client 收到這些訊息後,便完成了整個索取 IP 位址的動作。 |
| C : \Documents and Settings\barry
> ipconfig/release ←
釋放 IP 位址。 C : \Documents and Settings\barry > ipconfig/renew ← 重新索取一個新的 IP 位址。 註:如果未執行 release,而直接執行 renew 的話,就只是在更新租約期而已。 |
| suselinux:~ # tail
-5 /var/log/messages Nov 3 18:56:25 suselinux dhcpd: DHCPRELEASE of 192.168.1.199 from 00:04:e2:19:02:0c (newwins) via eth0 (found) Nov 3 18:57:24 suselinux dhcpd: DHCPDISCOVER from 00:04:e2:19:02:0c via eth0 Nov 3 18:57:25 suselinux dhcpd: DHCPOFFER on 192.168.1.199 to 00:04:e2:19:02:0c (newwins) via eth0 Nov 3 18:57:25 suselinux dhcpd: DHCPREQUEST for 192.168.1.199 (192.168.1.111) from 00:04:e2:19:02:0c (newwins) via eth0 Nov 3 18:57:25 suselinux dhcpd: DHCPACK on 192.168.1.199 to 00:04:e2:19:02:0c (newwins) via eth0 |
往往 DHCP Client 為了持續延用此 IP 位址,而會向 DHCP
Server 要求更新租約期,一旦更新成功,則 Client 的 IP 租約期限就會從頭開始計算起。在 Client 更新租約期的時候,會向 Server
送出一個 DHCPREQUEST 的訊息。接著以下就舉兩種 Client 送出 DHCPREQUEST 給 Server 的時機:
|
| suselinux:~ #
rpm -qa | grep dhcp dhcp-3.0.1rc13-28.18 dhcp-server-3.0.1rc13-28.18 請注意,您不能只安裝 dhcp-server,因 dhcp 是 dhcp-server 的相依套件。 |
suselinux:~ #
rpm -ql dhcp-server
suselinux:~ # rpm -ql dhcp
|
| suselinux:~ #
vi /etc/init.d/dhcpd test "$DHCPD_RUN_CHROOTED" = "yes" && CHROOT_PREFIX = /var/lib/dhcp/ DAEMON = "DHCP server" DAEMON_BIN = ${DHCPD_BINARY : = /usr/sbin/dhcpd} DAEMON_CONF = /etc/dhcpd.conf :略 |
| suselinux:~ #
vi /etc/sysconfig/dhcpd # Shall the DHCP server dhcpd run in a chroot jail (/var/lib/dhcp)? # 啟用 chroot 機制後,其預設的根目錄為 /var/lib/dhcp。 # Each time you start dhcpd with the init script, /etc/dhcpd.conf will # be copied to /var/lib/dhcp/etc/. # 當您藉由 script 來啟動 dhcpd 服務時,會自動把 /etc/dhcpd.conf 複製到 /var/lib/dhcp/etc 之中, # 因此我們只要針對 /etc/dhcpd.conf 來做設定即可。 DHCPD_RUN_CHROOTED="yes" |
| suselinux:~ # chkconfig dhcpd 35 |
13.2.2
設定 DHCP Server
在設定伺服器之前,先來了解一下大致上的規劃。DHCP Server 主機上有兩片網卡,eth0 對外、eth1 對內 ( IP 位址為 192.168.1.254
),同時這部主機亦具有 NAT 功能 ( 請參考防火牆那一章的設定 ),這樣才可讓 Client 連上 Internet。至於詳細的架構如下圖所示:
接著就來做設定囉:
| suselinux:~ # rcdhcpd
start Starting DHCP server [chroot] done |
如果您設定有誤,則在啟動 dhcpd 的過程,會有錯誤訊息顯示在螢幕上,照著系統提供的訊息來除錯即可,很簡單的。
13.2.3 檢視 /var/lib/dhcp/db/dhcpd.leases
當您第一次啟動 dhcpd 時,會在 /var/lib/dhcp/db 目錄下產生一個 dhcpd.leases 檔案,而這個檔案是用來紀錄已配發出去的 IP 位址及租約期等資訊。| suselinux:~ # cat
/var/lib/dhcp/db/dhcpd.leases lease 192.168.1.223 { starts 5 2005/09/30 05:10:00; ends 5 2005/09/30 17:10:00; binding state active; next binding state free; hardware ethernet 00:0f:3d:ec:12:fc; uid "\001\000\017=\354\022\374"; client-hostname "HOME-IKT3I2FVHI"; } lease 192.168.1.224 { starts 5 2005/09/30 05:10:58; ends 5 2005/09/30 17:10:58; binding state active; next binding state free; hardware ethernet 00:04:e2:19:02:0c; uid "\001\000\004\342\031\002\014"; client-hostname "newwins"; } |
| suselinux:~ #
vi /etc/dhcpd.conf # global設定 ddns-update-style none; default-lease-time 43200; max-lease-time 86400; option domain-name-servers 203.79.224.30,168.95.1.1; # section設定 subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.254; option broadcast-address 192.168.1.255; range 192.168.1.100 192.168.1.200; } subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.254; option broadcast-address 192.168.2.255; range 192.168.2.10 192.168.2.150; range 192.168.2.200 192.168.2.240; } host host1 { hardware ethernet 00:a0:cc:c0:2a:4b; fixed-address 192.168.2.180; option routers 192.168.2.254; } |
| suselinux:~ #
vi /etc/sysconfig/dhcpd DHCPD_INTERFACE="eth1 eth2" |
| dhcpclient:~ #
rpm -qa | grep dhcpcd dhcpcd-1.3.22pl4-193.1 dhcpclient:~ # rpm -ql dhcpcd /sbin/dhcpcd 這是 DHCP Client 端主要執行的一支 daemon,藉由這支 daemon,才能讓您從 DHCP Server 那裡得到 IP address、netmask、broadcast 、Default GW、nameserver 等資訊,重要吧。 |
| dhcpclient:~ # cd
/etc/sysconfig/network dhcpclient:/etc/sysconfig/network # vi ifcfg-eth-id-00:05:5d:69:dd:b3 BOOTPROTO='dhcp' ← 改成 dhcp 就 ok 囉。 IPADDR='192.168.1.111' NETMASK='255.255.255.0' :略 修改完成後請重新啟動網路,看能否索取到 IP 位址: dhcpclient:~ # rcnetwork restart |
| dhcpclient:~ #
vi /etc/sysconfig/network/dhcp # Should the DHCP client modify /etc/resolv.conf at all? # If not, set this to "no". (The default is "yes") # # resolv.conf will also stay untouched when MODIFY_RESOLV_CONF_DYNAMICALLY # in /etc/sysconfig/network/config is set to "no". # DHCLIENT_MODIFY_RESOLV_CONF="no" # 改成 no 以後,dhcpcd 就不會去修改 /etc/resolv.conf,這時候當然就可以保留您原來的設定值囉。 # 還有另一種方式,就是到 /etc/sysconfig/network/config 去把 MODIFY_RESOLV_CONF_DYNAMICALLY # 參數修改成 no 即可。 # Should the DHCP client set a default route (default Gateway) (yes|no) # # When multiple copies of dhcpcd run, it would make sense that only one # of them does it. # DHCLIENT_SET_DEFAULT_ROUTE="no" # 設定成 no,表示 Client 不使用 Server 所提供的 Default GW。 # 如果您在 /etc/sysconfig/network/routes 有指定 DG,則就算此處設定成 yes,也還是會依 routes 檔案的設定為主。 # Lease time to request ( -l option) # # Specifies (in seconds) the lease that is suggested to the server. # The default is infinite. For a mobile computer you probably want to # set this to a lower value. # DHCLIENT_LEASE_TIME="86400" # 這是 Client 向 Server 所要求的租約期設定,如未指定時間,則表示採用 default-lease-time。 # 如果您所要求的時間比 default-lease-time 或 max-lease-time 還小,Server 都會接受,但如果比 max-lease-time # 還大,則會以 max-lease-time 作為 Client 的租約期。 |

copyright © 2005 by barry ( 柏青哥 )