DHCP 是一种动态组织网络的机制 ,在 DHCP 机制中可分为服务器端和客户端。服务器端使用固定 IP 地址 ,在局域网中提供客户端动态 IP 地址、DNS 配置、gateway 等配置设置。在局域网里架设了 DHCP 服务器以后 ,必须先规划好 1 段或多段 IP 区间以提供给 DHCP 服务器做为设置动态 IP POOL ,接着在 DHCP 服务器上设置使用动态 IP 地址的 POOL 范围、网域域名、网域的 gateway 等 ,设置完成后即可提供服务。
DHCP 客户端启动后 ,会与 DHCP 服务器进行信息交互沟通 ,索取 IP 地址、子网掩码等 TCP/ IP 配置信息。DHCP 客户机使用两种不同的租用方式来与
DHCP 服务器交互信息并获得配置。
1)向 DHCP 服务器索取新的 IP 地址。客户机首次启动时 ,自动执行初始化过程以便从 DHCP 服务器获得租约。DHCP 采用 1 个包含 4 个阶段的过程配置已启用 DHCP 的客户机。
首先 ,客户端首先广播 DHCPDISCOVR 消息 ,服务器端收到后向客户端回答 DHCPOFFER 消息 ,然后客户端向服务器发送 DHCPREQUEST 请求 ,服务器端回答 DHCPACK,然后 DHCP 服务器便向客户端提供 IP 地址、网络掩码等数据。
2)更新 IP 地址的租约。当 DHCP 客户机关闭并在相同的子网上重新启动时 , 客户机一般能获得与其关机之前相同的租约。
如果 DHCP 客户端要延长其使用期限 ,则必须更新其 IP 租约。通常 ,当 DHCP 客户端租约时间超过 50 %时 ,DHCP 客户端自动试图更新它的 IP 地址。DHCP 客户端会向原先提供租约的 DHCP 服务器直接发送 DHCPREQUEST 数据包 , 当客户端能够成功更新租约时 ,DHCP 服务器就会给客户端发送 1 个 DHCPACK数据包以响应更新请求。若更新租约时 ,此 IP 地址已无法再给该客户端使用 (如该地址已经无效或已经被其他计算机使用) ,则 DHCP 服务器发送 1 个 DHCPNAK信息包[1] 。
2 802. 1Q Vlan 在 linux 上的实现
每 1 个支持 802. 1Q 协议的网络设备 ,在发送数据包时 ,都在以太帧头中增加 1 个 4 字节的 TAG标记 ,以指明该数据包属于哪一个 VLAN。当数据包进入另一个支持 802. 1Q 协议的网络设备时 ,会根据
802. 1Q 帧中的 Tag 标记交换到所属 VLAN[2] (表 1) 。表 1 802. 1Q 帧Bytes
DASAVlanTag Type/LenDATAFCS
664246~15004
在 linux 中通过 vconfig 命令设置 802. 1Q Vlan ,
基于 Linux 实现多网段动态分配 IP 地址
vconfig 的基本使用方法如下 : 创建 vlan 100 :
vconfig add eth0 100 / / 创建 VLAN100 ,同时并创
建了一个虚拟 VLAN 接口 eth0. 100 删除 vlan 100 :
vconfig rem eth0. 100
3 实例
我们以架设石河子市某中学的校园网为例 ,进行说明。该校园网网连接 3 个部门 A、B、C ,分别在
3 个不同的 vlan , 其中部门 A 在 vlan 10 ,可以分配
IP 地址范围 192. 168. 1. 0/ 24 ,部门B 在 vlan 11 ,可以分配 IP 地址范围 192. 168. 2. 0/ 24 ,部门 C 在 vlan 12 ,可以分配 IP 地址范围 192. 168. 3. 0/ 24 ,要求使用 1 台 DHCP 服务器为 3 个部门动态分配 IP 地址
(图 1) ,操作系统为 RedHat Linux 9. 0。网络拓扑图如图 1。
图 1 网络拓扑图
3. 1 Linux 内核的要求这里要求内核支持 802. 1Q VLAN ,若内核版本
较低可以到 http :/ / www. kernel. org/ pub/ linux/ kernel 处下载 ,然后重新编译内核(关于内核的编译本文在这里不做介绍) ,启用新内核。
3. 2 网络设备的要求交换机必须支持 802. 1Q 协议 ,这样当数据帧通过交换机时 ,交换机根据会把每个数据帧中添加
TAG头 ,Linux 服务器根据每个数据帧的 TAG 头识别出来自不同 VLAN 的请求而给出相对应的的 IP 地址。
3. 3 在 DHCP 服务器上创建 vlan 并做相关配置
vconfig add eth0 10 / / 为部门 A 创建 vlan 10 ,同时也创建了虚拟 VLAN 接口 eth0. 10 ,以下含义相同 vconfig add eth0 11 vconfig add eth0 12 ip address add 192. 168. 1. 253/ 24 dev eth0. 10 / / 给接口 eth0. 10 设置 IP 地址 ,等同于给 vlan10 设置 IP 地址 ,此地址也作为服务器的监听地址。以下含义相同
IP address add 192. 168. 2. 253/ 24 dev eth0. 11 ip address add 192. 168. 3. 253/ 24 dev eth0. 12
ip link set dev eth0. 10 up / / 启用接口 ,以下含义相同
ip link set dev eth0. 11 up ip link set dev eth0. 12 up
3. 4 配置/ etc/ dhcpd. conf
ddns update style interim; ignore client updates; option domain name ″company. com″; option domain name servers 201. 201. 160. 8 ; option time offset 18000 ;
subnet 192. 168. 1. 0 netmask 255. 255. 255. 0 {
option routers 192. 168. 1. 254 ; option subnet mask 255. 255. 255. 0 ;
range 192. 168. 1. 1 192. 168. 1. 252 ; default lease time 86400 ; max lease2time 86400 ;
}
subnet 192. 168. 2. 0 netmask 255. 255. 255. 0 {
option routers 192. 168. 2. 254 ; option subnet mask 255. 255. 255. 0 ;
range 192. 168. 2. 1 192. 168. 2. 252 ; default lease time 86400 ; max leasetime 86400 ; }
subnet 192. 168. 3. 0 netmask 255. 255. 255. 0 {
option routers 192. 168. 3. 254 ; option subnet mask 255. 255. 255. 0 ;
range 192.168. 3. 1 192. 168. 3. 252 ; default lease time 86400 ; max leasetime 86400 ;
}
3. 5 启动 DHCP 服务器
/ usr/ sbin/dhcpd
现在此台dhcp 服务器就可以同时监听来自 3 个不同 vlan 客户端的 dhcp 请求 ,从而为它们动态分配 IP 地址。事实上 ,通过此技术 1 个 dhcp 服务器可以同时给上百个网段提供动态地址分配 ,本文仅例举了一简单的例子。 .