企业需求
需要为企业里的机器配置一台DHCP服务器。因为光猫提供DHCP服务的能力很差,多机器dhcp+多机器NAT拓扑方式机器一多就卡顿。使用一台路由器来进行子网络的dhcp和NAT服务,分担光猫负载,但是还有一部分机器需要放到光猫网络,这就需要再安装一台DHCP服务器。
技术选型
经过深思熟虑,这次我们选择使用isc-dhcp-server
isc-dhcp-server介绍
isc-dhcp-server
是一个开源的DHCP服务器软件,通常用于在Linux系统上自动分配IP地址给网络中的客户端。以下是关于 isc-dhcp-server
的详细介绍:
1. 软件概述
- 名称 :
isc-dhcp-server
- 类型:开源DHCP服务器软件
- 平台:支持在Linux系统上运行
- 功能:为网络中的客户端自动分配IP地址、子网掩码、默认网关等网络配置信息
2. 安装与配置
安装
在基于Debian或Ubuntu的系统上,可以使用以下命令安装 isc-dhcp-server
:
bash
sudo apt-get update
sudo apt-get install isc-dhcp-server
配置
-
主要配置文件 :
/etc/dhcp/dhcpd.conf
-
其他相关文件 :
/etc/default/isc-dhcp-server
(可能包含服务器的一些默认设置) -
配置内容:通常包括域名、DNS服务器地址、默认租期时间、子网定义等。例如:
bash
# 设置域名
option domain-name "example.com";
# 设置DNS服务器
option domain-name-servers ns1.example.com;
# 设置默认租期时间
default-lease-time 600;
# 设置子网
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
}
3. 工作原理
DHCP服务器负责维护一个IP地址池,当网络中的客户端请求IP地址时,服务器会从地址池中分配一个可用的IP地址给客户端,并记录相关信息(如分配的IP地址、租期等)。客户端在租期到期前可以续租IP地址,如果租期到期且没有续租,服务器会回收该IP地址供其他客户端使用。
4. 应用场景
- 大型企业网络:在大规模的网络环境中,手动配置每台设备的IP地址是不现实的。使用DHCP服务器可以自动分配IP地址,减少管理成本。
- 公共网络环境:如咖啡馆、图书馆等公共场所的Wi-Fi网络,使用DHCP服务器可以为来访者自动分配IP地址,提供便捷的上网体验。
- 动态网络环境:在需要频繁添加或删除设备的网络环境中,使用DHCP服务器可以快速地分配或回收IP地址,适应网络的变化。
5. 注意事项
- 在配置DHCP服务器时,需要确保服务器具有静态IP地址,并正确设置子网掩码、默认网关等网络参数。
- 需要根据实际需求合理配置IP地址池的大小和租期时间,以避免IP地址耗尽或频繁更换IP地址带来的问题。
- 在生产环境中部署DHCP服务器时,应确保服务器的安全性和稳定性,避免因为服务器故障或安全漏洞导致网络中断或数据泄露等问题。
安装配置实践
操作系统一如既往选择FreeBSD,所以我们要在FreeBSD系统安装 dhcp服务。
安装isc-dhcp-server
先用pkg search看看有哪些版本
bash
pkg search dhcp
pkg: No SRV record found for the repo 'FreeBSD'
dhcp6-20080615.2_4 KAME DHCP6 client, server, and relay
dhcp_probe-1.3.1_2 Attempts to discover DHCP and BootP servers on a network
dhcpcd-10.0.6 DHCP/IPv4LL/IPv6RS/DHCPv6 client
dhcpcd-ui-0.7.9_1 GTK / Curses interface to dhcpcd
dhcpd-6.6.20200413_1 OpenBSD dhcp daemon
dhcpd-pools-3.1_1 Tool to analyze isc-dhcp pool usage based on leases
dhcpdump-1.8_1 Decode and diagnose sniffed DHCP packets
dhcping-1.2_1 Send DHCP request to DHCP server for monitoring purposes
dhcprelya-6.1_1 Lightweight DHCP relay agent (Yandex edition)
isc-dhcp44-client-4.4.3P1_1 The ISC Dynamic Host Configuration Protocol client
isc-dhcp44-relay-4.4.3P1_1 The ISC Dynamic Host Configuration Protocol relay
isc-dhcp44-server-4.4.3P1_1 ISC Dynamic Host Configuration Protocol server
nagios-check_dhcp.pl-0.1 Check the availability of a DHCP server using unicast delivery
p5-Net-DHCP-0.700 DHCP set of classes designed to handle basic DHCP handling
p5-Net-DHCP-Watch-2.03_1 Class for monitoring a remote DHCPD server
p5-Net-DHCPClient-1.0_1 Perl implementation of a DHCP client API
p5-Text-DHCPLeases-1.0_1 Perl extension to parse DHCP leases file from ISC dhcpd
pxe-pdhcp-0.0.2007_1 Preboot Execution Environment server
查到当前的版本为:isc-dhcp44-server-4.4.3P1_1 ISC Dynamic Host Configuration Protocol server
使用pkg安装
bash
pkg install isc-dhcp44-server
安装好后提示:
bash
Message from isc-dhcp44-server-4.4.3P1_1:
--
**** To setup dhcpd, please edit /usr/local/etc/dhcpd.conf.
**** This port installs the dhcp daemon, but doesn't invoke dhcpd by default.
If you want to invoke dhcpd at startup, add these lines to /etc/rc.conf:
dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="" # ethernet interface(s)
dhcpd_withumask="022" # file creation mask
**** If compiled with paranoia support (the default), the following rc.conf
options are also supported:
dhcpd_chuser_enable="YES" # runs w/o privileges?
dhcpd_withuser="dhcpd" # user name to run as
dhcpd_withgroup="dhcpd" # group name to run as
dhcpd_chroot_enable="YES" # runs chrooted?
dhcpd_devfs_enable="YES" # use devfs if available?
dhcpd_rootdir="/var/db/dhcpd" # directory to run in
dhcpd_includedir="<some_dir>" # directory with config-
files to include
**** WARNING: never edit the chrooted or jailed dhcpd.conf file but
/usr/local/etc/dhcpd.conf instead which is always copied where
needed upon startup.
开始配置
在/etc/rc.conf文件中加入如下内容
dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="igb0" # ethernet interface(s)
也可以在终端使用命令:
% sysrc dhcpd_enable="YES"
% sysrc dhcpd_ifaces="igb0"
% sysrc dhcpd_conf="/root/etc/dhcpd.conf"
配置/usr/local/etc/dhcpd.conf文件,加入
option domain-name "example.com";
option domain-name-servers 114.114.114.114,8.8.8.8;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.99;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
}
option domain-name "example.com";
option domain-name-servers 114.114.114.114,8.8.8.8;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.99;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
}
启动服务
service isc-dhcpd start
这样服务就起来了!