VyOSVII · Interface FundamentalsInterfaces
Interface diagnostics — what to run when an interface is broken
What you'll learn
- Run the standard interface diagnostic command set on a broken interface
- Read the output of `show interface`, `ip`, `ethtool`, `tcpdump` to find the root cause
- Apply the triage flow: link, address, route, peer
- Recognise the diagnostic failure modes the engineer must handle
Prerequisites
Verified against VyOS 1.5.x LTS (circinus) · VyOS 1.4.x (sagitta) — legacy · FRRouting 10.x (VyOS 1.5) · Linux kernel 6.6 LTS (VyOS 1.5 base) · strongSwan 5.9.x (IPsec) · WireGuard 1.0.x (kernel module + userspace tooling) · 2026-08-15
Interface diagnostics — what to run when an interface is broken
When an interface is broken, the routing engineer needs a disciplined diagnostic flow. This lesson covers the standard command set, the triage flow, and the failure modes each command is designed to detect.
The triage flow
flowchart TB
A[Interface broken] --> B[Step 1: link state<br/>show interface]
B --> C{Link OK?}
C -->|no| D[Physical layer<br/>cable, switch port, NIC]
C -->|yes| E[Step 2: address<br/>ip addr show]
E --> F{Address OK?}
F -->|no| G[Address config<br/>DHCP, static, IPv6]
F -->|yes| H[Step 3: route<br/>ip route show]
H --> I{Route OK?}
I -->|no| J[Routing config<br/>static, dynamic, default]
I -->|yes| K[Step 4: peer<br/>ping, mtr, tcpdump]
K --> L{Peer OK?}
L -->|no| M[Upstream issue<br/>firewall, ISP, MTU]
L -->|yes| N[Check application / firewall]
Step 1 — link state
vyos@vyos:~$ show interface ethernet eth0
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
12345678 123456 0 0 0 1234
TX: bytes packets errors dropped carrier collisions
87654321 876543 0 0 0 0
The output shows:
state UP— the interface is admin-up and link-up.RX errors 0 TX errors 0— no link-layer errors.RX dropped 0 TX dropped 0— no packet drops.
If errors or dropped are non-zero, the link has issues:
check the cable, the switch port, the auto-negotiation.
Step 2 — address
vyos@vyos:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
The interface has the expected IPv4 address. inet6 fe80:: is
the link-local IPv6 address (always present if IPv6 is enabled).
If the address is missing:
- DHCP: check
show dhcp client leases. - Static: re-issue the
setcommand. - IPv6: check Router Advertisements.
Step 3 — route
vyos@vyos:~$ ip route show
default via 192.0.2.254 dev eth0 proto static metric 100
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.1 metric 100
The routing table has a default route via 192.0.2.254 (the
upstream gateway) and a connected route for the local subnet.
If a route is missing:
- Default:
set protocols static route 0.0.0.0/0 next-hop <gateway>. - Specific:
set protocols static route <prefix> next-hop <gateway>. - Dynamic: check the routing protocol (
show ip bgp summary,show ip ospf neighbor).
Step 4 — peer
vyos@vyos:~$ ping -c 5 192.0.2.254
PING 192.0.2.254 (192.0.2.254) 56(84) bytes of data.
64 bytes from 192.0.2.254: icmp_seq=1 ttl=64 time=0.421 ms
...
vyos@vyos:~$ mtr -r -c 10 8.8.8.8
Start: 2026-08-15T14:23:01+01:00
HOST: vyos Loss% Snt Last Avg Best Wrst StDev
1. 192.0.2.254 0.0% 10 0.4 0.4 0.3 0.5 0.1
2. 10.0.0.1 0.0% 10 1.2 1.3 1.0 2.1 0.3
3. 8.8.8.8 0.0% 10 12.4 12.5 12.0 14.1 0.6
ping tests reachability to the next hop; mtr traces the path
to a remote host with packet loss statistics.
Packet capture with tcpdump
vyos@vyos:~$ tcpdump -i eth0 -n -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:23:01.421 IP 192.0.2.10 > 192.0.2.1: ICMP echo request
14:23:01.422 IP 192.0.2.1 > 192.0.2.10: ICMP echo reply
...
tcpdump shows the actual packets on the wire. It is the most
direct way to confirm traffic is flowing. Common uses:
- Confirm ARP is resolving (
arp who-has). - Confirm BGP packets (
tcp port 179). - Confirm traffic is leaving the interface (
tcpdump -i eth0 src host 192.0.2.1). - Confirm MTU errors (
tcpdump -i eth0 'ip[6:2] & 0x3fff != 0').
Reading error counters
vyos@vyos:~$ ip -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
12345678 123456 12 0 0 1234
TX: bytes packets errors dropped carrier collisions
87654321 876543 0 0 0 0
Non-zero errors indicates:
- RX errors: CRC errors, frame errors, FIFO overrun. Likely a physical-layer issue.
- TX errors: TX FIFO errors. Likely a driver issue or rate limiting.
- dropped: kernel queue overrun. Likely congestion.
- carrier: link-layer carrier loss. Likely physical-layer issue.
- collisions: half-duplex link. Should be zero on full-duplex.
How the result is validated
The diagnostic commands confirm:
- Link state:
show interface ethernet - Address:
ip addr show - Route:
ip route show - Peer:
ping,mtr,tcpdump
If all four pass, the interface is operational. If any step fails, the operator fixes the failing layer before continuing.
How it fails
The production failure modes the engineer must recognise:
- Diagnostic commands run on the wrong interface. A typo
of
eth1foreth0produces output that looks plausible but is for the wrong link. - tcpdump with no output. A packet capture with no packets can mean the link is down, the filter is wrong, or the peer is not sending. Each has a different fix.
- mtr showing high loss at one hop. The issue may not be at the hop that shows loss; mtr’s loss counters are end-to-end per hop and can be misleading for asymmetric paths.
- RX errors but link up. A cable with intermittent issues produces RX errors without dropping the link. Replace the cable.
- No route to a host that is reachable. The host may be on a directly-connected subnet but the route is missing from the routing table.
Rollback
Diagnostic commands are read-only. The recovery is for the underlying issue:
- Bad link: replace cable, fix switch port.
- Bad address: reconfigure.
- Bad route: reconfigure or restart routing protocol.
- Bad peer: investigate upstream.
Production discipline
Cross-course references
The Linux course’s XXII-Linux-NetTroubleshoot covers the
underlying network troubleshooting. The Proxmox course’s
XXIX-Proxmox-Networking covers the host-side diagnostics. The
Observability course’s LX-Observability-NetworkObs covers how
to alert on diagnostic output.
Quiz
Knowledge check · 4 questions
Q1. Which command shows the kernel-level error counters for an interface?
Q2. The triage flow for a broken interface is link → address → route → peer.
Q3. An operator runs `ping 8.8.8.8` from a VyOS box and gets 'connect: Network is unreachable'. What is the first step?
The error message indicates no route to the destination. The first step is to check the routing table.
Q4. An operator runs `tcpdump -i eth0` and sees only ARP requests but no responses. What is the most likely cause?
The interface is sending ARP requests but not receiving replies. The peer is not responding.
Passing score: 75%. Answers are checked in this browser.