目录
1.DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
一、DHCP 服务概述
1.DHCP(Dynamic Host Configuration Protocol)动态主机配置协议
DHCP 是由 Internet 工作任务小组设计开发的,专门用于为 TCP/IP 网络中的计算机自动 分配 TCP/IP 参数的协议。 使用 DHCP 可以减少管理员的工作量,避免 IP 地址冲突,当网络更改 IP 地址网段时不 需要再重新配置每个用户的 IP 地址,提高了 IP 地址的利用率,方便客户端的配置。
2.可分配的地址信息主要包括
网卡的 IP 地址、子网掩码、对应的网络地址、广播地址、默认网关地址、DNS 服务器 地址等。
3.DHCP 的分配方式
(1)自动分配:
分配到一个 IP 地址后永久使用
(2)手动分配:
由 DHCP 服务器管理员专门指定 IP 地址
(3)动态分配:使用完后释放该 IP,供其他客户机使用
4.DHCP 的租约过程
(1)客户机从 DHCP 服务器获取 IP 地址的过程称为 DHCP 的租约过程。
(2)租约过程分为四个步骤:
客户机请求 IP(客户机发 DHCP Discover 广播包)
当一个 DHCP 客户机启动时,客户机还没有 IP 地址,所以客户机需要通过 DHCP获取一个合法的地址。此时 DHCP 客户机以广播方式(因为 DHCP 服务器的 IP 地址 对客户机来说是未知的)发送 DHCP Discover 发现信息来寻找 DHCP 服务器。广播 信息中包含 DHCP 客户机的 MAC 地址和计算机名,以便 DHCP 服务器确定是哪个客 户机发送的请求。
服务器响应(服务器发 DHCP Offer 广播包)
当 DHCP 服务器接收到来自客户机请求 IP 地址的信息时,它就在自己的 IP 地址池中查找是否有合法的 IP 地址提供给客户机,如果有,DHCP 服务器就会将此 IP 地址做上标记,加入到 DHCP Offer 的消息中,然后 DHCP 服务器就广播一则包含下 列信息的 DHCP Offer 消息:DHCP 客户机的 MAC 地址、DHCP 服务器提供的合法 IP 地址、子网掩码、默认网关、租约的期限、DHCP 服务器的 IP 地址。
客户机选择 IP(客户机发 DHCP Request 广播包)
DHCP 客户机从接收到的第一个 DHCP Offer 消息中提取 IP 地址,发出 IP 地址的 DHCP 服务器将该地址保留,这样该地址就不能再分配给另一个 DHCP 客户机。 当客户机从第一个 DHCP 服务器接收到 DHCP Offer 消息并提取了 IP 地址后,客户 机将 DHCP Request 消息广播到所有的 DHCP 服务器,表面它接收提供的内容。DHCP Request 消息包括为客户机提供 IP 配置的服务器的服务标识符(服务器 IP 地址)。 DHCP 服务器查看服务器标识符字段,以确定提供的 IP 是否被接受,如果 DHCP Offer 被拒绝,则 DHCP 服务器取消并保留其 IP 地址以提供给下一个 IP 租约的的请求。
服务器确定租约(服务器发 DHCP ACK 广播包)
DHCP 服务器接收到 DHCP Request 消息后,以 DHCP ACK 消息的形式向客户机广播成功确认,该消息包括含有 IP 地址的有效租约和其他可配置的信息。当客户 机收到 DHCP ACK 消息时,它就配置了 IP 地址,完成 TCP/IP 的初始化。
重新登录
DHCP 客户机每次重新登录网络时,不需要再发送 DHCP Discover 信息,而是直接发送包含前一次所分配的 IP 地址的 DHCP Request 请求信息。当 DHCP 服务器接收到这一信息 后,它会尝试让 DHCP 客户机继续使用原来的 IP 地址,并回答一个 DHCP ACK 确认信息。
如果此 IP 地址已无法再分配给原来的 DHCP 客户机使用(如 IP 地址已经分配给其 他的 DHCP 客户机使用),DHCP 服务器给 DHCP 客户机回答一个 DHCP Nack 否认信息。当原 来的 DHCP 客户机接收到此 DHCP Nack 否认信息后,它就必须重新发送 DHCP Discover 发现 信息来请求信的 IP 地址。
二、Linux 中 DHCP 的安装与配置
1.DHCP 的安装
(1)挂载安装光盘
(2) YUM安装光盘中的dhcp(本地 yum 仓库的建立 此处略,参见第一册 Linux 系统管理 03)
2.配置 DHCP 服务
- 主配置文件:/etc/dhcp/dhcpd.conf
- 执行程序:/usr/sbin/dhcpd、/usr/sbin/dhcrelay
- 服务脚本:/etc/init.d/dhcpd、/etc/init.d/dhcrelay
- 执行参数配置:/etc/sysconfig/dhcpd
- DHCP 中继配置:/etc/sysconfig/dhcrelay
(1)修改配置文件/etc/dhcp/dhcpd.conf
其余无用内容可删除
保存退出。(注意,此 DHCP 服务器必须有一个网络设备的 IP 地址属于所设置的网段)
设置dhcp服务开机自启并启动服务
3.客户端验证
再开启一台Centos7主机,选择网卡为与dhcp相同的网卡段,然后设置为dhcp自动获取
三、Linux 中 DHCP 服务启动失败排错
1.排错思路:
观察日志文件/var/log/messages,找出配置文件错误进行修改。
2.示例:
(1)DHCP 服务器的网卡配置中没有与所配置的网段相匹配的 IP 地址
修改 DHCP 服务器的提供服务的网卡的 IP 地址,使之与配置服务的网段不符,重启 DHCP 服务
查看报错详情,根据报错查找问题
[root@linuxli ~]# journalctl -xe
(2)配置文件编写错误
模拟错误,删除一些字符。
启动 DHCP 服务,观察日志文件
systemctl restart dhcpd.service
journalctl -xe
分析:line8 line11 附近有错误。Configuration file errors encountered – exiting,配置 文件错误–退出。
解决方案:修改配置文件,在日志文件报错行附近多加关注,若差不出哪里出错, 可以与/usr/share/doc/dhcp-*/dhcp.conf.sample 进行对比。
四、Linux 中 DHCP 中继配置
DHCP服务器只作用于局域网同一网段内,客户端是通过广播消息来获得DHCP服务器响应后才能得到IP地址的,但广播消息不能跨越子网,那么如何让客户端获取到DHCP服务器提供的IP地址呢?这就是DHCP中继服务器的功能了。
1.搭建实验环境
俩台 CentOS 7 虚拟机,一台 Windows7 虚拟机,配置要求如下:
第一步,在 DHCP-Server(DHCP 服务器)中配置,并启动 DHCP 服务
配置DHCP服务器的网络参数
[root@dhcp-server ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.100.100
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=107e7300-d2d8-4bb0-9f02-3ad5ab2d40dd
DEVICE=ens33
ONBOOT=YES
重启网络服务
[root@dhcp-server ~]# systemctl restart network
查看DHCP服务器IP
[root@dhcp-server ~]# 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:c6:b0:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::eb19:a2af:11b5:a47a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
编辑DHCP服务器的配置文件
[root@dhcp-server ~]# cat /usr/share/doc/dhcp*/dhcpd.conf.example >/etc/dhcp/dhcpd.conf
[root@dhcp-server ~]# vim /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
option domain-name "linuxli.com";
option domain-name-servers 8.8.8.8, 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.100 192.168.100.200;
option routers 192.168.100.1;
}
# 其他三个网段
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
}
subnet 192.168.20.0 netmask 255.255.255.0 {
range 192.168.20.100 192.168.20.200;
option routers 192.168.20.1;
}
subnet 192.168.30.0 netmask 255.255.255.0 {
range 192.168.30.100 192.168.30.200;
option routers 192.168.30.1;
}
启动DHCP服务,并检查状态
[root@dhcp-server ~]# systemctl restart dhcpd
[root@dhcp-server ~]# netstat -utpln |grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 16600/dhcpd
DHCP服务器一切正常!至此DHCP服务器的配置已经完成;下一步配置DHCP中继代理服务器。
第二步,修改 DHCP-Relay(DHCP 中继)网络连接模式
【注意】当网卡较多时,此时选择的 VMnet 与前面所规划的网段不一定是一一对应的,可 以选择停用三块网卡,观察剩下唯一一块网卡的 IP 地址网段,属于规划时的哪个 VMnet, 将其一一对应。
第三步,配置 DHCP-Relay(DHCP 中继)网卡 IP 地址结果为下图,具体过程略
[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:23:10:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe23:1020/64 scope link tentative
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:23:10:2a brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global noprefixroute ens36
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe23:102a/64 scope link tentative
valid_lft forever preferred_lft forever
4: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:23:10:34 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.1/24 brd 192.168.20.255 scope global noprefixroute ens37
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe23:1034/64 scope link
valid_lft forever preferred_lft forever
5: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:23:10:3e brd ff:ff:ff:ff:ff:ff
inet 192.168.30.1/24 brd 192.168.30.255 scope global noprefixroute ens38
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe23:103e/64 scope link tentative
valid_lft forever preferred_lft forever
第四步,在 DHCP-Relay(DHCP 中继)上安装 dhcp 服务,具体安装过程详见前文,此处 略。
第五步,打开DHCP中继服务器路由转发功能
[root@dhcp-server ~]# vim /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
使设置立即生效,执行以下命令:
[root@dhcp-server ~]# sysctl -p
第六步,开启DHCP中继服务
[root@dhcp-server ~]# dhcrelay 192.168.100.100
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 on LPF/ens38/00:0c:29:23:10:3e
Sending on LPF/ens38/00:0c:29:23:10:3e
Listening on LPF/ens37/00:0c:29:23:10:34
Sending on LPF/ens37/00:0c:29:23:10:34
Listening on LPF/ens36/00:0c:29:23:10:2a
Sending on LPF/ens36/00:0c:29:23:10:2a
Listening on LPF/ens33/00:0c:29:23:10:20
Sending on LPF/ens33/00:0c:29:23:10:20
Sending on Socket/fallback
[root@tianxiang ~]# netstat -utpln |grep dhc
udp 0 0 0.0.0.0:67 0.0.0.0:* 3832/dhcrelay
第七步,测试
win7使用不同的网卡分别测试自动获取的IP
【虚拟机中 DHCP 中继配置失败的可能原因】
虚拟机中添加的网卡顺序,与所选 VMnet 不一定是一一对应的顺序。所以在实验中若遇 到不对应的情况,可以先停用其他网卡,只留下一块,观察剩下网卡的 IP 地址网段是规划 时的 VMnet 几,将其修改,。以此类推,将所有网卡的 IP 地址网段与事先规划的 VMnet 相 对应,修改后重启网络服务即可。