ubuntu安装dhcp服务

DHCP全称Dynamic Host configuration protocol, 动态主机配置协议。是一个局域网的网络协议,使用UDP协议工作,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。

一、DHCP地址分配机制

三种地址分配方式中, 只有动态分配方式可以重复使用客户端不再需要的地址:

  1. 自动分配方式
    DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器租用到IP地址,就可以永久使用该地址。
  2. 动态分配方式
    DHCP服务器给主机指定一个有时间限制的IP地址, 时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
  3. 手工分配方式
    客户端的IP地址是由网络管理员手动指定,DHCP服务器只是将指定的IP地址告诉客户端主机。

DHCP涉及的常见术语:

  • 作用域
    一个完整的IP地址段,DHCP协议根据作用域来管理网络的分布、分配IP地址及其他配置参数。
  • 超级作用域
    用于管理处于同一个物理网络中的多个逻辑子网段。超级作用域中包含了可以统一管理的作用域列表。
  • 排除范围
    把作用域中的某些IP地址排除,确保这些IP地址不会分配给DHCP客户端。
  • 地址池
    在定义了DHCP的作用域并应用了排除范围后,剩余的用来动态分配给DHCP客户端的IP地址范围。
  • 租约
    DHCP客户端能够使用动态分配的IP地址的时间。
  • 预约
    保证网络中的特定设备总是获取到相同的IP地址。

二、DHCP协议的工作过程

  1. 发现阶段
    DHCP客户机寻找DHCP服务器的阶段。

    DHCP客户机以广播的方式发送DHCP discover 发现信息来寻找DHCP服务器(因为DHCP服务器的IP地址对客户机来说是未知的),由于客户机不知道DHCP服务器的IP地址,所以它使用0.0.0.0的地址作为源地址,使用UDP68端口作为源端口,使用255.255.255.255作为目标地址,使用UDP67端口作为目的端口来广播请求IP地址信息。广播信息中包含了DHCP客户机的MAC地址和计算机名,以便使DHCP服务器能确定是哪个客户机发送的请求。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会作出响应。

  2. 提供阶段
    DHCP服务器提供IP地址的阶段。

    在网络中收到DHCP discover发现信息的DHCP服务器都会作出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置信息,因为DHCP客户机还没有IP地址,所以DHCP服务器使用自己的IP地址作为源地址,使用UDP67端口作为源端口,使用255.255.255.255作为目标地址,使用UDP68端口作为目的端口来广播,通过DHCP offer消息发送给客户端。

  3. 选择阶段
    DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。

    如果有多台DHCP服务器向DHCP客户机发来的DHCP offer,客户机只接收第一个收到的DHCP offer,然后它以广播的方式回答一个DHCP request请求信息。该信息中包含它所选定的DHCP服务器请求IP地址的内容。之所以要以广播的方式回答,是为了通知所有的DHCP服务器,它将选择某台DHCP服务器所提供的IP地址。

  4. 确认阶段
    DHCP服务器确认所提供的IP地址的阶段。

    当DHCP服务器收到DHCP客户机回答的DHCP resquest请求后,它便向DHCP客户机发送一个包含它提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,除了DHCP客户机所选择的服务器IP外,其他的DHCP服务器都将收回曾提供的IP地址

  5. 重新登陆
    客户机重新启动后再次获取IP地址。

    以后DHCP客户机每次登陆网络时,就不需要再发送DHCP discover发现信息了。而是直接发送包含前一次所分配IP地址的DHCP resquest请求。当DHCP服务器收到这一信息后,它会尝试让客户机继续使用原来的IP并回答一个DHCP ACK确认信息,如果此IP地址无法分配个原来的DHCP客户机时(比如IP分配给其他DHCP客户机使用) ,则DHCP服务器给DHCP客户机回答一个DHCP NACK 否认消息,当原来的DHCP客户机收到此消息后,它就必须重新发送DHCP discover发现信息重新请求新的IP地址。

  6. 更新租约
    租约到期处理流程。

    DHCP服务器向DHCP客户机出租的IP地址一般都由一个租借期限,期满后DHCP服务器会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送其更新租约的信息。

三、安装DHCP服务软件

1
2
# 基于Ubuntu
sudo apt-get install isc-dhcp-server

四、配置DHCP服务软件

DHCP的主要配置文件 /etc/dhcp/dhcpd.conf。
其中每行开头的 # 表示注释,而每一行配置最后都要以 ; 作为结尾。

1. DHCP配置参数说明

ddns-update-style

该参数用来指定DHCP服务器对DNS服务器进行更新时采用的更新类型。有3个类型分别是ad-hoc、interim、none。ad-hoc方式基本上已经不再采用,interim表示DNS互动更新模式,none表示不支持动态更新,一般设置为none。

default-lease-time

该参数的作用是定义默认的IP地址租约时间,其单位为秒。

max-lease-time

该参数用来指定最大租赁时间长度,单位是秒。上面的是默认租约时间,这个是如果客户要求了租约时间,租约时间如果超过这个值,就以这个值为准,不以客户要求的为准。

server-name

通知DHCP客户服务器名称。

hardware

指定客户端的硬件接口类型和硬件地址。其格式如下:
hardware ethernet 0:0:c0:5d:bd:95

fixed-address

指定为客户端分配一个或者多个固定IP地址,该参数只能出现在host声明语句中。如果指定了多个IP地址,那么当客户端启动时,它会被分配到相应子网中的那个IP地址上。

2. DHCP配置声明语句

用来描述网络布局、提供客户的IP地址等

IP地址范围是192.168.0.100到192.168.0.200
子网掩码是255.255.255.0
网关是192.168.0.1
DNS为114.114.114.114
客户端的/etc/resolv.conf里面设置的search参数为pipci.com
默认的IP地址租约时间1小时,最大租赁时间为2小时
为硬件MAC地址0:0:c0:5d:bd:95保留IP地址为192.168.0.188 ,主机名为pipci

1
2
3
4
5
6
7
8
9
10
11
12
13
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.200;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option domain-name "pipci.com";
option domain-name-servers 114.114.114.114;
default-lease-time 3600;
max-lease-time 7200;
host pipci {
hardware ethernet 00:0c:29:27:c6:12;
fixed-address 192.168.0.188;
}
}

range
该语句定义了起始IP和终止IP 提供动态分配IP的范围,如果只指定起始IP地址而没有终止IP地址,则范围只包含一个IP地址,在一个subnet语句中,可以有多个range语句,但是这些range语句所覆盖的IP地址范围不能交叉或者重复。

host
该语句用来定义用户保留地址,其格式如下:

1
2
3
4
host hostname {
hardware ethernet host-mac;
fixed-address ip-address;
}

这里的主机名可以自己定义,hardware参数用来指定需要保留IP地址的客户端的MAC地址,fixed-address用来指定分配的固定IP地址。

subnet-mask
为客户端设定子网掩码。

domain-name
如果客户端的/etc/resolv.conf里面设置了search参数,这个域名就是对应search参数后面的设置。

domain-name-servers
为客户端指明DNS服务器IP地址。

routers
为客户端设定默认网关。

broadcast-address
为客户端设定广播地址。

注:DHCP服务器需要开放入UDP 67端口,出UDP 68端口,客户端正好相反。

五、重启DHCP服务

1
2
3
4
# 重启dhcp服务
systemctl restart isc-dhcp-server
# 自动启动dhcp服务
systemctl enable isc-dhcp-server

六、查看已分配IP地址

可以通过查看dhcpd.leases文件来确定已经分配的地址:

1
cat /var/lib/dhcp/dhcpd.leases