Network and edge
Twenty lessons in which the network was healthy on every check and wrong on the wire.
The network lessons share one shape. A check said fine, and the wire said otherwise. A firewall pair reported both members healthy while both claimed the same gateway address; a DNS server answered every direct query while half the fleet could not reach it; a cluster reported itself connected and in sync while the thing it exists to replicate had stopped moving. In almost every case the instrument was honest and was measuring the wrong thing.
The order is roughly the order the edge was built. Through late August 2026 the firewall pair came up on the bench and then went live: a CARP split brain that turned out to be two bad cables (4.1), a two-day diagnosis with the provider over a virtual MAC address their equipment would not relearn (4.2), a renumber that left a rule pointing at nothing and put an admin login page on the internet for ten minutes (4.3), and five separate silent defects before failover DHCP actually failed over (4.4). Used and consumer hardware arrived with its own history: a management switch still enforcing a previous owner’s access list (4.5), an access point still resolving DNS after its DHCP server was turned off (4.6), and a network chip that eats its own DHCP replies below the driver (4.7).
Then the fabric. A renumber done on paper only, deliberately (4.8), preceded the one-day cut of 135 hosts from a flat network to eighteen VLANs, and the two and a half hour DNS outage that came out of it (4.9). Two design corrections sit alongside: why cross-rack switch pairing was wrong here (4.10), and a whole switch generation with a silent speed ceiling (4.11).
September belonged to DNS and to remote access: transfers authorised by a shared key rather than an address (4.12), a redesign of remote access that a lab test corrected before production did (4.13), a misspelled API field that redirected every public service for six minutes (4.14), a cluster that lied by omission (4.15), and a helper tool whose convenience rewrote the wrong reverse record twice (4.16). The last four are about the machine you troubleshoot from: a VPN client that captured the routes (4.17), an SSH default that pages like an outage (4.18), a directory mode that looks like a broken account (4.19), and six laptops’ worth of divergent SSH trust (4.20).
Declined #
- A fail-closed credential-rotation design for the edge switch is a careful piece of engineering, but it is a decision made in advance, not a lesson. It has still not been executed months later and nothing has gone wrong to write up.
- A deliberate two-DHCP-responder arrangement exists on one of the networks the firewall pair serves. It is worked around because a consumer router cannot have its DHCP server disabled, and it is a design accommodation rather than a dated incident with a cost.
- An OPNsense API client failing with an obscure TLS error on one laptop and not another, while a command-line fetch worked on both, cost minutes and changed one flag in one script.
- A network card that dropped both its ports three times on 20260909 and was replaced is a genuine hardware fault, but it belongs to the hardware theme. It is noted here only because it sits on the same card as 4.1.
- Small documentation drift found in the as-built audit, a missing row in one table, an unclosed parenthesis in a role name, unfilled rack-position fields, was closed the same day as record keeping. No incident, no cost.
- The relay for the remote-access mesh briefly lost its home region during the DNS cutover of 20260828 and recovered on the next restart once DNS was back. The relay had minutes of degraded, not broken, performance, and one update interval was tuned down as a precaution.
The lessons, in order
- 4.1CARP split-brain that was two bad cables, not bad config20260817after redaction
- 4.2The virtual-MAC fault on the circuit: a two-day diagnosis with the provider20260818 to 20260820after redaction
- 4.3The admin login page open to the internet, closed ten minutes after it was seen20260820after redaction
- 4.4Kea DHCP high availability: five defects before it actually failed over20260817 (lab, four defects) and 20260827 (production, a fifth)after redaction
- 4.5The management switch that arrived from a previous life, locked20260818after redaction
- 4.6A default OpenWrt access point is a rogue DHCP and DNS server20260818after redaction
- 4.7The Intel chip that eats its own DHCP replies20260828as-is
- 4.8A VLAN renumber that never touched a live address20260827after redaction
- 4.9Cutting a flat 135-host network to eighteen VLANs in one day, and the DNS outage that came out of it20260828after redaction
- 4.10Why cross-rack switch pairing sounded right and was wrong20260817after redaction
- 4.11One switch generation, one silent 2.5 gigabit ceiling20260914 (found and documented; affects links since the fabric build)as-is
- 4.12Zone transfers need a shared key, not just a source-address rule20260818after redaction
- 4.13Remote access on a storage box, and the redesign that survived a lab-caught wrong assumption20260905 (the outage that triggered the redesign) to 20260911 (production cutover)after redaction
- 4.14A NAT rule with a misspelled field name took public services down for six minutes20260906after redaction
- 4.15A resolver that lied by omission: healthy on every check while replication silently stopped20260920after redaction
- 4.16A DNS helper's own safety feature nearly destroyed the wrong record twice20260915 and 20260919after redaction
- 4.17A VPN client on a laptop that quietly captured Node0's own routes20260830after redaction
- 4.18An SSH security default that pages as a network outage20260821as-is
- 4.19A restrictive permission mode that looks like a broken account, not a broken directory20260830, cause found 20260904after redaction
- 4.20Two files, one name lookup: reconciling six laptops' worth of SSH trust20260830 to 20260831after redaction
Source: node0 lessons v0.1, section 4. Sanitized: checklist v0.1, 20260921; voice pass 20260921. Part of oznog.com/node0.
