3、DHCP 網絡服務
發表時間:2020-10-18
發布人:葵宇科技
浏覽次數:49
3.1 DHCP 簡介
DHCP(Dynamic Host Configuration Protocol:動(dòng)态主機配置協議)是一個(gè)工作在應用層的局域網網絡協議,數據傳輸時使用 UDP 不可(kě)靠傳輸協議工作,通(tōng)常被應用在大型的局域網絡環境中(zhōng),主要作用是集中(zhōng)的管理、分配網絡資(zī)源,使網絡環境中(zhōng)的主機能動(dòng)态的獲得 IP 地址、Gateway地址、DNS 服務器(qì)地址等信息,并能夠提升地址的使用率。
3.2 DHCP 工作原理(租約四部曲+續租)
3.2.1 DHCP 客戶端進行 IP 請求
當一個(gè) DHCP 客戶機啟動(dòng)時,會自動(dòng)将自己的 IP 地址配置成 0.0.0.0,由于使用 0.0.0.0 不能進行正常通(tōng)信,所以客戶機就必須通(tōng)過 DHCP 服務器(qì)來獲取一個(gè)合法的地址。由于客戶機不知道 DHCP 服務器(qì)的 IP 地址,所以**它使用 0.0.0.0 的地址作為源地址,使用 255.255.255.255 作為目标地址。使用 UDP 67 端口作為目的端口來廣播請求 IP 地址信息。**廣播信息 DHCP Discover 中(zhōng)包含了 DHCP 客戶機的 MAC 地址和(hé)計算機名,以便使用 DHCP 服務器(qì)能确定是哪個(gè)客戶機發送的請求。
3.2.2 DHCP 服務器(qì)相應請求
當 DHCP 服務器(qì)接收到客戶機請求 IP 地址的信息時,它就在自己的 IP 地址池中(zhōng)查找是否有合法的 IP 地址提供給客戶機。如(rú)果有,DHCP 服務器(qì)就将此 IP 地址做上标記,加入到 DHCP OFFER 的消息中(zhōng),然後 DHCP 服務器(qì)就廣播一則包括下(xià)列信息的 DHCP OFFER 消息。
DHCP 客戶機的 MAC 地址:DHCP 服務器(qì)提供的合法 IP 地址;子(zǐ)網掩碼;默認網關(guān)(路(lù)由);租約的期限;DHCP 服務器(qì)的IP地址-MAC
因為DHCP 客戶機還沒有 IP 地址,所以 DHCP 服務器(qì)使用自己的 IP 地址作為源地址,使用 255.255.255.255 作為目标地址,使用 UDP 68 端口作為源端口來廣播 DHCP OFFER信息。
3.2.3 DHCP 客戶機選擇 IP
DHCP 客戶機從接收到的第一個(gè) DHCP OFFER 消息中(zhōng)選擇 IP 地址,發出 IP 地址的 DHCP 服務器(qì)将該地址保留,這樣該地址就不能提供給另一個(gè) DHCP 客戶機。當客戶機從第一個(gè) DHCP 服務器(qì)接收 DHCP OFFER 并選擇IP地址後,DHCP 租約的第三個(gè)過程發生。客戶機将DHCP REQUEST 消息光波導所有的 DHCP 服務器(qì),表明它接收提供的内容。DHCP REQUEST 消息包括為客戶機提供IP 配置的服務器(qì)的服務表示(IP地址)。DHCP 服務器(qì)查看服務器(qì)标識符字段,以确定它自己是否被選擇為指定的客戶機提供IP地址,如(rú)果那些 DHCP OFFER 被拒絕,則 DHCP 服務器(qì)會取消提供并保留其 IP 地址以用于下(xià)一個(gè) IP 租約請求。
在客戶機選擇 IP 的過程中(zhōng),雖然客戶機選擇了 IP 地址,但是還沒有配置 IP 地址,而在一個(gè)網絡中(zhōng)可(kě)能有幾個(gè) DHCP 服務器(qì),所以客戶機仍然使用 0.0.0.0 的地址作為源地址,使用 255.255.255.255 作為目标地址,使用 UDP 67 端口作為目标的端口來廣播 DHCP REQUEST 信息。
3.2.4 DHCP 服務器(qì)确認租約
服務确認租約,也稱為 DHCPACK/DHCPNAK。
DHCP 服務器(qì)接收到 DHCPREQUEST 消息後,以 DHCPACK 消息的形式向客戶機廣播成功的确認,該消息包含有IP地址的有效租約和(hé)其他可(kě)能配置的信息。雖然服務器(qì)确認了客戶機的租約請求,但是客戶機還沒有收到服務器(qì)的 DHCPACK 消息,所以服務器(qì)仍然使用自己的IP地址作為源地址,使用 UDP67 端口作為源端口,使用 255.255.255.255 作為目标地址,使用 UDP68 端口作為目的端口來廣播DHCPACK 信息。當客戶機收到 DHCPACK 消息時,它就配置了IP地址,完成了TCP/IP的初始化。
3.2.5 DHCP 客戶機續租
DHCP 客戶機會在租期過去50%的時候,直接向其提供IP地址的DHCP 服務器(qì)發送DHCP REQUEST 消息包。如(rú)果客戶機接收到該服務器(qì)回應的 DHCP ACK 消息包,客戶機就根據包中(zhōng)所提供的新的租期以及其它已經更新的 TCP/IP 參數,更新自己的配置,IP 租用更新完成。如(rú)果沒有收到該服務器(qì)的恢複,則客戶機繼續使用現有的IP地址,因為當前租期還有50%。
如(rú)果在租期過去50%的時候還沒有更新,則DHCP客戶機将在租期過去87.5%的時候在此向其提供IP地址的DHCP服務器(qì)聯系。如(rú)果還不成功。到租約的100%時候,DHCP 客戶機必須放棄這個(gè)IP地址,重新申請。如(rú)果此時無DHCP 服務器(qì)可(kě)用,DHCP 客戶機會使用169.254.0.0/16中(zhōng)随機的一個(gè)地址,并且每隔5分鐘再進行嘗試。
3.3 DHCP 服務搭建
3.3.1 環境準備
主機名服務IPtest1dhcp 客戶端??test2dhcp 服務端192.168.117.131- 兩台主機,網絡為 nat 模式
- 關(guān)閉防火牆
iptables -F
setenforce 0
- 注:如(rú)果您用的是 VMware 虛拟機,還請關(guān)閉虛拟網絡編輯器(qì)的 DHCP 功能
3.3.2 DHCP 相關(guān)信息
- 軟件名
dhcp:DHCP 服務軟件包
dhcp-common:DHCP 命令軟件包
- 服務名
dhcpd:DHCP 服務名
dhcrelay:DHCP 中(zhōng)繼服務名
- 端口号
udp 67:客戶端的目标端口,用來向服務端請求 DHCP
udp 68:服務端的源端口,用來向客戶端回複數據包
- 配置文(wén)件
/etc/dhcp/dhcpd.conf:默認為空文(wén)件,需要導入模闆文(wén)件
/usr/share/doc/dhcp-4.*.*/dhcp.conf.sample:DHCP 的模闆配置文(wén)件
/etc/sysconfig/shcrelay:中(zhōng)繼配置文(wén)件
3.3.3 DHCP 配置文(wén)件詳解
subnet 10.5.5.0 netmask 255.255.255.224 {
#聲明要分配的網段和(hé)子(zǐ)網掩碼
range 10.5.5.26 10.5.5.30;
#聲明可(kě)用的IP地址
option domain-name-servers ns1.internal.example.org;
#設置DNS域
option domain-name "internal.example.org";
#設置DNS服務器(qì)地址
option routers 10.5.5.1;
#默認網關(guān)的地址
option broadcast-address 10.5.5.31;
#廣播地址
default-lease-time 600;
#默認租約(s)
max-lease-time 7200;
#最大租約(s)
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
#給某個(gè)主機設置固定的IP地址
3.4 DHCP 實驗部署
3.4.1 DHCP 基本功能
#查看 dhcp 和(hé) dhcp-common rpm包有沒有安裝
[root@test2 ~]# rpm -q dhcp
未安裝軟件包 dhcp
[root@test2 ~]# rpm -q dhcp-common
dhcp-common-4.2.5-68.el7.centos.1.x86_64
#安裝 DHCP
[root@test2 ~]# yum install -y dhcp
#生成配置文(wén)件:将模闆文(wén)件粘貼到配置文(wén)件
[root@test2 ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#修改配置文(wén)件
#将配置文(wén)件的前幾個(gè) subnet 聲明注釋掉,修改最後一個(gè) subnet
[root@test2 ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.117.0 netmask 255.255.255.0 {
#dhcp 服務器(qì)所在網段
range 192.168.117.200 192.168.117.210;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
#重啟 dhcp 服務
[root@test2 ~]# systemctl restart dhcpd
DHCP 功能測試
#另一台主機開啟 IP 自動(dòng)獲取功能
[root@test1 ~]# nmtui
- 編輯連接 ---- 回車(chē)鍵
- 網卡名 ens33 ---- 回車(chē)鍵
- 光标移動(dòng)到“手動(dòng)” ---- 按回車(chē)鍵改為“自動(dòng)”
- 光标下(xià)移到“确定” ---- 按回車(chē)鍵,完成配置
#重啟網卡并查看IP
[root@test1 ~]# systemctl restart network
[root@test1 ~]# ip a
客戶端成功獲取服務端地址池中(zhōng)的 IP
DHCP 服務端查看 IP 租約日志
[root@test2 ~]# tail -10 /var/log/messages
Oct 14 00:04:34 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 00:04:34 test2 dhcpd: DHCPACK>(test1) via ens33
Oct 14 00:08:29 test2 dhcpd: DHCPREQUEST for 192.168.117.200 from 00:0c:29:80:3b:35 (test1) via ens33
Oct 14 00:08:29 test2 dhcpd: ns1.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 00:08:29 test2 dhcpd: DHCPACK>(test1) via ens33
3.4.2 固定地址分配
#獲取客戶機的 mac 地址
[root@test1 ~]# ip a | awk 'NR==8 {print $2}'
00:0c:29:80:3b:35
#在實驗3.4.1 的基礎上,編輯 DHCP 服務器(qì)的配置文(wén)件并重啟服務
[root@test2 ~]# vim /etc/dhcp/dhcpd.conf
host fantasia {
hardware ethernet 00:0c:29:80:3b:35;
#客戶端網卡 mac 地址
fixed-address 192.168.117.205;
#指定客戶端 IP
}
[root@test2 ~]# systemctl restart dhcpd
#重啟 DHCP 客戶機的網卡并查看IP
[root@test1 ~]# systemctl restart network
客戶端成功獲取服務端地址池中(zhōng)的指定 IP:192.168.117.205
DHCP 服務端查看 IP 租約日志
[root@test2 ~]# tail -10 /var/log/messages
Oct 14 22:00:45 test2 dhcpd: ns2.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: rtr-239-0-1.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: rtr-239-0-2.example.org: host unknown.
Oct 14 22:00:45 test2 dhcpd: DHCPOFFER>for 192.168.117.205.
Oct 14 22:00:45 test2 dhcpd: Remove host declaration fantasia or remove 192.168.117.205
Oct 14 22:00:45 test2 dhcpd: from the dynamic address pool for 192.168.117.0/24
Oct 14 22:00:45 test2 dhcpd: DHCPREQUEST for 192.168.117.205 (192.168.117.131) from 00:0c:29:80:3b:35 via ens33
Oct 14 22:00:45 test2 dhcpd: DHCPACK alt="在這裡插入圖片描述" width="600" height="400" />
實驗環境準備
準備三台服務器(qì)并處于同一網絡模式,一個(gè) DHCP 服務器(qì),兩個(gè)客戶端
主機名服務IPdhcp-client1DHCP 客戶端??dhcp-client2DHCP 客戶端??dhcp-serverDHCP 服務端192.168.117.2
實驗步驟
#設置 DHCP 服務器(qì)的單臂路(lù)由所需子(zǐ)網卡
[root@dhcp-server ~]# cd /etc/sysconfig/network-scripts/
[root@dhcp-server network-scripts]# cp ifcfg-ens33 ifcfg-ens33:1
#編輯這個(gè)文(wén)件修改網卡名和(hé) IP 地址
[root@dhcp-server network-scripts]# vim ifcfg-ens33:1
NAME=ens33
DEVICE=ens33:1
ONBOOT=yes
BOOTPROTO=none
IPADDR="192.168.100.132"
NETMASK=255.255.255.0
GATEWAY=192.168.117.2
DNS1=192.168.117.2
#重啟網卡并查看IP
[root@dhcp-server network-scripts]# systemctl restart network
[root@dhcp-server network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:05:c5:49 brd ff:ff:ff:ff:ff:ff
inet 192.168.117.132/24 brd 192.168.117.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.100.132/24 brd 192.168.100.255 scope global noprefixroute ens33:1
#子(zǐ) IP 配置成功
valid_lft forever preferred_lft forever
#開啟内核路(lù)由轉發功能
[root@dhcp-server ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#刷新内核參數
[root@dhcp-server ~]# sysctl -p
net.ipv4.ip_forward = 1
#安裝 DHCP 服務
[root@dhcp-server ~]# yum install -y dhcp
#生成配置文(wén)件
[root@dhcp-server ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#修改配置文(wén)件
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
shared-network 100-117 {
subnet 192.168.117.0 netmask 255.255.255.0 {
option routers 192.168.117.132;
range 192.168.117.10;
}
subnet 192.168.100.0 netmask 255.255.255.0 {
option routers 192.168.100.132;
range 192.168.100.10 192.168.100.20;
}
}
#重啟 DHCP 服務
[root@dhcp-server ~]# systemctl restart dhcpd
#dhcp 客戶端開啟 IP 自動(dòng)獲取功能(詳見:3.4.1)
#dhcp-client1 重啟網卡,并查看IP
[root@dhcp-client1 ~]# ifdown ens33;ifup ens33
成功斷開設備 'ens33'。
連接已成功激活(D-Bus 活動(dòng)路(lù)徑:/org/freedesktop/NetworkManager/ActiveConnection/9)
#dhcp-client2 重啟網卡,并查看IP
[root@dhcp-client2 ~]# ifdown ens33;ifup ens33
成功斷開設備 'ens33'。
連接已成功激活(D-Bus 活動(dòng)路(lù)徑:/org/freedesktop/NetworkManager/ActiveConnection/9)
#測試兩個(gè)客戶端能否通(tōng)信
[root@dhcp-client1 ~]# ping 192.168.117.10
PING 192.168.117.10 (192.168.117.10) 56(84) bytes of data.
64 bytes from 192.168.117.10: icmp_seq=1 ttl=64 time=0.645 ms
64 bytes from 192.168.117.10: icmp_seq=2 ttl=64 time=0.330 ms
64 bytes from 192.168.117.10: icmp_seq=3 ttl=64 time=0.393 ms
64 bytes from 192.168.117.10: icmp_seq=4 ttl=64 time=0.366 ms
3.4.4 DHCP 中(zhōng)繼
DHCP 中(zhōng)繼介紹
DHCP Relay(DHCPR)中(zhōng)繼是一個(gè)小程序,可(kě)以實現在不同子(zǐ)網和(hé)物理網段之間處理和(hé)轉發 dhcp 信息的功能。
環境準備(VMware 虛拟機)
主機名服務網絡連接模式IPdhcp-serverDHCP 服務端VMnet8192.168.117.130routerDHCP 中(zhōng)繼VMnet8 + VMnet9192.168.117.131 + 192.168.200.100dhcp-client外網客戶端VMnet8 + VMnet9??
關(guān)閉防火牆(……略……)
VMware 虛拟網絡配置
- 打開虛拟網絡編輯器(qì),添加虛拟網段 VMnet8 和(hé) VMnet9,關(guān)閉 DHCP 功能
DHCP 服務器(qì)網絡配置
DHCP 中(zhōng)繼網絡配置
- DHCP 中(zhōng)繼端在添加一塊網絡适配器(qì),網絡分别處于 VMnet8 和(hé) VMnet9
外網客戶端網絡配置
- dhcp-client 端在添加一塊網絡适配器(qì),網絡分别處于 VMnet8 和(hé) VMnet9
配置 DHCP 服務端
#将DHCP服務器(qì)的網關(guān)地址改為為DHCP中(zhōng)繼的 IP:192.168.117.131(VMnet8 的IP地址)
[root@dhcp-server ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.117.131
#安裝 DHCP 服務
[root@dhcp-server ~]# yum install -y dhcp
#修改配置文(wén)件
[root@dhcp-server ~]# \cp -af /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
#生明兩個(gè) subnet,其他配置可(kě)以不做操作或删除
subnet 192.168.117.0 netmask 255.255.255.0 {
range 192.168.117.200 192.168.117.250;
option routers 192.168.117.131;
#路(lù)由IP為 DHCP 中(zhōng)繼服務器(qì) VMnet8 IP
}
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.200 192.168.200.250;
option routers 192.168.200.100 ;
#路(lù)由IP為 DHCP 中(zhōng)繼服務器(qì) VMnet9 IP
}
#重啟 DHCP 服務和(hé)網卡
[root@dhcp-server ~]# systemctl restart dhcpd network
配置 DHCP 中(zhōng)繼
#配置網絡(在原有網絡基礎上配置 192.168.200 段的 IP)
[root@router network-scripts]# cd /etc/sysconfig/network-scripts/
[root@router network-scripts]# \cp -af ifcfg-ens33 ifcfg-ens37
[root@router network-scripts]# vim ifcfg-ens37
#隻保留以下(xià)配置文(wén)件即可(kě)
DEVICE=ens37
NAME=ens37
ONBOOT=yes
BOOTPROTO=none
IPADDR="192.168.200.100"
#重啟網絡網卡
[root@router network-scripts]# systemctl restart network
#查看 IP 如(rú)下(xià)
#安裝 DHCP 服務
[root@router network-scripts]# yum install -y dhcp
#開啟 DHCP 中(zhōng)繼功能,指定 DHCP 服務器(qì)的地址
[root@router ~]# dhcrelay -i ens33 -i ens37 192.168.117.130
Dropped all unnecessary capabilities.
Internet Systems Consortium DHCP Relay Agent 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening>#開啟内核路(lù)由轉發功能
[root@router network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#刷新内核參數
[root@router network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
配置外網客戶端
- IP 改為自動(dòng)獲取(詳:3.4.1)
[root@dhcp-client ~]# nmtui
- 查看主機 IP
[root@dhcp-client ~]# ip a
- IP 地址獲取成功
IP 地址獲取失敗可(kě)能原因
- 請檢查您的網絡适配器(qì)設置。
- 請檢查防火牆是否關(guān)閉。
- 檢查 dhcp-sever 和(hé) router 主機的網絡連通(tōng)性,注意 dhcp-server 網關(guān)地址指向。
- 檢查 dhcp-server 中(zhōng) DHCP 服務配置文(wén)件。