DHCP服务

1. DHCP简介

1.1 DHCP

  • DHCP: Dynamic Host Configuration Protocol 动态主机地址配置协议
  • 提供地址池
  • C/S:Client/Server

1.2 DHCP的作用

  • 把一个主机接入TCP/IP网络,并为其配置一些网络参数:
    • IP/Netmask
    • Gateway
    • DNS Server
  • 参数的配置方式:
    • 静态指定
    • 动态分配
      • bootp:boot protocol 引导协议,早期时候使用
      • dhcp:引入了“租约”的bootp,也可以实现为特定主机保留其固定地址

1.3 DHCP简要的工作流程

1) 要通信的主机要先在网络中广播发送一个rarp包(类似于客户主机广播说,我知道自己的MAC地址,谁提供一个IP地址给我)

  • arp:address resolving protocol 地址解析协议
    • IP --> MAC ,通过IP地址来找MAC地址
  • rarp:reverse arp 反向地址解析协议
    • MAC --> IP ,通过MAC地址来找IP地址

2) 服务器端(DHCP服务器)收到请求之后,就会看一看,自己有没有地址,如果有,就提供一个地址给客户

  • 如果网络内有两台服务器都能为客户机提供IP地址,则谁响应快就由谁来提供

1.4 DHCP的工作流程的四个阶段

(这些过程都是使用广播的形式发送报文的)

1) Client:发一个dhcp discover报文

  • 客户端发送请求报文,查找网络是否有DHCP服务器

2) Server:回应一个dhcp offer报文(主要提供IP/mask,gw等信息)

  • 服务器收到报文后,发送一个offer报文给客户端主机
  • least time 租约期限,服务端还会发一个租约期限给客户端

3) Client:再发送一个dhcp request报文

  • 因为可能网络中有多个DHCP服务器,这时Client发送的这个报文就是明确告知自己选择哪个IP
  • 客户端来确认到底使用哪一个DHCP服务提供的地址

4) Server:回应一个dhcp ack报文

  • DHCP服务器来确认

1.5 DHCP的续租详解

  • 续租:一般来说,租约期限到达整个期限一半的时候就要续组了
    • 50% -> 75% -> 87.5% --> 93.75%
    • 四次续租不成功,就要重新请求了
  • 续租是单播给服务器的:
    • 服务器端确认可以续租:
      • dhcp request
      • dhcp ack 同意续租
    • 服务器端确认不可以继续使用:(可能是地址列表给改了)
      • dhcp request
      • dhcp nak 不同意续租
      • dhcp discover :再以广播的形式发送探测报文
  • 当客户端主机请求DHCP服务器请求失败时,自动随机分配的地址,这个地址只能在本地网络中使用
    • 169.254.X.X
  • 实现dhcp对两个不同的局域网之间(两个局域网用路由器隔开)的地址分配:
    • 可以在其中一个局域网中的一台主机上做中继(其实就是类似于代理的功能),然后将报文单播给另一个网络中的DHCP服务器
    • 也可以在路由器中开启dhcp的中继功能(一般路由器应该有提供)

2. DHCP服务程序说明

2.1 程序包

  • dhcp:(由ISC提供的,named用于dns服务)整合起来了
  • dnsmasq:既能提供dhcp又能提供dns(通常用于嵌入式环境中,小规模使用)

2.2 监听的端口

  • 服务端:67/UDP
  • 客户端:68/UDP

2.3 dhcp的主程序文件:

(dhcpd和dhcrelay只会启用其中的一个)

1) /usr/sbin/dhcpd:提供dhcp服务

  • 配置文件:
    • /etc/dhcp/dhcpd.conf --> /etc/rc.d/init.d/dhcpd
    • 有一个默认配置示例,可以复制过来:
      • cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
    • /etc/dhcp/dhcpd6.conf --> /etc/rc.d/init.d/dhcpd6 这里是IPV6的配置文件,忽略它

2) /usr/sbin/dhcrelay:提供中继服务(一般不启用)

  • 配置文件:/etc/rc.d/init.d/dhcrelay

3. DHCP配置详解

3.1 dhcp的配置文件/etc/dhcp/dhcp.conf

# 定义域名和DNS服务器地址
option domain-name "hgzero.com";                      # 定义搜索域的域名
option domain-name-servers 172.18.0.1, 172.18.0.2;    # 定义dns服务器

# 定义租约期限
default-lease-time 600;       # 默认租约期限,单位为秒钟,可以定义为一天,43200
max-lease-time 7200;          # 最长租约期限,可以定义为86400,24小时

# 定义记录日志的设备
log-facility local7;          # 记录日志的facility

# 定义一个子网和地址池,range表示地址池的范围
subnet 172.18.0.0 netmask 255.255.0.0 {
        range 172.18.100.101 172.18.100.120;
}
        
# 定义一个地址池,range就表示地址池的范围
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# 再定义一个子网和地址池,并对其做详细设定
subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;                           # 指明地址池的范围
  option domain-name-servers ns1.internal.example.org; # 指定dns服务器地址,最多指定3个
  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服务器上用来区别不同主机的标识
# 这里指明的主机名是passacaglia
host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;   # 指明这台主机的mac地址
  filename "vmunix.passacaglia";       # 指明引导文件名称,就是获得地址之后要加载一个文件
                                      # 类似于一种基于网络引导时使用的bootloader文件
  server-name "toccata.fugue.com";     # 到这里指定的那个主机上去找那个文件,这里应该指定IP地址
}

# 对特定的主机绑定绑定IP地址(MAC地址绑定)
host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;  # 这里的mac是客户端的mac地址
  fixed-address 10.0.10.51;     # fixed-address表示固定一个主机的地址,这里应该填IP地址,不能使用地址池范围内的地址
}

3.2 配置后进行测试

  1. 客户端可以使用dhclient -d命令来测试dhcp服务器
    • dhclient -d表示运行在前台
    • 如果不加参数则表示运行在后台
  2. 可以在/var/lib/dhcpd/dhcpd.leases文件中查看dhcp的地址租约记录

3.3 其他的配置选项

  • filename:指明引导文件名称,类似于一种基于网络引导时使用的bootloader文件
  • next-server:指明引导文件所在的服务主机的IP地址
  • 配置示例:
    • filename "pxelinux.0";
    • next-server 172.18.100.6;
  • next-server所在的文件服务器一般是tftp服务器
    • tftp:trivial ftp,通过udp协议提供服务

4. dhcp启动出错解决

4.1 没有监听接口

1)报错内容

Not configured to listen on any interfaces!

2)解决

vim /usr/lib/system/system/dhcpd.service
    # 修改ExecStart项,在最后面添加上dhcp所绑定的网卡接口
    ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid ens37

# 然后重载
systemctl daemon-reload

# 重启dhcp
systemctl restart dhcpd

 

 

 

 

 

posted @ 2020-06-22 14:22  Praywu  阅读(631)  评论(0编辑  收藏  举报