Skip to main content
RunBook Academy

← All runbooks in VyOS

medium riskservice affecting~40 min

Runbook: Add an Interface

1 · Prerequisites

Confirm every item is in place before any state change.

2 · Pre-checks

Read-only diagnostic commands. If any of these don't match expected output, stop and investigate further.

  • · Out-of-band console session open and proven, in a second window, before anything is typed in configure
  • · Baseline captured to the ticket: show interfaces, show ip route, show configuration commands | match interfaces
  • · The interface role is decided and written down — routed L3, bridge member, or VLAN trunk parent. A bridge member must not carry an address.
  • · ethtool -i eth3 recorded for the target interface: the bus-info line is the only evidence that eth3 is the port you cabled
  • · show ip route checked for the prefix you are about to address — a connected route wins over every other source and will displace whatever carries it today
  • · The intended address confirmed free: from a host already on the target segment, ping it and get no reply
  • · Peer end confirmed by its owner: switch port enabled, correct VLAN, speed and duplex left on autonegotiation
  • · Peer reviewer named in the ticket for the compare output, and an end time for the change window

3 · Procedure

Execute each step in order. Verify the expected output of a step before moving to the next.

  1. 1Open the out-of-band console in a second session and leave it open for the whole change. Every step below assumes the SSH path can die without ending the change.
  2. 2Capture the baseline from the console session: show interfaces, show ip route, ip link show, show configuration commands | match interfaces. Attach it to the ticket before entering configure.
  3. 3Prove the mapping: run ethtool -i eth3 and compare bus-info and the MAC against the port you physically cabled. If they disagree, STOP — everything after this step will configure the wrong port convincingly.
  4. 4Commit 1, identity only: configure, set interfaces ethernet eth3 description ..., compare, commit. No address. An address-less interface has no connected route, so this commit cannot change forwarding.
  5. 5Read the link: show interfaces ethernet eth3 must show u/u. ethtool eth3 must show the negotiated speed and duplex you expect. A u/D here is a cable or switch-port problem and is not fixed in VyOS.
  6. 6Confirm the segment is the one you think it is: monitor traffic interface eth3 and read the source addresses of the ARP and broadcast traffic. They must belong to the subnet you are about to join.
  7. 7Re-run the duplicate-address check now the link is up, from a host on the segment. An address that answers is an address you cannot have.
  8. 8Commit 2, the address: set interfaces ethernet eth3 address 198.51.100.1/24, then compare and have the named reviewer read the diff before you commit.
  9. 9Apply. commit-confirm 10 when you reach this router over the network; plain commit only when you are on the console.
  10. 10Verify in both views before you confirm: show interfaces ethernet eth3 and ip addr show eth3 must both show the address, show ip route must show the new connected route on the expected interface, and the segment gateway or peer must answer ping.
  11. 11Confirm inside the timer with confirm. If any check in the previous step failed, type nothing and let the timer roll the change back.
  12. 12Persist with save, then close the ticket with the post-change show interfaces and show ip route and the approved compare diff. Until save runs, the change survives only until the next reboot.

4 · Verification

Confirm the procedure actually fixed the problem.

  • show interfaces ethernet eth3 reports u/u and the configured address
  • ip addr show eth3 agrees with the VyOS view — if the address is in one and not the other, the commit did not reach the kernel and the interface is not forwarding
  • show ip route contains the new connected route (C>*) for the prefix, on the expected interface
  • The prefixes that were reachable before the change are still reachable by the same path: the pre-change and post-change show ip route differ only by the new connected route, or the displacement was the documented intent
  • ethtool eth3 shows the expected speed and full duplex, and ip -s link show eth3 shows RX and TX error counters that are not climbing
  • The segment gateway or peer answers ping from the router, and the router answers ping from a host on the segment
  • save has run and show configuration commands | match eth3 matches what the reviewer approved

5 · Rollback

If verification fails, undo the procedure in reverse order.

  • Before the address commit, rollback is free: delete interfaces ethernet eth3 description, commit. Nothing was forwarding.
  • After the address commit and before confirm, the cheapest rollback is to do nothing — the commit-confirm timer restores the previous configuration on its own
  • After confirm: configure, rollback 1, compare, commit, save. rollback 1 only loads the candidate; the revert is not live until commit.
  • Removing the address removes the connected route with it. If hosts on the segment were re-pointed at this router as their gateway during the change, the rollback is itself an outage — coordinate it, do not just run it.
  • Roll back from the out-of-band console whenever the interface being changed is, or has become, the path you are connected over
  • Verify the rollback against the baseline captured in step 2, not against memory: show ip route and show interfaces must match the pre-change capture

6 · Escalation

When the runbook isn't enough, contact:

  • · Escalate to the field or data-centre team when ethtool -i bus-info does not match the port you were told to cable — do not guess the mapping and do not re-cable blind
  • · Escalate to the switch owner when the link is u/D, when the ARP sources on the segment belong to a different subnet, or when every frame arrives tagged
  • · Escalate to network engineering before committing the address if show ip route shows the prefix already carried by OSPF, BGP or a static route — the connected route will displace it locally and no protocol will withdraw it
  • · Escalate to network engineering when this router is one of a redundant pair: a new connected route on one member changes only that member's forwarding, and the asymmetry is the incident
  • · Hold rather than force: if the peer end is not ready, commit the interface with disable set, hand the ticket to the peer owner with an agreed end time, and leave the router in its pre-change forwarding state

An interface is added twice: once in the configuration tree and once in a rack or a hypervisor. The configuration half takes about fifteen seconds. Every failure mode in this runbook lives in the gap between the two halves, and none of them announces itself — a router with an address on the wrong NIC passes every show command you are likely to run.

eth3 is not a port. It is whichever NIC the kernel enumerated fourth, mapped into the VyOS tree at boot. On a bare-metal box with two dual-port cards, on a hypervisor where the virtual NICs were attached in a different order than the networks were created, or on a host where somebody added a card last quarter, the number on the label and the number in the configuration are related only by convention.

So this runbook splits one change into two commits, with the evidence step between them: commit the interface’s identity, prove the link and the segment are what you were told they are, and only then commit the address.

When to use this runbook

  • A physical Ethernet port is being brought into service on a router that is already carrying production traffic.
  • A NIC has been added to an existing router and needs to become a routed interface.
  • An interface that was commissioned with disable is being enabled now that its peer is ready.

When not to use it

  • The interface will be a bridge member. The address belongs on the bridge, not on the member. An address on a member of a bridge is one of the interface anti-patterns the course names explicitly, and it produces an interface that answers but does not route the way you expect.
  • The interface will be a VLAN trunk parent carrying no untagged traffic. The parent stays address-less and the addresses go on the sub-interfaces. Use the Add a VLAN runbook.
  • The interface already exists and you are changing its address. That is a different risk profile: you may be standing on the thing you are modifying, and there is no “before” state where forwarding is unaffected.
  • This is a provider uplink turn-up. The L1/L2/L3 part below still applies, but the BGP session, the NAT rules and the firewall policy are separate changes with their own runbooks.

Blast radius

One interface, one segment — and the router’s entire forwarding decision for one prefix.

The number that matters is not “one interface”. It is what the new connected route displaces. A connected route installs at administrative distance 0. Static is 1, eBGP is 20, OSPF is 110, iBGP is 200 — all of them lose. The moment you commit an address, this router stops believing whatever it was told about that prefix and starts believing the destination is on the wire in front of it.

Inputs

  • The ethN name, plus the bus-info or MAC address that proves which physical port it is.
  • The address and prefix length, and the segment’s existing gateway if it has one.
  • A description string. Six months from now it is the only thing standing between an incident responder and the wrong interface.
  • Whether the segment needs a non-default MTU, and what the peer is configured for.
  • The interface’s role: routed, bridge member, or trunk parent.
  • Change window, peer reviewer, and a working out-of-band path.

Step 1: Establish the way back before you need it

Read-only / Safebaseline capture
show interfaces
show ip route
show configuration commands | match interfaces
ip link show

Run this from the console session, not from the SSH session you are about to put at risk, and attach the output to the ticket. It is both the rollback target and the evidence that the change did what it was supposed to do and nothing else.

Out-of-band access is the first safety net and commit-confirm is the second — in that order, not the other way round. The commit-confirm timer lives in configd’s memory: if configd restarts or the box reboots before you confirm, the timer is lost and the change persists. Commit-confirm protects you against a change that is wrong. It does not protect you against a box that stops answering.

Step 2: Prove which NIC eth3 is

Read-only / Safeethtool -i
ethtool -i eth3
ip link show eth3
driver: ixgbe
version: 5.15.0
firmware-version: 0x800003df
bus-info: 0000:03:00.1

Illustrative output

bus-info is the PCI address of the card and the port on it. Compare it against the cabling record. On a virtual machine, compare the MAC in ip link show against the MAC the hypervisor assigned to the virtual NIC attached to the network you want.

If the two disagree, stop and escalate. VyOS can bind a specific NIC to a specific ethN slot with hw-id, but choosing to do that is a platform decision with its own change, not something to improvise mid-runbook.

Step 3: Commit the identity, not the address

Configuration changecommit 1 — description only
configure
set interfaces ethernet eth3 description 'CR-1187 transit to dist-sw-02 port 14'
compare
commit

This commit cannot change forwarding. An interface with no address node is address-less: it is up at layer 2 and has no layer 3 address, so it contributes no connected route and no traffic is drawn to it. That is exactly what makes it a safe first commit — you get a labelled interface to diagnose against, in the running configuration, at no risk.

If the peer end is not ready yet, this is where you stop. Add set interfaces ethernet eth3 disable in the same commit, hand the ticket back with an agreed end time, and leave the router forwarding exactly as it did this morning. A staged interface left admin-down is a documented state; a staged interface left up and address-less is a port nobody can explain in six months.

Read-only / Safeadmin state / link state
vyos@vyos:~$ show interfaces ethernet eth3
Codes: S - State, L - Link, u - Up, D - Down, A - AdminDown
Interface        IP Address        S/L  Description
---------        ----------        ---  -----------
eth3             -                 u/u  CR-1187 transit to dist-sw-02 port 14

Illustrative output

u/u is admin-up and link-up. u/D is admin-up with no link: a cable, a disabled switch port, or a peer that is powered off — none of which is fixed inside VyOS, and all of which are cheaper to fix now than after the address is live. A/D means somebody, possibly you in step 3, left disable set.

Then confirm the link negotiated what you expect:

Read-only / Safespeed, duplex, errors
ethtool eth3
ip -s link show eth3

A port that should be 10 Gbps and reports 1000 Mb/s has a cable or a switch-port limit, not a VyOS problem — autonegotiation only advertises what the physical path can sustain. Non-zero and climbing RX errors with the link up is the signature of a marginal cable: the link stays up and the errors accumulate. Both are worth resolving before the interface carries traffic, because after it does, they present as an application problem.

Step 5: Confirm the segment is the one you were told

Read-only / Safewatch the segment
monitor traffic interface eth3

This is the cheapest check in the runbook and the one most often skipped. Read the source addresses in the ARP and broadcast traffic. They must belong to the subnet you are about to join. Three outcomes matter:

  • Sources in the expected subnet. Right port, right cable, right switch configuration. Proceed.
  • Sources in some other subnet. The switch port is in a different VLAN than you were told. Escalate to the switch owner; do not “fix” it by changing the address you configure.
  • Every frame arrives tagged. The port is a trunk. This is not the change you are running — the addresses belong on VLAN sub-interfaces. Stop and use the Add a VLAN runbook.

Now repeat the duplicate-address check with the link up: from a host already on the segment, ping the address you intend to configure. A reply means the address is in use. Two interfaces holding the same address is accepted by the kernel and produces traffic that is unpredictable rather than broken, which is materially harder to diagnose than an outage.

Step 6: Commit the address

Service impact possiblecommit 2 — the address
configure
set interfaces ethernet eth3 address '198.51.100.1/24'
compare
commit-confirm 10
exit

compare first, and let the named reviewer read it. The diff is the last cheap chance to catch a transposed octet or a /32 where you meant /24. A prefix length that is one character wrong produces a host route instead of a subnet route, and traffic for the subnet never comes near this router.

commit-confirm 10 when you are reaching the router over the network. Then leave configure mode and test from outside it. If the change cost you your session, the timer restores the previous configuration without anyone having to reach the box.

Point of no return. From this commit onward the router’s forwarding table has changed. Inventory notes and ticket edits undo nothing; only the rollback path does.

A note on the DHCP variant: set interfaces ethernet eth3 address dhcp is a different decision, not a shortcut. A DHCP client on an inward-facing interface will happily take a lease from a local server and give this router an address and a default route it was never supposed to have. If the segment is one you control, configure the address statically.

Step 7: Verify in both views, then confirm

Read-only / Safeverify the address and the route
show interfaces ethernet eth3
ip addr show eth3
show ip route
ping 198.51.100.254

Two views, deliberately. show interfaces ethernet eth3 is what VyOS believes; ip addr show eth3 is what the kernel is actually holding. An address present in one and absent from the other is an interface that is not forwarding, however convincing the configuration looks — and it is an escalation, not something to fix by re-running commit.

In show ip route, look for the new connected route on the expected interface, and then compare the rest of the table against the baseline from step 1. The pre-change and post-change tables should differ by exactly one entry.

Only now:

Configuration changeconfirm and persist
configure
confirm
save
exit

MTU is a separate change

If the segment needs a non-default MTU, do it as its own commit, after this runbook has completed and been verified. Two reasons.

Changing MTU on an active interface resets it — a second outage on an interface that has just entered service, at a moment when everyone has stopped watching. And MTU is a property of the path, not of your router: both ends must agree, and for jumbo frames every switch in between has to carry the larger frame too. A one-sided MTU increase does not fail loudly. Frames up to 1500 flow, everything larger disappears, and the symptom reaches you as “large file transfers hang” weeks later.

Validate an MTU change with a do-not-fragment ping sized to the MTU you configured, in both directions, before you call it done.

The interface is unfiltered until you say otherwise

A newly addressed routed interface is subject to whatever your estate’s firewall policy already says, and nothing more. Confirm what that is before the interface carries traffic, particularly if the segment is less trusted than the ones this router already faces.

Rollback

Rollback is free before step 6 and is a change in its own right after it.

Service impact possiblerevert a committed interface
configure
rollback 1
compare
commit
save

rollback 1 loads the previous archive entry into the candidate. It does not commit. An operator who runs rollback 1 and walks away has reverted nothing — the running configuration is untouched until commit. compare between the two is the review step, and it catches the case where the archive entry you are reverting to predates some other change that must survive.

The cost of the rollback is the connected route disappearing. If anything on the segment was re-pointed at this router as its gateway during the change window, removing the address is itself an outage. That is a coordination problem, not a command problem: find out who moved before you revert.

If the interface has become the path you are connected over, roll back from the console. Verify the result against the step 1 baseline, not against memory.

Common patterns

SymptomLikely causeNext check
u/D after cablingCable, disabled switch port, peer powered offSwitch port state, from its owner
Link u/u, no ARP traffic on the segmentSwitch port is in a different VLANmonitor traffic interface eth3, read the sources
Every frame arrives taggedThe port is a trunk, not an access portStop; this is the Add a VLAN runbook
Address commits, no connected route appearsAddress landed on a bridge member, or disable is still setshow configuration commands filtered on the interface
Address in show interfaces, absent in ip addr showThe commit did not reach the kernelEscalate; do not re-commit over it
Traffic leaves the wrong interfaceethN is not the port you cabledethtool -i bus-info on every interface
Everything correct locally, still unreachableNo return path on the peerTest from the far end, not from the router
Works, then vanishes after a rebootsave never ranshow configuration commands against the boot config
Prefix stopped using its usual pathThe new connected route displaced it at distance 0Baseline show ip route against the current one

Escalation

Escalate rather than improvise when:

  • bus-info does not match the cabling record. Re-cabling blind turns a mapping question into two.
  • The segment’s ARP sources belong to a different subnet, or the port is trunking. Both are the switch owner’s change.
  • The prefix is already carried by OSPF, BGP or a static route. Displacing it is a routing design decision.
  • This router is one of a redundant pair. A new connected route changes one member’s forwarding and not the other’s, and the asymmetry is the incident that follows.

Holding is a legitimate outcome. Commit the interface with disable, name the owner of the blocking item, agree an end time, and record the router as unchanged in the ticket. A half-finished interface with a live address is worse than one that is honestly dark.

References

  1. VyOS — Ethernet interfaces
  2. VyOS — Interfaces overview
  3. VyOS — CLI, commit and rollback
  4. ip-link(8)
  5. ip-address(8)