今天,我想在Linux下配置一臺DHCP服務器,感受上比較直觀,難度稍微有點大(相對於在windows及路由器下)。
DHCP(Dynamic Host Configure Protocol,動態主機配置文件),是一個簡化手動分配及管理IP地址的煩惱。DHCP是基於C/S模式的。
默認,在RHEL上沒有安裝服務器組件。查看是否安裝的命令
[root@localhost ~]# rpm -qa | grep dhcp
dhcpv6_client-0.10-8
//客戶端組件
若是沒有安裝,拿出RHEL的安裝盤,找到相應的組件包。進行安裝
[root@localhost cdrom]# rpm -ivh RedHat/RPMS/dhcp-3.0.1-12_EL.i386.rpm
//服務器組件
查看DHCP服務的端口號
[root@localhost root]# vi /etc/services
bootps 67/tcp
# BOOTP server
bootps 67/udp
bootpc 68/tcp
# BOOTP client
bootpc 68/udp
DHCP服務(即dhcpd守護進程)是按照/etc目錄下的dhcpd.conf配置文件進行設置。默認狀況下,這個文件是不存在的。在安裝dhcp服務時都會安裝一個幫助文件(配置實例)。經過如下命令查詢
[root@localhost ~]# rpm -ql dhcp
/etc/rc.d/init.d/dhcpd
/etc/rc.d/init.d/dhcrelay
/etc/sysconfig/dhcpd
/etc/sysconfig/dhcrelay
/usr/bin/omshell
/usr/sbin/dhcpd
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-3.0.1
/usr/share/doc/dhcp-3.0.1/README
/usr/share/doc/dhcp-3.0.1/RELNOTES
/usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample
//配置樣本
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcp-eval.5.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/var/lib/dhcp
/var/lib/dhcp/dhcpd.leases
而後,複製到/etc/dhcpd.conf
[root@localhost ~]# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf
//複製文件
查看,/etc/dhcpd.conf配置文件(主要配置文擋)
[root@localhost ~]# cat /etc/dhcpd.conf
ddns-update-style interim;
//支持DNS動態更新
ignore client-updates;
//忽略客戶端更新DNS記錄
subnet 192.168.0.0 netmask 255.255.255.0 {
//宣告192.168.0.0/24網段
# --- default gateway
option routers 192.168.0.1;
//默認網關
option subnet-mask 255.255.255.0;
//網絡掩碼
option nis-domain "domain.org";
//NIS域名稱
option domain-name "domain.org";
//DNS域名
option domain-name-servers 192.168.0.1;
//DNS服務地址
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.0.1;
# option netbios-name-servers 192.168.0.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.0.128 192.168.0.254;
//定義可分配的IP地址池
default-lease-time 21600;
//默認租約期限
max-lease-time 43200;
//最大租約期限
# we want the nameserver to appear at a fixed address
host ns {
#next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
//默認永久分配IP地址(物理地址匹配)
}
PS:我在VMware上作實驗的時候,可能dhcp客戶端(linux)獲取不到IP地址。
出現如下提示:
Determining IP information for eth0... failed; no link present. Check cable?
因爲虛擬機的緣由,須要在/etc/sysconfig/network-scripts/ifcfg-eth0後面添加下面命令
check_link_down()
{
return 1;
}
配置完成後,須要從新開啓服務
[root@localhost ~]# service dhcpd restart
//從新開啓DHCP服務
[root@localhost ~]# /etc/init.d/dhcpd stop
//中止DHCP服務
[root@localhost ~]# /etc/init.d/dhcpd start
//啓動DHCP服務
[root@localhost ~]# chkconfig --level 35 dhcpd on
//開機自動啓動DHCP服務
在linux客戶端開啓DHCP服務(windows下比較簡單,不在作相關介紹),須要設置如下文擋
[root@localhost root]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
//啓動DHCP服務
check_link_down()
{
return 1;
}
這樣,就能夠獲取IP地址了。測試一下
[root@localhost root]# ifconfig eth0
.....
Link encap:Ethernet HWaddr 00:0C:29:93:19:4B
inet addr:
192.168.0.254
Bcast:192.168.0.255 Mask:255.255.255.0
......
在現實生活中,有多個網段的IP地址須要分配,是否是每一個網段下分配一臺DHCP服務器呢?答案,是否認的。緣由:這個也不太現實(成本很高)。因此咱們能夠用DHCP中繼代理來完成這項功能。下次,我會經過一個具體的配置實例,來更形象地說明它的功能做用。
最後:DHCP客戶端申請IP地址的工做流程
(1)DHCP客戶端向本網段發送一個
DHCP DISCOVER(DHCP 發現)
(2)本網段的DHCP服務器迴應一個
DHCP OFFER(DHCP 提供)
(3)DHCP客戶端收到迴應後,向DHCP服務器請一個DHCP 所包含的IP地址,並廣播一個
DHCP REQUEST(DHCP 請求)
(4)最後,DHCP服務器發送一個
DHCP REPLY來確認。
其中,四個過程都是廣播進行的。
附上,我之前抓DHCP數據包的效果圖。