CentOS7.9 搭建DHCP服务器 - DHCP中继代理
一、DHCP概述
1.DHCP的简介
-
DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。
-
DHCP前身是BOOTP,在Linux的网卡配置中也能看到显示的是BOOTP,DHCP引进一个bootp没有的概念:租约。bootp分配的地址是永久的,而dhcp分配的地址是可以有期限的。
2.DHCP的作用及特点
- DHCP可以自动分配IP、子网掩码、网关、DNS。
- DHCP客户端使用的端口68,服务端使用端口67,使用的UDP应用层的协议。
- DHCP一般不为服务器分配IP,因为他们要使用固定IP,所以DHCP一般只为办公环境的主机分配IP。
- DHCP服务器和客户端需要在一个局域网内,在为客户端分配IP的时候需要进行多次广播。但DHCP也可以为其他网段内主机分配IP,只要连接两个网段中间的路由器能转发DHCP配置请求即可,但这要求路由器配置中继功能。
3.DHCP报文
- DHCP DISCOVER :客户端开始DHCP过程发送的包,是DHCP协议的开始
- DHCP OFFER :服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
- DHCP REQUEST :客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时候同样会使用。
- DHCP ACK :服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
- DHCP NAK :DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。
- DHCP RELEASE :一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址
- DHCP INFORM :客户端发出的向服务器请求一些信息的报文
- DHCP DECLINE :当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。
4.DHCP中继
- 用DHCP Relay代理可以去掉在每个物理的网段都要有DHCP服务器的必要,它可以传递消息到不在同一个物理子网的DHCP服务器,也可以将服务器的消息传回给不在同一个物理子网的DHCP客户机。
二、配置DHCP服务器
1.事先准备
准备三台主机,分别是DHCP服务器、中继服务器、测试客户机
中间的中继服务器两个网络适配器,分别连接服务器和客户机的网段
2.安装DHCP服务
在DHCP服务器和中继服务器上都要安装DHCP服务,先保证服务器都能正常上网
//这里我安装了所有有关DHCP的软件包,可根据需要自行选择
[root@MengXin ~]# yum install -y dhcp-*
3.修改主机的IP地址(请先关闭VMware的DHCP服务)
这里为最终的地址配置,首先需要修改DHCP服务器的网络1的IP和服务器的网络2的IP,均为静态IP,网关配置可忽略
中继设备的网络1的地址为DHCP请求,这里先忽略。
设备 | 网络1 | 网络2 |
---|---|---|
服务器 | 192.168.255.10/24 | 无 |
中继设备 | DHCP获取 | 192.168.48.10 |
客户机 | DHCP获取 | 无 |
4.配置静态路由
DHCP服务器上需要配置通向客户机网段的静态路由
//给你的网络添加一个文件,不存在则新建
[root@MengXin ~]# vim /etc/sysconfig/network-scripts/route-ens160 //我的Linux服务器系统是RHEL,默认是ifcfg-ens160,这个根据实际情况而定
下面是我的配置文件内容
//注意:这里的网关地址可以是你的网络1的IP地址,如果你的主机在nat模式下则可以直接指向中继服务器的网络2的IP地址(我的是主机模式)
ADDRESS0=192.168.48.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.255.10
5.修改DHCP的配置文件
需要先去复制一份模板文件,也可以直接编辑‘/etc/dhcp/dhcpd.conf’文件
//模板目录可能会有所不同,可以用通配符‘*’来模糊查找,或者自己寻找准确目录
[root@MengXin ~]# cp -a /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
5.1全局参数
-
ddns-update-style none; ## 禁止dns动态更新
-
default-lease-time 21600; ## 默认租约期限
-
max-lease-time 43200; ## 最大租约期限
-
option domain-name “immengxin.top”; ## 指定域名
-
option domain-name-servers 202.106.0.20; ## 指定分配dns地址
5.2地址池参数
-
range参数:设置用于分配的P地址池
-
option subnet-mask参数:设置客户机的子网掩码
-
option routers参数:设置客户机的默认网关地址
5.3绑定机器MAC
-
hardware ethernet参数:指定对应主机的MAC地址
-
fixed-address参数:指定为该主机保留的IP地址
以下是我的配置文件修改的内容
# 这里是网络1的地址池
subnet 192.168.255.0 netmask 255.255.255.0 { //定义了网络号和子网掩码
range 192.168.255.100 192.168.255.200; //地址池范围
option domain-name-servers 192.168.255.2; //DNS服务器,可用‘,’分隔多个地址
option domain-name "immengxin.top"; //域名
option routers 192.168.255.2; //网关地址
option broadcast-address 192.168.255.255; //广播地址
default-lease-time 600; //默认租期
max-lease-time 7200; //最大租期
}
# 这里是客户机所在网络2的地址池
subnet 192.168.48.0 netmask 255.255.255.0 {
range 192.168.48.100 192.168.48.200;
option domain-name-servers 8.8.8.8;
option domain-name "immengxin.top";
option routers 192.168.48.10;
option broadcast-address 192.168.48.255;
default-lease-time 600;
max-lease-time 7200;
}
# 中继服务器网络2的保留地址
host myself {
hardware ethernet 00:0c:29:47:28:c9; //我的中继服务器网络1的MAC地址
fixed-address 192.168.255.150; //固定的保留地址
}
[root@MengXin ~]# systemcTL restart dhcpd //重启DHCP服务
[root@MengXin ~]# systemcTL enable dhcpd //开机自启DHCP
6.防火墙命令
- 防火墙允许DHCP服务通过,也可直接关闭
其他设备同样是,如出现问题,可以先考虑防火墙问题
[root@MengXin ~]# firewall-cmd --permanent --add-service=dhcp //允许DHCP服务通过
[root@MengXin ~]# firewall-cmd --reload //重载防火墙
[root@MengXin ~]# systemctl stop firewalld.service //关闭防火墙
[root@MengXin ~]# setenforce 0 //临时关闭selinux,永久关闭请自行百度
三、中继服务器配置
配置之前先给网络1请求一下IP地址,不出意外是之前固化的地址:192.168.255.150,如果你固化地址之前就以前请求了地址,可能不会变成保留的地址
这里我是直接关闭的防火墙和selinux,先保证实验正常进行
修改配置文件‘vim /usr/lib/systemd/system/dhcrelay.service’,修改成下面的样子
[Unit]
Description=DHCP Relay Agent Daemon
Documentation=man:dhcrelay(8)
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
ExecStart=/usr/sbin/dhcrelay -d --no-pid 192.168.255.10 //这里加上你的DHCP服务器的地址
StandardError=null
[Install]
WantedBy=multi-user.target
开启路由转向,自行体会
[root@MengXin ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@MengXin ~]# sysctl -p //立即生效路由转向
修改配置文件以后执行以下命令,这里我不多解释了
[root@MengXin ~]# systemctl --system daemon-reload
[root@MengXin ~]# systemctl restart dhcrelay.service
[root@MengXin ~]# systemctl enable dhcrelay.service
//这个命令可以直接指向需要中继的DHCP服务器的地址,重启失效。配置以后可不需要修改配置文件
[root@MengXin ~]# dhcrelay 192.168.255.10
四、结果验证
我的主机名都是同样的,记得使用不同的主机进行配置
[root@MengXin ~]# dhclient -r //释放DHCP地址
[root@MengXin ~]# dhclient -d //请求DHCP地址
[root@MengXin ~]# ip a s ens33 //查看网络适配器地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:50:a2:bf brd ff:ff:ff:ff:ff:ff
inet 192.168.48.100/24 brd 192.168.255.255 scope global noprefixroute dynamic ens33
valid_lft 442sec preferred_lft 442sec
inet6 fe80::7022:564b:5dff:7d53/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@MengXin ~]#
如果以上步骤出现错误,请帮忙指正,非常感谢!!!