ISC DHCP - LinuxUserGroupUWSP/RackMesa GitHub Wiki
The BSD router should have isc-dhcpd by default. The configuration can be found at /usr/local/etc/dhcpd.conf. First, enable isc-dhcpd with sysrc.
sysrc dhcpd_enable="yes"
Now you can configure DHCP. Here is a sample configuration for a 10.0.0.0/24 network.
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.20 10.0.0.254;
option domain-name-servers 10.0.0.20,8.8.8.8;
option domain-name "rackmesa.boi";
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 600;
max-lease-time 7200;
}
#PXE Boot
Install TFTP server.
yum -y install syslinux xinetd tftp-server
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
Allow TFTP in SELinux.
audit2allow < /var/log/audit/audit.log
Start the TFTP server.
vi /etc/xinetd.d/tftp
disable = no
firewall-cmd --add-service=tftp --permanent
firewall-cmd --reload
systemctl start xinetd
Add the following configurations to the subnet.
filename "pxelinux.0";
next-server <tftp-server IP>;
LUG configurations
option domain-name "rackmesa.boi";
option domain-name-servers 10.0.0.2,8.8.8.8;
ddns-updates on;
ddns-update-style standard;
ignore client-updates;
update-static-leases on;
authoritative;
allow unknown-clients;
include "/usr/local/etc/ddns.key";
zone rackmesa.boi. {
primary 10.0.0.2;
key DDNS_UPDATE;
}
zone 0.0.10.in-addr.arpa. {
primary 10.0.0.2;
key DDNS_UPDATE;
}
# Administrative VLAN
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.20 10.0.0.254;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
default-lease-time 600;
ddns-domainname "rackmesa.boi.";
ddns-rev-domainname "in-addr.arpa.";
max-lease-time 7200;
filename "pxelinux.0";
next-server 10.0.0.2;
}
# Server VLAN
subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.20 10.0.1.254;
option routers 10.0.1.1;
option broadcast-address 10.0.1.255;
default-lease-time 600;
ddns-domainname "rackmesa.boi.";
ddns-rev-domainname "in-addr.arpa.";
max-lease-time 7200;
filename "pxelinux.0";
next-server 10.0.0.2;
}
# Lab VLAN
subnet 10.0.2.0 netmask 255.255.255.0 {
range 10.0.2.20 10.0.2.254;
option routers 10.0.2.1;
option broadcast-address 10.0.2.255;
default-lease-time 600;
ddns-domainname "rackmesa.boi.";
ddns-rev-domainname "in-addr.arpa.";
max-lease-time 7200;
filename "pxelinux.0";
next-server 10.0.0.2;
}
# Cluster VLAN
subnet 10.0.3.0 netmask 255.255.255.0 {
range 10.0.3.20 10.0.3.254;
option routers 10.0.3.1;
option broadcast-address 10.0.3.255;
default-lease-time 600;
ddns-domainname "rackmesa.boi.";
ddns-rev-domainname "in-addr.arpa.";
max-lease-time 7200;
filename "pxelinux.0";
next-server 10.0.0.2;
# Generate hostnames based off of MAC address
if (not (option host-name ~~ "^[a-z0-9][a-z0-9\-]+[a-z0-9]$")) {
set new_host-name = concat("host-", binary-to-ascii(16, 8, "", substring(hardware, 1, 6)));
log(concat("invalid hostname: ", option host-name, " => ", new_host-name));
ddns-hostname = new_host-name;
} else {
ddns-hostname = pick (option fqdn.hostname, option host-name, substring (option dhcp-client-identifier, 1, 20));
}
}
# Userland VLAN
subnet 10.0.4.0 netmask 255.255.255.0 {
range 10.0.4.20 10.0.4.254;
option routers 10.0.4.1;
option broadcast-address 10.0.4.255;
default-lease-time 600;
ddns-domainname "rackmesa.boi.";
ddns-rev-domainname "in-addr.arpa.";
max-lease-time 7200;
filename "pxelinux.0";
next-server 10.0.0.2;
}