0%

在CentOS 实现 DHCP 和 DHCP 中继代理服务详细流程

cobbler

一、DHCP 的一些基础知识

😦 😊 😕

1. 什么是 DHCP

全称 Dynamic Host Configuration Protocol,是负责管理并给客户端发布 IP/NetmaskGatewayDNS Server 等信息的一种协议

2. 工作流程

默认使用端口:

  • Server: UDP/67
  • Client: UDP/68
1
2
3
4
5
1、Client: dhcp discover:发现        # 谁是 DHCP 服务器啊,给我一个 IP 地址吧...
2、Server: dhcp offer:(IP/netmask, gw) # 我是 DHCP 服务器,给你一个 IP 地址吧...
lease time: 租约期限 2 个小时之后到期哈,请转账付费
3、Client:dhcp request # 好的,那我就用这个了
4、Server: dhcp ack # 恩恩可以可以

3. ARP 和 RARP

通过广播发送

1
2
3
4
arp: address resolving protocol
IP --> MAC
rarp: reverse arp
MAC --> IP

4. 租约

早期使用的程序是 bootp(boot protocol)
后来有了 dhcp,引入了租约的概念:

1
2
3
4
5
6
7
租约:
2hours: # 客户端拿到 IP 和租约时间,表示这个 IP 可以用一炷香的时间
50%: 1hours # 二分之一炷香后,开始续租,如果没人回应... 我先用着
50%:1hours # 四分之三炷香后,续租,如果还没人回应... 我继续用
75%: 0.5hours # 八分之七炷香后,没人理... 我继续用
87.5%: 0.25hours # 十六分之十五炷香后 ╮(╯▽╰)╭ ,没人理... 不行了不行我要死了,我要找下家了
dhcp discover # 谁是 DHCP 服务器啊,给我一个 IP 地址吧...

5. 续租(单播)

服务器同意续租 服务器不同意续租
客户端 dhcp request dhcp request
服务端 dhcp ack dhcp nak

二、配置 DHCP

Linux 中可以实现 DHCP 协议的程序:

  • dhcp:(和 named 是同一家公司 ISC)
  • dnsmasq:轻量级 dhcp,还有 dns 解析的功能

1. 安装 dhcp

  1. client: dhclient -d
  2. server: dhcp
1
2
3
4
5
6
yum install hdcp
dhcpd:    dhcp 服务进程
dhcrelay:   dhcp 中继服务
dhcpd.conf:  dhcp 配置文件
dhcpd6.conf:  ipv6 配置文件
查看已分配的租约 /var/lib/dhcpd/dhcpd.leases

主配置文件只有几句话,需要从模板拷过来

1
2
3
4
cat /etc/dhcp/dhcpd.conf
DHCP Server Configuration file.
see /usr/share/doc/dhcp*/dhcpd.conf.example
see dhcpd.conf(5) man page

去复制模板文件:

1
cp /usr/share/doc/dhcpj*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

三、配置

1. 环境准备

  1. 在一个局域网中,划出两个广播域,子网 A:10.1.1.0/24 和子网 B:172.1.1.0/24
  2. 3 台 CentOS 主机
    1. 主 DHCP 服务器在 A 网,下文中称 主 DHCP 服务器
    2. 代理 DHCP 服务器在 B 网,同时作为 网关 使用,下文中称 DHCP 代理(网关)
    3. B 网的客户端:从 DHCP 代理获得 IP
  3. 全局租约期默认为 48 小时

架构

2. 配置 DHCP代理(网关)

  • DHCP 代理(网关) 作为 A、B 两个子网的网关,需要两块网卡,在 vmware 中创建两个仅主机的网络 VMnet2VMnet3,并关闭 DHCP 功能。

vmware


  • DHCP 代理(网关) 添加两块网卡,分别对应刚刚创建的VMnet2、3
1
2
eth1: ip 10.1.1.1/24(A网关)
eth2: ip 172.1.1.1/24(B网关)
  • 开启路由转发
1
2
echo "net.ipv4.ip_forware = 1" >> /etc/sysctl.conf
sysctl -p
  • DHCP 代理(网关) 配置为 DHCPv4 中继代理程序

要在 DHCPv4 中运行 dhcrelay,指定向其转发请求的服务器,请作为 root 用户复制并编辑 dhcrelay.service 文件:

1
2
~]# cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/
~]# vi /etc/systemd/system/dhcrelay.service

编辑 [Service] 部分的 ExecStart 选项,在该行的结尾处添加一个或多个服务器 IPv4 地址,例如:

  • ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.1.2

如果要指定 DHCP 中继代理侦听 DHCP 请求的接口,请使用 -i 参数将其添加到 ExecStart 选项(否则会侦听所有接口),例如:

  • ExecStart=/usr/sbin/dhcrelay -d --no-pid 10.1.1.2 -i eth2

其他选项请查看 dhcrelay(8) man page

请作为 root 用户重启该服务以便更改生效:

1
2
~]# systemctl --system daemon-reload
~]# systemctl restart dhcrelay

2. 配置 主 DHCP 服务器

  • 将网卡配置成:

    1. ip: 10.1.1.2/24
    2. gateway: 10.1.1.1 将网关指向 DHCP 代理(网关)
      ping 172.1.1.1 来验证,通为正常
  • 编辑 /etc/dhcp/dhcpd.conf 添加两个子网的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
subnet 10.1.1.0 netmask 255.255.255.0 {      # 划分子网 A
range 10.1.1.2 10.1.1.254; # 地址池
option domain-name "dhcptest.monster.com"; # domain-name
option routers 10.1.1.1; # 路由信息
option broadcast-address 10.1.1.255; # 广播地址
default-lease-time 600; # 默认租约
max-lease-time 7200; # 最大租约
}
subnet 172.1.1.0 netmask 255.255.255.0 {
range 172.1.1.2 172.1.1.254;
option domain-name "dhcptest.monster.com";
option routers 172.1.1.1;
option broadcast-address 172.1.1.255;
default-lease-time 600;
max-lease-time 7200;
}
  • 重启 DHCP 服务使配置生效
1
systemctl start dhcpd
  • 主 DHCP 服务器 使用 dhclient -d,看是否可以获取到 A 网的 ip

我这里之前已经请求过了,所以只有 REQUEST 的请求,但是可以看到服务器已经应答了 ACK,说明服务正常

1
2
3
4
5
6
7
8
9
10
11
12
~]# dhclient -d
Internet Systems Consortium DHCP Client 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/ens33/00:0c:29:cf:e7:f6
Sending on LPF/ens33/00:0c:29:cf:e7:f6
Sending on Socket/fallback
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x31967228)
DHCPACK from 10.1.1.4 (xid=0x31967228)
bound to 10.1.1.4 -- renewal in 249 seconds.
  • 在 B 网客户端执行 dhclient -d,看是否可以获取到 B 网的 ip
1
2
3
4
5
6
7
8
9
10
11
12
13
~]# dhclient -d
Internet Systems Consortium DHCP Client 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/ens33/00:0c:29:e7:eb:b6
Sending on LPF/ens33/00:0c:29:e7:eb:b6
Sending on Socket/fallback
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x2216a38b)
DHCPREQUEST on ens33 to 255.255.255.255 port 67 (xid=0x2216a38b)
DHCPACK from 172.1.1.1 (xid=0x2216a38b)
bound to 172.1.1.4 -- renewal in 234 seconds.

参考:

Red Hat Enterprise Linux7 联网指南 10.3. DHCP 中继代理程序
Linux——使用 DHCP 服务动态配置主机地址

今天风好大要被吹丢了~啊…啊困
风