feat(netinfra): migrate DHCP from pfv-netboot to netinfra-01/02 with failover

ISC DHCP server with failover-peer (primary/secondary) deployed on
pfv-netinfra-01 (192.168.3.252) and pfv-netinfra-02 (192.168.3.253). Both
servers in "normal" state, load-balancing 333 active leases.

Migration details:
- Copied all 37 host reservations + subnet/pool config from pfv-netboot
- DHCP lease database copied from netboot for zero-disruption cutover
- DNS servers changed from 192.168.3.250 (netboot) to 252/253 (netinfra pair)
- NTP servers (252/253) added to DHCP options (netboot didn't hand out NTP)
- Netmask on both nodes fixed /24 -> /22 to match the network
- Webmin + DHCP module installed on both nodes (port 10000, SSL)
- pfv-netboot DHCP stopped + disabled
- Tested via sectestbed-sandbox (DHCP lease obtained from 252, verified DNS/NTP/gateway)
- Snapshot "pre-dhcp-migration" on sandbox as rollback point

Configs: netinfra/dhcp/dhcpd-{primary,secondary}.conf
Plan + results: netinfra/dhcp-migration.md

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
2026-07-29 17:22:15 -05:00
parent 9c47d93a2f
commit 396349640f
6 changed files with 547 additions and 1 deletions
+193
View File
@@ -0,0 +1,193 @@
# dhcpd.conf — pfv-netinfra-02 (SECONDARY)
# Migrated from pfv-netboot 2026-07-29
# Managed via Webmin DHCP module
#
# FAILOVER: this node is SECONDARY; peer is pfv-netinfra-01 (192.168.3.252)
# Global defaults
option domain-name "knel.net";
option domain-name-servers 192.168.3.252, 192.168.3.253;
option ntp-servers 192.168.3.252, 192.168.3.253;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
# ----- failover peer (SECONDARY) -----
failover peer "pfv-dhcp" {
secondary;
address 192.168.3.253;
port 647;
peer address 192.168.3.252;
peer port 647;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
}
# ----- subnet (shared /22) -----
subnet 192.168.0.0 netmask 255.255.252.0 {
option routers 192.168.3.254;
option domain-name-servers 192.168.3.252, 192.168.3.253;
option ntp-servers 192.168.3.252, 192.168.3.253;
option domain-name "knel.net";
authoritative;
allow unknown-clients;
pool {
failover peer "pfv-dhcp";
range 192.168.0.1 192.168.3.200;
}
# ---- host reservations (identical to primary) ----
host pfv-r3-mgmt {
hardware ethernet 00:14:22:69:1c:37;
fixed-address 192.168.0.7;
}
host pfv-r3-stor {
hardware ethernet 00:13:72:46:95:e4;
fixed-address 192.168.0.9;
}
host pfv-printer {
hardware ethernet 40:9f:38:b0:b5:2f;
fixed-address 192.168.1.84;
}
host pfv-r2-tor1 {
hardware ethernet 00:0d:56:41:7a:4d;
fixed-address 192.168.0.10;
}
host pfv-core-sw01 {
hardware ethernet a4:ba:db:6f:ce:28;
fixed-address 192.168.0.12;
}
host upstairs-receiver {
hardware ethernet 74:5e:1c:76:e2:60;
fixed-address 192.168.0.21;
}
host ap-TableMount {
hardware ethernet e0:63:da:36:73:39;
fixed-address 192.168.3.54;
}
host AP-WallMount {
hardware ethernet e0:63:da:33:bb:1d;
fixed-address 192.168.1.182;
}
host pfv-consrv {
hardware ethernet 00:60:2e:01:50:aa;
fixed-address 192.168.3.56;
}
host garagepdu {
hardware ethernet 00:c0:b7:7e:49:78;
fixed-address 192.168.3.18;
}
host pfv-dvr {
hardware ethernet 54:2b:57:37:a7:d9;
fixed-address 192.168.3.84;
}
host appletv-livingroom {
hardware ethernet d0:d2:b0:97:81:c2;
fixed-address 192.168.1.81;
}
host pfv-stor1 {
hardware ethernet 00:00:c0:34:0c:dc;
fixed-address 192.168.1.166;
}
host 3dscan {
hardware ethernet b8:27:eb:91:31:82;
fixed-address 192.168.0.4;
}
host pfv-jetson-nano-1 {
hardware ethernet 00:04:4b:e4:17:7b;
fixed-address 192.168.3.186;
}
host tsys7-oob {
hardware ethernet f8:bc:12:35:1e:c6;
fixed-address 192.168.3.197;
}
host tsys6-oob {
hardware ethernet a4:ba:db:0b:df:a0;
fixed-address 192.168.3.196;
}
host tsys-siem {
hardware ethernet 00:15:5d:64:e8:33;
fixed-address 192.168.3.81;
}
host brother-label-printer {
hardware ethernet 04:fe:a1:56:72:e2;
fixed-address 192.168.3.52;
}
host pfv-bms {
hardware ethernet 02:5A:39:38:3E:9F;
fixed-address 192.168.3.12;
}
host stl-canon-scanner-artroom {
hardware ethernet 74:38:b7:24:fa:4e;
fixed-address 192.168.3.142;
}
host tsys-ucs-01 {
hardware ethernet bc:24:11:86:ea:1a;
fixed-address 192.168.2.51;
}
host tsys-ucs-02 {
hardware ethernet bc:24:11:c8:da:34;
fixed-address 192.168.2.54;
}
host dell-openmanage-enterprise {
hardware ethernet bc:24:11:ac:f4:6b;
fixed-address 192.168.2.113;
}
host pfv-rrinfra-rtr {
hardware ethernet 00:1d:70:0b:4f:41;
fixed-address 192.168.3.94;
}
host pfv-tsys1 {
hardware ethernet 34:17:eb:b3:b1:2d;
fixed-address 192.168.3.11;
}
host pfv-tsys2 {
hardware ethernet 18:fd:cb:00:d2:ca;
fixed-address 192.168.2.3;
}
host pfv-tsys3 {
hardware ethernet a4:4c:c8:08:d1:b8;
fixed-address 192.168.2.5;
}
host pfv-tsys4 {
hardware ethernet 98:90:96:c4:96:9a;
fixed-address 192.168.3.191;
}
host pfv-tsys5 {
hardware ethernet 18:03:73:43:ce:de;
fixed-address 192.168.0.20;
}
host pfv-tsys6 {
hardware ethernet 00:21:9b:a2:7c:53;
fixed-address 192.168.3.169;
}
host pfv-tsys7 {
hardware ethernet f8:bc:12:34:e0:74;
fixed-address 192.168.0.250;
}
host pfv-tsys9 {
hardware ethernet a4:bb:6d:e3:56:86;
fixed-address 192.168.3.58;
}
}
# ---- host declarations outside subnet (global scope, same as netboot) ----
host subodev-torsw01 {
hardware ethernet 00:14:22:69:18:a7;
fixed-address 192.168.0.8;
}
host pfv-r1-tor-top {
hardware ethernet 00:23:ae:c1:ad:e8;
fixed-address 192.168.0.11;
}
host tailscale-router {
hardware ethernet bc:24:11:8a:69:04;
fixed-address 192.168.3.16;
}