Scenario
You are operating an OPNsense HA pair in active/passive. The following symptoms appear:
- A rule added on the master does not appear on the backup after the next sync
- System → High Availability → Status: configuration sync “in error” or “no connection”
- Service definitions (Unbound, DHCP, Suricata) drift between nodes
Available evidence:
- configd log on backup: XMLRPC sync connection refused / timeout to
<master sync IP> - No firewall rule on the sync interface for HTTPS (TCP/443) to the master from the backup
- Master System → High Availability → Settings: backup sync IP misconfigured
Your task
Determine the cause, recover, document, and validate.
Investigation
The investigation follows the discipline taught in Part XXIX:
- Form hypothesis, find evidence, test, validate.
- Use the available evidence above to bound the search.
- Reach one of the likely root causes.
Recovery procedure
(Do not reveal until you have reasoned through the problem.)
- Identify the failing component.
- Apply the remediation pathway.
- Validate with the verification step.
- Document the incident.
Remediation
- Confirm both nodes list each other’s sync IPs under System → High Availability → Settings. 2. Add an “Allow” rule on the sync interface for HTTPS from the peer sync IP. 3. From the backup,
curl -k https://<master-sync-ip>/shows the GUI. 4. Click “Synchronize to peer” on the master manually and watch configd.log.
Verification
Configuration sync reports OK; a rule added on the master appears on the backup within seconds; config diff job reports zero differences.
Rollback
Disable HA sync temporarily; reconcile configs by hand or restore from a known-good backup.
Prevention
Keep the master/backup sync IPs symmetric and routeable. Monitor config sync status via the API or your observability stack. Add a daily config-diff job that alerts if rules, aliases, or services diverge between nodes.