共计 8126 个字符,预计需要花费 21 分钟才能阅读完成。
本文环境 : DHCP 服务器IP 192.168.1.211(RHEL5.2)
当局域网中有大量的主机时,如果逐一为每台主机手动配置 IP 地址、默认网关、DNS服务器地址等网络参数,显示会非常费力。而DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器的应用,正好可以解决这个问题。
1-)DHCP协议的工作方式:
(1)客户端:利用广播发送 DHCP 服务器的请求数据包
若客户端网络设置 DHCP 自动获取 IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP 服务器的 UDP 数据包给所有物理网段内的计算机。此数据包的目标 IP 会是 255.255.255.255(广播),所以一般主机收到这个数据包后会直接丢弃,但局域网内若有DHCP 服务器的话,则会进行后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择
DHCP服务器在收到客户端的请求后,会针对这个客户端的硬件地址(MAC)与本身的设置数据来进行以下工作:
到服务器的日志文件中查找该用户之前是否曾经组用过某个 IP,若有且该IP 目前无人使用,则提供该 IP 给客户端
若配置文件针对 MAC 地址提供特定的固定 IP 时,则提供该固定 IP 给客户端
若不符合以上两个条件时,则随机选取当前没有使用的 IP 参数给客户端,并记录下来
总之,服务器会针对客户端的要求提供一组网络参数租约给客户端选择,由于此时客户端尚未有 IP,因此在服务器端响应的数据包信息中,主要是针对客户端的MAC 来给予回应的(单播响应客户端)。此时服务器会保留这个租约等待客户端的回应。
(3)客户端:决定选择 DHCP 服务器提供的网络参数租约并向服务器确认
由于局域网内并非仅有一台 DHCP 服务器,但客户机仅能接受一组网络参数租约。 若网络中有多台 DHCP 服务器响应客户端,则哪台 DHCP 服务器先响应客户端,客户端就会接受这台 DHCP 服务器提供的网络参数。当决定使用此服务器提供的网络参数租约后,客户端便开始使用这组网络参数来设置自己的网络环境。此外,客户端也会发送一个广播数据包给所有物理网段的主机,告知已经接受该服务器的的租约。此时若有两台以上的 DHCP 服务器时,则这些没有被接受的服务器会收回该 IP 租约。被接受的服务器会进行以下动作
(4)服务器端:记录该次租约行为并向客户端确认
当服务器收到客户端的确认选择后,服务器会回送确认的响应数据包,并且告知该客户端这个网络参数租约的期限,并且开始租约倒计时。
Linux 系统下构建 DHCP 服务器 http://www.linuxidc.com/Linux/2013-06/86531.htm
CentOS 下配置主从 DNS 服务器以及 DHCP 下的 DDNS http://www.linuxidc.com/Linux/2013-06/85634.htm
SUSE Linux 11 pxe+DHCP+tftp+ftp 无人值守安装 http://www.linuxidc.com/Linux/2013-06/85481.htm
Linux 下架设 DHCP 服务器过程及 3 种测试 http://www.linuxidc.com/Linux/2013-05/84832.htm
Linux 上一步一步实现 DHCP 服务器 http://www.linuxidc.com/Linux/2013-04/82244.htm
CentOS 6.5 系统下构建 DHCP 服务器 http://www.linuxidc.com/Linux/2014-06/103203.htm
2-)关于租约期限:
除非客户端关闭网络接口、重新启动、关机等脱机行为,这个时候 server 端就会将该 IP 收回,并放到 server 的备用区中,以便日后使用。
既然有租约期限,那么是否代表在某个时间点还需手动获取新的 IP 呢?不需要的,目前的 DHCP 客户端程序大多会主动依据租约时间去重新申请IP(renew)。
一般来说,假设租约期限为 T 小时,那么客户端会在 0.5T 时主动向 DHCP 服务器发出重新要求网络参数的数据包(直接从第 3 步开始,不会再次广播查找 DHCP 服务器),若这次请求没有成功,则会在 0.85T 时再次发送数据包一次。 正因如此,服务器会启动 Port67 监听客户端请求,而客户端会启动 Port 68 主动向服务器请求。
3-)配置 DHCP 服务器:
先执行“rpm –q dhcp”命令查看系统中是否已经安装了 dhcp 软件,若未安装则安装吧
安装完毕后,开始建立配置文件 /etc/dhcpd.conf(RHEL5),该文件中默认并不包含有效的配置,需管理员手动建立。我们可以根据文件范本来建立新的dhcpd.conf 文件。需要注意的是:在 RHEL6.X 中dhcp的配置文件名为/etc/dhcp/dhcpd.conf(RHEL6),会在后续介绍。
3-1)/etc/dhcpd.conf文件的构成:
1-)全局设置(会影响整个 dhcp 服务器)
假设 dhcpd 管理的只有一个子网的局域网,那么除了 IP 之外的许多网络参数就可以放在全局设置的区域中,包括租约期限、DNS主机的 IP 地址、路由器的 IP 地址及动态 DNS(DDNS)更新的类型等。当固定IP 及动态 IP 内没有定义到某些设置时,则以全局设置为准。
default-lease-time 时间 :默认的租约时间,单位秒,表示客户机租约这个IP 的默认时间
max-lease-time 时间:最大租约时间,单位秒,表示允许客户机请求的最大租约时间
option domain-name“域名 ”:默认搜索区域,如果在/etc/resolv.conf 里面设置了一个 search google.com,这表示当你要查找主机名时,DNS 系统会主动帮你在所要查找的主机名后面加上这个域名后缀。
option domain-name-serversIP1,IP2:为客户机指定解析域名时使用的 DNS 服务器地址,该配置选项可以修改客户端的 /etc/resolv.conf 文件,即 nameserver 后面接的 DNS IP,多个DNS 地址以逗号分隔
ddns-update-style 类型 :因为DHCP 客户端所取得的 IP 通常是一直变动的,所以某台主机的主机名与 IP 的对应就很难处理。此时 DHCP 可以通过 ddns 来更新主机名与 IP 的对应关系。可设为none
ignore client-updates:与上一个设置值有关,客户端可以通过 dhcpd 服务器来更新 DNS 相关的信息。不过在这里我们不谈这个,因此将它设置为ignore(忽略)了
option routers 路由器的地址 :设定路由器的IP 地址,routers记得需要加 s 才对!
2-)subnet网段声明
一台 DHCP 服务器可以为多个网段提供服务,因此 subnet 网段声明必须有而且可以有多个。
那么上图括号内还有什么参数呢?那就是到底 IP 是固定的还是动态的。
range IP1 IP2:在这个局域网中,给予一个连续的 IP 地址段用来发放给客户端使用,IP1 IP2指的是分配给客户端使用的 IP 范围。
host 主机名 {…}:这个host 就是指定固定 IP 对应到 MAC 的设置值,主机名可以自行设置,在大括号内需要指定 MAC 与固定的 IP 了。那么这两个值怎么设置呢?看看下图吧
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-11/108899p2.htm
3-2)一个局域网的 DHCP 案例
公司要求为内部局域网中的主机提供 DHCP 服务,内部 eth0 的IP为192.168.1.211。
内部网段设置为 192.168.1.0/24,且内部计算机的router 为192.168.1.254
此外 DNS 地址设为202.106.0.20、202.106.148.1
每个用户的默认租约为 3 天,最长为 6 天
要分配的 IP 只有 192.168.1.100~192.168.1.200,其他IP 保留
还有一台主机,其 MAC 地址是 00:50:56:C0:00:08,设置其主机名为lisi 且IP为192.168.1.88
注意:客户机保留的 IP 不要出现在 range 中。以上要求配置如下图:
接下来就需要启动相关的服务了,在启动 dhcpd 服务之前,应确保 DHCP 服务器具有静态 IP,并且至少有一个网络接口的IP 与DHCP服务器中的一个 subnet 网段相对应,否则无法正常启动 dhcpd 服务。例如,以下操作启动 dhcpd 服务,并检查 UDP 67 端口是否在监听,以确认 DHCP 服务器是否正常。
在早期的 Linux 系统中(CentOS5.X后不存在),当主机有多个接口的话,可能会让多个接口同时来监听,那就可能会出现错误。假设还有一个接口 eth1 在10.0.0.0/8,那万一 DHCP 同时监听两个接口的话,想一想若 10.0.0.0/8 网络中的客户端发出 DHCP 数据包的请求时,会取得什么 IP 呢?当然是 192.168.1.X 啦。针对这种情况我们可以编辑 /etc/sysconfig/dhcpd 文件来指定它所要监听的网络接口,我们可以这样做:
通过日志文件来观察 DHCP 服务的启动情况(看到下图的信息就说明成功了)
若 dhcpd 服务启动失败呢?我们来看看日志文件里究竟是什么原因吧
上图的数据我们发现在第 5、9 行有错误,设置错误的地方在行号下面还用指数符号(^)特别标注出来,由上面的情况来看,第 5 行应该是 routers 忘加 s 了,第 9 行应该是 netmask 而非network。
在服务器中查看一下租约文件吧,看看有哪些主机记录:
我们再打开一个 win7 和Linux,win7为固定 IP(即lisi),Linux 则动态获取。
通过上图我们发现配置文件保留的IP(主机)将不会出现在该租约文件中。
本文环境 : DHCP 服务器IP 192.168.1.211(RHEL5.2)
当局域网中有大量的主机时,如果逐一为每台主机手动配置 IP 地址、默认网关、DNS服务器地址等网络参数,显示会非常费力。而DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器的应用,正好可以解决这个问题。
1-)DHCP协议的工作方式:
(1)客户端:利用广播发送 DHCP 服务器的请求数据包
若客户端网络设置 DHCP 自动获取 IP,则当客户端开机或者是重新启动网卡时,客户端主机会发送出查找DHCP 服务器的 UDP 数据包给所有物理网段内的计算机。此数据包的目标 IP 会是 255.255.255.255(广播),所以一般主机收到这个数据包后会直接丢弃,但局域网内若有DHCP 服务器的话,则会进行后续行为。
(2)服务器端:提供客户端网络相关的租约以供选择
DHCP服务器在收到客户端的请求后,会针对这个客户端的硬件地址(MAC)与本身的设置数据来进行以下工作:
到服务器的日志文件中查找该用户之前是否曾经组用过某个 IP,若有且该IP 目前无人使用,则提供该 IP 给客户端
若配置文件针对 MAC 地址提供特定的固定 IP 时,则提供该固定 IP 给客户端
若不符合以上两个条件时,则随机选取当前没有使用的 IP 参数给客户端,并记录下来
总之,服务器会针对客户端的要求提供一组网络参数租约给客户端选择,由于此时客户端尚未有 IP,因此在服务器端响应的数据包信息中,主要是针对客户端的MAC 来给予回应的(单播响应客户端)。此时服务器会保留这个租约等待客户端的回应。
(3)客户端:决定选择 DHCP 服务器提供的网络参数租约并向服务器确认
由于局域网内并非仅有一台 DHCP 服务器,但客户机仅能接受一组网络参数租约。 若网络中有多台 DHCP 服务器响应客户端,则哪台 DHCP 服务器先响应客户端,客户端就会接受这台 DHCP 服务器提供的网络参数。当决定使用此服务器提供的网络参数租约后,客户端便开始使用这组网络参数来设置自己的网络环境。此外,客户端也会发送一个广播数据包给所有物理网段的主机,告知已经接受该服务器的的租约。此时若有两台以上的 DHCP 服务器时,则这些没有被接受的服务器会收回该 IP 租约。被接受的服务器会进行以下动作
(4)服务器端:记录该次租约行为并向客户端确认
当服务器收到客户端的确认选择后,服务器会回送确认的响应数据包,并且告知该客户端这个网络参数租约的期限,并且开始租约倒计时。
Linux 系统下构建 DHCP 服务器 http://www.linuxidc.com/Linux/2013-06/86531.htm
CentOS 下配置主从 DNS 服务器以及 DHCP 下的 DDNS http://www.linuxidc.com/Linux/2013-06/85634.htm
SUSE Linux 11 pxe+DHCP+tftp+ftp 无人值守安装 http://www.linuxidc.com/Linux/2013-06/85481.htm
Linux 下架设 DHCP 服务器过程及 3 种测试 http://www.linuxidc.com/Linux/2013-05/84832.htm
Linux 上一步一步实现 DHCP 服务器 http://www.linuxidc.com/Linux/2013-04/82244.htm
CentOS 6.5 系统下构建 DHCP 服务器 http://www.linuxidc.com/Linux/2014-06/103203.htm
2-)关于租约期限:
除非客户端关闭网络接口、重新启动、关机等脱机行为,这个时候 server 端就会将该 IP 收回,并放到 server 的备用区中,以便日后使用。
既然有租约期限,那么是否代表在某个时间点还需手动获取新的 IP 呢?不需要的,目前的 DHCP 客户端程序大多会主动依据租约时间去重新申请IP(renew)。
一般来说,假设租约期限为 T 小时,那么客户端会在 0.5T 时主动向 DHCP 服务器发出重新要求网络参数的数据包(直接从第 3 步开始,不会再次广播查找 DHCP 服务器),若这次请求没有成功,则会在 0.85T 时再次发送数据包一次。 正因如此,服务器会启动 Port67 监听客户端请求,而客户端会启动 Port 68 主动向服务器请求。
3-)配置 DHCP 服务器:
先执行“rpm –q dhcp”命令查看系统中是否已经安装了 dhcp 软件,若未安装则安装吧
安装完毕后,开始建立配置文件 /etc/dhcpd.conf(RHEL5),该文件中默认并不包含有效的配置,需管理员手动建立。我们可以根据文件范本来建立新的dhcpd.conf 文件。需要注意的是:在 RHEL6.X 中dhcp的配置文件名为/etc/dhcp/dhcpd.conf(RHEL6),会在后续介绍。
3-1)/etc/dhcpd.conf文件的构成:
1-)全局设置(会影响整个 dhcp 服务器)
假设 dhcpd 管理的只有一个子网的局域网,那么除了 IP 之外的许多网络参数就可以放在全局设置的区域中,包括租约期限、DNS主机的 IP 地址、路由器的 IP 地址及动态 DNS(DDNS)更新的类型等。当固定IP 及动态 IP 内没有定义到某些设置时,则以全局设置为准。
default-lease-time 时间 :默认的租约时间,单位秒,表示客户机租约这个IP 的默认时间
max-lease-time 时间:最大租约时间,单位秒,表示允许客户机请求的最大租约时间
option domain-name“域名 ”:默认搜索区域,如果在/etc/resolv.conf 里面设置了一个 search google.com,这表示当你要查找主机名时,DNS 系统会主动帮你在所要查找的主机名后面加上这个域名后缀。
option domain-name-serversIP1,IP2:为客户机指定解析域名时使用的 DNS 服务器地址,该配置选项可以修改客户端的 /etc/resolv.conf 文件,即 nameserver 后面接的 DNS IP,多个DNS 地址以逗号分隔
ddns-update-style 类型 :因为DHCP 客户端所取得的 IP 通常是一直变动的,所以某台主机的主机名与 IP 的对应就很难处理。此时 DHCP 可以通过 ddns 来更新主机名与 IP 的对应关系。可设为none
ignore client-updates:与上一个设置值有关,客户端可以通过 dhcpd 服务器来更新 DNS 相关的信息。不过在这里我们不谈这个,因此将它设置为ignore(忽略)了
option routers 路由器的地址 :设定路由器的IP 地址,routers记得需要加 s 才对!
2-)subnet网段声明
一台 DHCP 服务器可以为多个网段提供服务,因此 subnet 网段声明必须有而且可以有多个。
那么上图括号内还有什么参数呢?那就是到底 IP 是固定的还是动态的。
range IP1 IP2:在这个局域网中,给予一个连续的 IP 地址段用来发放给客户端使用,IP1 IP2指的是分配给客户端使用的 IP 范围。
host 主机名 {…}:这个host 就是指定固定 IP 对应到 MAC 的设置值,主机名可以自行设置,在大括号内需要指定 MAC 与固定的 IP 了。那么这两个值怎么设置呢?看看下图吧
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-11/108899p2.htm
4-)DHCP客户端的设置
设置 Linux 客户机使用 DHCP 的方式自动获取 IP 地址,更改网卡配置文件:
同时需要注释掉自己的默认路由的设置。现在我们来查看一下吧!
看一下自己获取的 ip 地址吧:
查阅一下 /etc/resolv.conf 文件吧
查看一下路由:
看一看客户端租约所记载的信息:
在上图中,可以发现客户端取得的数据都被记录在 /var/lib/dhclient/dhclient*-eth0.leases 文件中,如果你有多个网卡,那么每个网卡自己的 DHCP 请求就会被写入到不同文件名的文件中去。通过观察该文件就知道你的数据如何啦。
也许大家会发现,有时候客户端每次取得的 IP 都是固定的,可是我们不是随机获取的吗?因为上面的 dhclient-eth0.leases 文件里面的 fixed-address 指定了想要固定的 IP 选项。如果 DHCP 服务器的该 IP 没有被分配他用,也在规定的 range 设定值内,那么会再次把这个 IP 分配给这个客户端。 如果你想要不同的 IP 呢?那将你想要的 IP 取代上述的设置值即可。
在前面我们谈到局域网内如果有多个 DHCP 服务器(假设有 DHCP1、DHCP2),那么每次客户端对整个物理网段广播时,DHCP 服务器将是先抢先得的局面。但是若第一次取得 DHCP1 服务器的 IP 后,以后重新启动网络,都只会取得 DHCP1 的网络参数,这也是因为上述的 dhclient-eth0.leases 客户端文件。因为主机想要获取上次取得的网络参数,因此将会对 DHCP1 请求网络参数。如果想要使用先抢先得的方式取得 IP,或者想使用DHCP2 来取得 IP,那么需要修改或者删除dhclient-eth0.leases 文件即可。
在 Linux 客户机中,可以使用 dhclient 工具来测试 DHCP 服务器。若直接执行 dhclient 命令,则 dhclient 将尝试为除回环接口 lo 以外的所有网络接口通过 DHCP 方式申请新的地址(当前若是静态的则需要修改网卡配置文件 BOOTPROTO 的参数)。 若要为指定接口来自动获取 IP 可以结合 -d 选项,释放 IP 时可以结合 -r 选项,如下图:
我们上面介绍的 DHCP 工作方式、搭建 DHCP 服务器、配置 DHCP 客户端 都是基于 RHEL5 环境的。而在 RHEL6 版本中,DHCP的配置文件为 /etc/dhcp/dhcpd.conf。 其他的配置选项基本相同。
更多 RedHat 相关信息见RedHat 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=10