DHCP:Dynamic Host Configuration Protocol 動態主機配置協議,對客戶機動態分配TCP/IP信息 :包括IP地址、子網掩碼、默認網關、首選DNS服務器等信息。
服務器端監聽端口:UDP 67
客戶端監聽端口:UDP 68
DHCP服務器是以地址租約的方式爲DCHP客戶端提供服務的,有兩種方式:
限定租期:當租約快到期時,客戶端必須向DHCP服務器提出續約請求,請求成功後可以繼續使用該IP地址。如果客戶端沒有續約或者續約不成功,服務器就會將該IP地址回收,分配給其他DHCP客戶端使用。
永久租用:當DHCP客戶端向DHCP服務器租用到IP地址後,這個地址就永久地分配給這個DHCP客戶端使用。
工作原理:
當DHCP客戶端IP地址使用時間達到租期的一半時,它就會向DHCP服務器發送一個新的DHCPREQUEST,服務器在接收到請求時,沒有拒絕理由便會發送一個DHCPACK信息,當DHCP收到DHCPACK的請求後,就重新開始一個租用週期。
當DHCP客戶端重新啓動時,不管IP地址租約是否到期,都會以廣播的方式,給網絡中的DHCP服務器發送一個DHCPREQUEST信息,若沒有收到應答且租期還沒過期,那麼DHCP客戶端將繼續使用該IP地址。
當IP地址的租期超過一半但續約失敗時,該DHCP客戶端仍可使用該IP,但是將在租期達到87.5%時候再次利用廣播信息發送一個DHCPREQUEST信息,以便找到一臺可以繼續提供租期的DHCP服務器。如果DHCP服務器返回DHCPNACK信息,說明租約失敗,此時客戶端需重新開始DHCPDISCOVER四個過程。
進程名稱dhcpd
主配置文件 /etc/dhcpd.conf /etc/sysconfig/dhcpd(參數性配置文件)
啓動腳本 /etc/init.d/dhcpd
下面我們就在來在linux上配置DHCP服務。
首先必須確保自己的主機爲靜態IP。如果網卡使用host-only連接方式則一定要把虛擬機的DHCP服務停掉,不然會影響實驗效果。
[root@station39 ~]# yum install dhcp -y
[root@station39 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
主配置文件需要手動創建,這裏我們將系統提供給我們的模板拷貝到/etc/下,稍加修改即可使用:
[root@station39 ~]# cd /usr/share/doc/dhcp-3.0.5/
[root@station39 dhcp-3.0.5]# cp dhcpd.conf.sample /etc/dhcpd.conf
主配置文件的相關參數:
ddns-update-style interim; //** 指定DDNS的更新方式,DNS和DHCP服務器雙方協同
工作提供動態DNS的時候的工作方式
ignore client-updates; //** 忽略客戶端更新請求
PS:當全局參數和局部參數出現衝突時,以局部參數爲準。作用範圍越小,優先級越高
[root@station39 ~]# vim /etc/sysconfig/dhcpd
DHCPDARGS=eth0 //** 指定監聽的網卡
啓動之後查看一下監聽端口:
[root@station39 ~]# netstat -ntulp | grep 67
udp 0 0 0.0.0.0:67 0.0.0.0:* 16653/dhcpd
PS:dhclient 客戶端所使用的進程
dhclient -d eth0 //** 在前臺運行,默認運行在後臺
使用客戶端獲得一下IP來驗證一下效果:
看,已經獲得了一個我們所定義的地址池內的IP。
PS:linux上DHCP服務器分配IP的方式是從大到小,而windows 上DHCP服務器分配IP的方式是從小到大,這裏你應該明白客戶端爲什麼獲得的是150的IP了。
爲客戶端分配一個固定的地址:
修改dhcpd.conf文件
host web {
hardware ethernet 00:0C:29:84:22:C1;
fixed-address 192.168.10.119;
}
重啓服務。
客戶端重新獲得一下IP試試:
OK!完全沒問題!
爲固定IP定義參數:
# we want the nameserver to appear at a fixed address
host web {
option routers 192.168.10.10;
option domain-name-servers 192.168.0.110;
hardware ethernet 00:0C:29:84:22:C1;
fixed-address 192.168.10.119;
}
PS:在網卡的配置參數裏添加PEERDNS=no,使用自己配置的DNS地址,無論DHCP服務參數如何改變,都不改變/etc/resolv.conf 中的定義。
/var/lib/dhcpd/dhcpd.leases保留當前已經租出去的IP的客戶端所獲得的地址租約的信息。
根據客戶端的類型給予其特定的IP:
class "virtual" {
match if substring (hardware, 1,3) = 00:16:3e or
substring (hardware,1,3) = 00:16:36;
}
class "vmware" {
match if substring (hardware, 1,3) = 00:0c:29
}
class "microsoft-clients"
match if substring (option vendor-class-identifier,0,4) = "MSFT"; //** 根據供應商類
別標識
option routers 192.168.0.254;
option domain-nameservers 192.168.0.90
}
pool {
allow members of "virtual"; //**允許哪一類客戶端來獲得此地址
range 192.168.0.90 192.168.0.110
}
pool {
deny members of "virtual"; //** 拒絕哪一類客戶端來獲得此地址
deny members of "microsoft-clients";
range 192.168.0.2 192.168.0.90;
}
pool {
deny members of "virtual";
allow members of "microsoft-clients";
range 192.168.0.202 192.168.0.252;
}
DHCP 中繼 relay
我們在虛擬機上來模擬DHCP中繼代理的功能:
實驗環境配置:DHCP server IP :192.168.10.1 網絡連接:Vmnet2
Router: eth0:192.168.10.11 網絡連接:Vmnet2
eth1:192.168.20.10 網絡連接:橋接
DHCP Relay :192.168.20.11 網絡連接:橋接
物理機做客戶端
修改DHCPServer 的主配置文件/etc/dhcpd.cconf ,添加一個地址池:
subnet 192.168.20.0 netmask 255.255.255.0 {
option routers 192.168.20.1;
option domain-name "linna.com";
option subnet-mask 255.255.255.0;
range 192.168.20.11 192.168.20.50;
}
重啓服務
爲DHCP server添加網關
[root@station39 etc]# route add default gw 192.168.10.11
爲DHCP relay server添加網關
[root@station26 ~]# route add default gw 192.168.20.10
修改/etc/sysconfig/dhcrelay文件
[root@station26 ~]# vim /etc/sysconfig/dhcrelay
INTERFACES="eth0"
DHCPSERVERS="192.168.10.1"
啓動中繼服務:
[root@station26 ~]# service dhcrelay start
爲做router的這臺主機打開內核路由功能
[root@server27 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
OK!已經配置完成,我們使用物理機來驗證一下效果:
看!獲得的是20網段的地址,說明我們的DHCP中繼已經起作用了。