Reported symptoms
The edge firewall rbdr-fw-edge-01 lost both power supplies overnight. The
spare, rbdr-fw-edge-02, is a later model from the same vendor: same SFP+ WAN
port, same four copper ports, different board. The team restored the nightly
configuration export onto it and re-made the cables socket for socket from the
rack diagram.
Eleven minutes later the device is green: WAN gateway online, carrier on all five interfaces, every logical interface holding the address the design document specifies, the internet reachable from the firewall.
Nothing behind it is. Office workstations have no default gateway; machines that
renewed a lease came back in 10.20.40.0/24, the voice range, though cabled to
the office switch as always; the DMZ host is unreachable both ways. The firewall
log holds no blocks and no rule-load errors.
Evidence provided
The interface assignment, before and after. From the export: WAN on ix0,
LAN on igb0, DMZ on igb1, MGMT on igb2, VOICE on igb3 — and the same five
pairings read back off the restored device. The map that moved is the other
one:
$ ifconfig -a | grep -E '^(igb|ix)[0-9]|status:'Pulling one cable at a time gives socket 1 as igb3, socket 2 as igb2,
socket 3 as igb1, socket 4 as igb0 — the reverse of the dead chassis, whose
copper ports were a single quad controller.
The rule set, still naming the old interfaces. A fresh export from the restored device, normalised and diffed against the source export:
EXPORT=/srv/rbdr-restore/rbdr-fw-edge-01-config.xml
FRESH=/srv/rbdr-restore/rbdr-fw-edge-02-config.xml
xmllint --format "$EXPORT" > "$EXPORT.norm"
xmllint --format "$FRESH" > "$FRESH.norm"
diff -u "$EXPORT.norm" "$FRESH.norm"
Rules, aliases, NAT entries and assignments are identical. The only differences are fields the appliance regenerates for itself: the system UUID, the SSH host keys and the GUI certificate.
A packet test from a client. From rbdr-probe-lan, on the office VLAN:
GW=10.20.10.1
ip -4 neigh flush all
ping -c 3 -W 2 "$GW"
ip -4 neigh show "$GW"
No reply, and the neighbour entry stays incomplete — the exchange fails at
address resolution, before any rule is consulted. A capture on the firewall at
the same moment shows those requests for 10.20.10.1 arriving on igb3, an
interface configured 10.20.40.1/24:
$ tcpdump -n -i igb3 -c 20 'arp or (udp port 67 or udp port 68)'Work the evidence before reading on
- The diff shows the rule set intact. What does that settle, and what does it leave open?
- The client fails at address resolution rather than being refused. Which layers does that exonerate, and which does it accuse?
- The logical-to-device map is unchanged, the device-to-socket map reversed. Which of the two does an export contain?
- What do the seven post-restore checks have in common, and which could have answered differently in the broken topology?
Root cause
Interface names are hardware-derived, and the hardware changed
An export does not store ports. It stores names, and igb1 is not an identifier
the appliance chose: it is assembled from the driver that claimed the device and
the order the bus was probed in. Restore that file onto a different board and
every name still resolves, because the replacement also has four igb ports.
Nothing errors. What the names denote has moved.
The office switch now lands on the interface holding 10.20.40.1/24 and the
voice rules, and the other segments rotate to match. The firewall is behaving
correctly: it declines address resolution for 10.20.10.1 on igb3 because it
does not hold that address there, and it offers voice-range leases to the office
VLAN because that is the scope those broadcasts reach.
The alternative this rules out. The first theory was an incomplete restore — a truncated file, a partial import, a rule set that failed to load. The normalised diff kills it: rules, aliases, NAT and assignments equal the source, and the only deltas are identity fields the appliance regenerates. A partial import would put the missing rules in that diff, and would show as refusals rather than silence.
The control that should have caught it was a self-test
The post-restore checklist has seven items: interfaces up, addresses correct,
gateway online, services running, DNS resolving, ping to an external host, GUI
reachable. Every one is a question the device asks about itself, and a device
sits on every one of its own networks by definition. 10.20.10.1 exists whether
it is on the socket facing the office switch or the one facing the voice switch,
so “the LAN interface holds the right address” is true in both worlds. The
checklist could not fail: it requires no second machine, and a firewall exists
to be a path between machines.
Resolution
Change nothing in the rule set. The rules are correct and were restored correctly; editing them to make traffic flow encodes the wrong mapping for good.
Fix the assignment. Establish the device-to-socket map empirically, then re-point each logical interface at the device carrying its network, through Interfaces then Assignments, or option 1 of the console menu when the web interface is itself on the wrong wire. Reassignment rewrites only the logical-to-device pairing; rules, aliases and NAT follow the logical name. Re-cabling to match the enumeration also restores service and is the wrong repair: it leaves the plant disagreeing with the rack diagram, so the next person in the rack recreates the incident.
Then clear the leases the wrong scope handed out: a workstation keeps its
10.20.40.0/24 address until it expires, so the segment recovers when the
clients have renewed, not when the assignment is fixed.
Verification
Where the prober stands is the whole of the method; nothing measured from the firewall counts.
Put a host on each protected segment and resolve the gateway at layer 2 first: the neighbour entry must complete, which proves the address is on that wire rather than merely somewhere on the device. Then exercise one path the rules permit and one they refuse, and confirm the refusal appears in the log against the interface you expect. A permitted flow proves the wire; a logged block proves the rule set is attached to it. Finally take a DHCP lease on each segment and check its range — one command from one client, and it would have caught this incident by itself.
Prevention
Treat the interface map as part of the recovery artefact. The export captures logical names; what they denote belongs to the chassis, and the chassis is what changes in a hardware recovery. Keep logical interface, device name, MAC address, panel socket and switch port together, and expect the device-name column to be wrong on any replacement.
Ban self-tests from post-restore validation of network devices. Every check the device runs against itself passes in both topologies. Require a probe host per protected segment and make its result the sign-off — the discipline this course applies to backups, where a performed restore is the evidence and a green job is not.
Rehearse onto the spare: the chassis on the shelf is the one the recovery will use. And alert on segment reachability rather than device health — polling the firewall confirms it is running; traversing it confirms it is doing its job.