Skip to main content
RunBook Academy

Proxmox VEIV · NetworkingLinux networking

Applying network changes without losing the node

Intermediate⏱ ~24 minifreloadifquery

What you'll learn

  • Explain what `/etc/network/interfaces.new` is and when it exists
  • Apply a staged change with `ifreload -a` and revert one that has not been applied
  • Build a rollback timer that restores the node when a change is wrong
  • Identify which changes require out-of-band access before you start

Prerequisites

Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12

Not yet marked complete on this device.

You edit a bridge in the Proxmox GUI. You click OK. The change appears in the interface list, greyed, with a note at the top of the panel that there are pending changes.

Nothing has happened to the network. The node is running exactly the configuration it was running a minute ago, and it will keep running it until you take a second, separate action. That gap is the most useful safety property Proxmox networking has, and most operators discover it by accident — usually after clicking OK on a management-interface change and being surprised that they are still connected.

This lesson is about that gap: what it is, how to close it deliberately, and how to get back out of it when the change turns out to be wrong.

The staging file

The Proxmox documentation describes the mechanism directly: “Instead, we write into a temporary file called /etc/network/interfaces.new.

So there are two files, and the difference between them is the whole model:

FileContainsExists
/etc/network/interfacesThe configuration currently in effectAlways
/etc/network/interfaces.newThe staged configuration, not yet appliedOnly when changes are pending

The presence of interfaces.new is therefore a state, not a file you maintain. If it exists, somebody has staged a change and not applied it. If it does not, what you see in interfaces is what the node is running.

Read-only / Safeis there a pending change on this node?
ls -l /etc/network/interfaces /etc/network/interfaces.new 2>&1

if [ -f /etc/network/interfaces.new ]; then
diff -u /etc/network/interfaces /etc/network/interfaces.new
else
echo "no pending network changes on $(hostname)"
fi

Applying, and the two ways it happens

The documentation gives both paths: “Users can either click the Apply Configuration button in the GUI or execute the command ifreload -a. Both do the same thing — interfaces.new is moved over interfaces and the running configuration is reconciled with it.

Service impact possiblecheck the syntax before you apply anything
ifreload -s -a
Service impact possibleapply the staged configuration
ifreload -a

Reverting a change you have not applied

Configuration changediscard the staged change
if [ -f /etc/network/interfaces.new ]; then
diff -u /etc/network/interfaces /etc/network/interfaces.new
rm -f /etc/network/interfaces.new
echo "staged change discarded"
fi

The API exposes the same two operations, which is what you want from a script or from another node:

Service impact possibleapply or revert through the API
NODE=pve1

# discard the staged change on that node
pvesh delete "/nodes/$NODE/network"

# apply the staged change on that node
pvesh set "/nodes/$NODE/network"

There is no equivalent for a change you have applied. Once interfaces.new has been moved over interfaces, the previous content is gone unless you kept a copy — which is the first half of the rollback pattern below.

When ifupdown2 is not installed

The documentation covers this case too: without ifupdown2, a reboot activates the staged file, and “the systemd pvenetcommit service” performs the move before the networking stack starts.

On a stock Proxmox VE 9 install ifupdown2 is present, so this is mostly relevant to nodes that have been through an unusual upgrade path. The consequence if it applies to you is significant, though: a staged change on such a node is a change that will apply at the next reboot, possibly months later, possibly to somebody else’s surprise. That is another reason the pending-change check is worth running as part of a routine node review rather than only when you are editing.

The rollback timer

The pattern that makes a risky network change survivable is to schedule the undo before you make the change, and cancel it if you are still connected afterwards.

Service impact possiblearm a rollback before applying
IFACES=/etc/network/interfaces
BACKUP=/root/interfaces.known-good

cp "$IFACES" "$BACKUP"

echo "cp $BACKUP $IFACES && ifreload -a" | at now + 10 minutes
atq

Apply the change. Then, from the connection you now have:

Read-only / Safeconfirm you are still in, then disarm
ip -br addr
ip route
pvecm status | head -20
ifquery --check -a

# only once the above are correct: read the job number from atq, then
JOB=1
atrm "$JOB"

If you are not connected in ten minutes, the job runs without you and the node comes back on the old configuration.

Which changes drop your session, and exactly where

This is the part worth knowing before you start rather than during.

ChangeDoes the session drop?Where
Add a new bridge with no portsNo
Add a VLAN interface on a non-management NICNo
Change MTU on a non-management interfaceNo
Add a slave to an existing bondBrief interruptionAt ifreload -a
Change the management IP or its netmaskYes, permanently on the old addressAt ifreload -a
Move the management IP to a different bridgeYesAt ifreload -a
Add VLAN awareness to the management bridgeYes, if the switch port is not already a trunkAt ifreload -a
Change the default gatewayYes, if you are not on-linkAt ifreload -a
Change MTU on the management interfacePossiblyAt ifreload -a, and it may work for the SSH session and fail for larger transfers

Every row marked Yes requires out-of-band access before you begin. Not “should have” — the step at which the session drops is ifreload -a, and after it there is no path back into the node through the network you just reconfigured.

The MTU row is the one that catches experienced people, because the failure is partial. Raising the management interface to 9000 when the switch port is at 1500 leaves SSH working — the packets are small — and breaks live migration, backups and anything else that fills a frame. The node is up, reachable, and quietly broken in a way that surfaces hours later on a different system.

SDN writes network configuration too

Proxmox SDN does not edit /etc/network/interfaces. It generates /etc/network/interfaces.d/sdn, which the main file includes, and it regenerates that file wholesale each time the SDN configuration is applied.

Two practical consequences:

ifreload -a applies both. A pending SDN change and a pending interfaces change are applied by the same command, which is fine when you know it and surprising when you do not. Check for both before applying either.

A hand-edit inside interfaces.d/sdn is discarded. Not at the next reboot — at the next SDN apply, which could be triggered by a colleague adding an unrelated VNet. If you need a permanent change to something SDN manages, it belongs in the SDN configuration.

Read-only / Safesee the whole picture before applying
ls -l /etc/network/interfaces.new 2>/dev/null
head -40 /etc/network/interfaces.d/sdn 2>/dev/null

# what an SDN apply would change, without applying it
pvesh get /cluster/sdn/dry-run --output-format yaml 2>/dev/null | head -30

pvesh get /cluster/sdn/dry-run is the SDN equivalent of the interfaces diff — it “return[s] the difference between the current configuration and the pending configuration”. It is the dry run that ifreload does not have, for the half of the configuration that SDN generates.

Common mistakes

  • Not knowing interfaces.new exists, and concluding that the GUI change did not save because the network did not change.
  • Applying without reading the diff. Somebody else’s staged change goes out with yours.
  • Expecting ifreload -n to work. There is no dry run; -s checks syntax only.
  • Trusting -s as a safety check. A file that parses cleanly can still move the management IP somewhere unreachable.
  • Cancelling the rollback timer before verifying. The timer is only worth anything if it outlives your confidence.
  • Touching the management interface without OOB access. The step that drops the session is ifreload -a, and there is no way back through the network afterwards.
  • Hand-editing /etc/network/interfaces.d/sdn. The next SDN apply regenerates it, possibly triggered by somebody else.
  • Rebooting to fix a bad apply on a node without ifupdown2. The reboot applies the staged file rather than discarding it.
  • Changing one node and assuming the cluster followed. /etc/network/interfaces is not replicated.

Key takeaways

  • Proxmox stages network changes in /etc/network/interfaces.new. Its existence means a change is pending; its absence means there is none.
  • Apply with the GUI Apply Configuration button or ifreload -a. Revert an unapplied change by removing the staging file.
  • ifreload has -s for a syntax check and no dry-run flag.
  • ifupdown2 computes a difference and touches only what changed, which is why applying a change does not disturb unrelated interfaces.
  • ifquery --check -a verifies the running state against the file and returns a usable exit code.
  • Arm a rollback with cp plus at before the apply; disarm it only after verifying reachability and cluster membership.
  • Any change to the management path requires out-of-band access, and the session drops at ifreload -a.
  • SDN generates /etc/network/interfaces.d/sdn and regenerates it on every apply. Do not hand-edit it.

Knowledge check

Knowledge check · 4 questions

  1. Q1. A colleague edited a bridge in the GUI an hour ago and left for the day. You need to add an unrelated VLAN interface tonight. What must you check before running ifreload -a?

  2. Q2. You need to move the management IP to a different bridge on a node whose IPMI has been unreachable for weeks. What is the correct position?

  3. Q3. Which statements about how ifupdown2 applies a configuration are accurate? Select all that apply.

  4. Q4. Removing /etc/network/interfaces.new is a safe operation on a production node at any time, because the running network configuration is not involved.

Passing score: 75%. Answers are checked in this browser.