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;
}