Rolling a server back is a decision about which layer failed, not a file-copy exercise. Configuration, credentials and package versions move on separate clocks, and restoring one while the others stay current produces a host that looks healthy and behaves inconsistently. The sequence below assumes a change has already gone wrong and asks you to restore the smallest coherent state. Work through it in order, and treat the out-of-band access check as the step nobody should skip.

Capture a checkpoint you can actually restore

Record the configuration the service reads at startup, together with the version that parsed it last. A file that loaded cleanly under an older release may be rejected or silently ignored after an upgrade, so the version belongs in the same note. Pull in the material the config points at: private keys, certificate paths, listener definitions and the DNS and firewall entries that make the service reachable. If a restore would need a file you did not save, the checkpoint is incomplete.

Name the owner of each setting while the system is still healthy. A route installed by the provider panel, one added by the host firewall and one pushed to clients are three different objects, and restoring the wrong one leaves the other two in place. A short table of setting, owner and file path is enough.

Keep revocations separate from configuration

An old config can quietly reconnect a device you deliberately removed, which turns a recovery into a security regression. Preserve the current revocation list and disabled accounts while you restore the network policy, then reapply them before the service accepts clients.

Treat identity state as its own rollback with its own evidence. Certificate revocation files, account disablement and MFA enrollment rarely live in the same place as the daemon config, and a config restore will not touch them. Check the current state first so you know what must survive. After the restore, confirm the removed identity still fails to connect.

Reach the host when the tunnel fails

Open a path to the machine that does not depend on the component being changed. A hypervisor console, a management address on a separate interface or a serial console all qualify; an SSH session carried through the tunnel does not. If the only way in is the VPN you are about to restart, a bad route or firewall rule removes your ability to correct it. Test the alternate path before the change, not after. Log in through it once, confirm sudo works, and note the exact address you used.

The test is simple: bring the tunnel down while connected over the alternate path and see whether the session survives. If it drops, you have found the failure before it can strand you.

Apply one revision and know when it takes effect

Use the reload or restart the service documents, and find out which directives are read at which moment. Some values apply on reload, others only when a new session or process starts, so editing a file proves nothing about the running state. Restore a single revision rather than blending a new file with old runtime state. When in doubt, a full restart of the service is easier to reason about than a partial reload.

Check the unit definition before choosing: systemctl show -p ExecReload openvpn@server tells you whether a reload hook exists at all. Then apply the revision and read the journal for the first new errors before changing anything else.

Verify, record and investigate afterwards

Connect one authorized client and exercise what the service is for: name resolution, a reconnect, and the application that failed. Confirm the revoked identity is still refused. Record the revision you restored, the time and the reason, because the next operator will need all three. A rollback nobody documented becomes a mystery the next time the service misbehaves.

systemctl status openvpn@server --no-pager
journalctl -u openvpn@server -n 50 --no-pager

Once the service is stable, reproduce the failed change on a host or snapshot you can discard. That separates a bad configuration from a bad package or an expired certificate. Keep the restored configuration under version control so the next checkpoint starts from a known commit. The point of the exercise is a documented endpoint, not a permanent downgrade.

Barruulee wal qabatan