- netboot-base.nix with SSH key auth - Launch scripts for node01/02/03 - Node configuration.nix and disko.nix - Nix modules for first-boot automation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
135 lines
4.3 KiB
ISCdhcpd
135 lines
4.3 KiB
ISCdhcpd
# ISC DHCP Server Configuration for PXE Boot
|
|
# Supports both BIOS and UEFI boot via iPXE
|
|
#
|
|
# This configuration:
|
|
# - Detects client architecture (BIOS vs UEFI) via option 93
|
|
# - Serves iPXE bootloaders via TFTP
|
|
# - Chainloads to iPXE boot scripts served over HTTP
|
|
# - Supports bare-metal provisioning for Centra Cloud infrastructure
|
|
|
|
# Global Options
|
|
option space pxelinux;
|
|
option architecture-type code 93 = unsigned integer 16;
|
|
|
|
# Default lease times
|
|
default-lease-time 600;
|
|
max-lease-time 7200;
|
|
|
|
# DHCP server should be authoritative on this network
|
|
authoritative;
|
|
|
|
# Logging
|
|
log-facility local7;
|
|
|
|
# Subnet Configuration
|
|
# IMPORTANT: Adjust this subnet configuration to match your network
|
|
subnet 10.0.100.0 netmask 255.255.255.0 {
|
|
# IP address range for PXE clients
|
|
range 10.0.100.100 10.0.100.200;
|
|
|
|
# Network configuration
|
|
option routers 10.0.100.1;
|
|
option subnet-mask 255.255.255.0;
|
|
option broadcast-address 10.0.100.255;
|
|
option domain-name-servers 10.0.100.1, 8.8.8.8;
|
|
option domain-name "centra.local";
|
|
|
|
# PXE Boot Server Configuration
|
|
# This is the IP address of the PXE/TFTP/HTTP server
|
|
# IMPORTANT: Change this to your provisioning server's IP
|
|
next-server 10.0.100.10;
|
|
|
|
# Client Architecture Detection and Boot File Selection
|
|
# This class-based approach handles BIOS vs UEFI boot
|
|
|
|
# Architecture types:
|
|
# 0x0000 = x86 BIOS
|
|
# 0x0006 = x86 UEFI (32-bit)
|
|
# 0x0007 = x86-64 UEFI (64-bit)
|
|
# 0x0009 = x86-64 UEFI (64-bit, HTTP)
|
|
|
|
if exists user-class and option user-class = "iPXE" {
|
|
# Client is already running iPXE
|
|
# Serve the iPXE boot script via HTTP
|
|
# iPXE will request this via HTTP from next-server
|
|
filename "http://10.0.100.10/boot/ipxe/boot.ipxe";
|
|
} elsif option architecture-type = 00:00 {
|
|
# BIOS x86 client
|
|
# Serve iPXE bootloader for BIOS via TFTP
|
|
filename "undionly.kpxe";
|
|
} elsif option architecture-type = 00:06 {
|
|
# UEFI x86 32-bit client (rare)
|
|
filename "ipxe-i386.efi";
|
|
} elsif option architecture-type = 00:07 {
|
|
# UEFI x86-64 64-bit client (most common for modern servers)
|
|
filename "ipxe.efi";
|
|
} elsif option architecture-type = 00:09 {
|
|
# UEFI x86-64 with HTTP support
|
|
# Some UEFI implementations support HTTP natively
|
|
filename "ipxe.efi";
|
|
} else {
|
|
# Fallback to BIOS bootloader for unknown architectures
|
|
filename "undionly.kpxe";
|
|
}
|
|
}
|
|
|
|
# Host-Specific Configurations
|
|
# You can define specific configurations for known MAC addresses
|
|
# This allows pre-assigning IP addresses and node profiles
|
|
|
|
# Example: Control-plane node
|
|
host control-plane-01 {
|
|
hardware ethernet 52:54:00:12:34:56;
|
|
fixed-address 10.0.100.50;
|
|
option host-name "control-plane-01";
|
|
# Custom DHCP options can be added here for node identification
|
|
}
|
|
|
|
# Example: Worker node
|
|
host worker-01 {
|
|
hardware ethernet 52:54:00:12:34:57;
|
|
fixed-address 10.0.100.60;
|
|
option host-name "worker-01";
|
|
}
|
|
|
|
# Example: All-in-one node (testing/homelab)
|
|
host all-in-one-01 {
|
|
hardware ethernet 52:54:00:12:34:58;
|
|
fixed-address 10.0.100.70;
|
|
option host-name "all-in-one-01";
|
|
}
|
|
|
|
# Additional subnet for different network segments (if needed)
|
|
# Uncomment and configure if you have multiple provisioning networks
|
|
#
|
|
# subnet 10.0.101.0 netmask 255.255.255.0 {
|
|
# range 10.0.101.100 10.0.101.200;
|
|
# option routers 10.0.101.1;
|
|
# option subnet-mask 255.255.255.0;
|
|
# option broadcast-address 10.0.101.255;
|
|
# option domain-name-servers 10.0.101.1, 8.8.8.8;
|
|
# next-server 10.0.100.10;
|
|
#
|
|
# if exists user-class and option user-class = "iPXE" {
|
|
# filename "http://10.0.100.10/boot/ipxe/boot.ipxe";
|
|
# } elsif option architecture-type = 00:00 {
|
|
# filename "undionly.kpxe";
|
|
# } elsif option architecture-type = 00:07 {
|
|
# filename "ipxe.efi";
|
|
# } else {
|
|
# filename "undionly.kpxe";
|
|
# }
|
|
# }
|
|
|
|
# DHCP Relay Configuration Notes
|
|
# If your DHCP server is on a different network segment than the PXE clients,
|
|
# you'll need to configure DHCP relay on your network routers:
|
|
#
|
|
# For Cisco IOS:
|
|
# interface vlan 100
|
|
# ip helper-address 10.0.100.10
|
|
#
|
|
# For Linux (using dhcp-helper or dhcrelay):
|
|
# dhcrelay -i eth0 -i eth1 10.0.100.10
|
|
#
|
|
# Ensure UDP ports 67/68 are allowed through firewalls between segments.
|