Ubuntu NetPlan configuration for IP address setup
Netplan is Ubuntu’s standard way to declare networking in YAML and hand it off to a backend (“renderer”) like systemd-networkd or NetworkManager. Config lives under /etc/netplan/*.yaml, and Netplan can safely trial changes with automatic rollback.
When a machine is fresh (or YAML isn’t there yet), quickly discover the real device names:
# List interfaces (names, state)
ip -br link
# Include addresses (IPv4/IPv6)
ip -br addr
ip -br -4 addr
ip -br -6 addr
# Drill into a specific interface
ip addr show dev enp3s0
ip -br addr show dev enp3s0
-br
/--brief
shows tidy tables; -j
/--json
gives machine-readable output.ip a
is shorthand for ip addr
. You only need show dev IFACE
when narrowing to one device; for listing, show
isn’t required.Put one of these under
/etc/netplan/01-net.yaml
, thensudo netplan try
→ confirm →sudo netplan apply
.
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [10.10.10.20/24]
nameservers:
search: [corp.local]
addresses: [10.10.10.253, 8.8.8.8]
routes:
- to: default
via: 10.10.10.1
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses: [10.0.0.10/24]
routes:
- to: default
via: 10.0.0.1
metric: 100
- to: default
via: 10.0.1.1
metric: 200
network:
version: 2
renderer: networkd
ethernets:
enp3s0: { dhcp4: false }
bridges:
br0:
dhcp4: true
interfaces: [enp3s0]
network:
version: 2
renderer: networkd
bonds:
bond0:
interfaces: [enp3s0, enp4s0]
dhcp4: true
parameters:
mode: active-backup # or: 802.3ad
network:
version: 2
renderer: networkd
ethernets:
mainif: { dhcp4: false }
vlans:
vlan15:
id: 15
link: mainif
addresses: [10.3.99.5/24]
network:
version: 2
renderer: NetworkManager
wifis:
wlp2s0:
access-points:
"MY_SSID":
password: "********"
dhcp4: true
sudo netplan get
sudo netplan try # default 120s countdown
sudo netplan apply
If you lose connectivity during step 2, Netplan restores the previous state automatically after the timeout—exactly what you want over SSH.
--diff
to compare YAML vs live).sudo netplan --debug apply
.ip -br addr
, ip route
.resolvectl status
.journalctl -u systemd-networkd
or journalctl -u NetworkManager
.ip addr
to see actual IP state.On cloud images you’ll often find a generated file like /etc/netplan/50-cloud-init.yaml
. Your platform (cloud-init, MAAS, etc.) may own networking until you switch it to Netplan-only or adjust its template. The key is knowing Netplan reads all YAML from /{lib,etc,run}/netplan
and merges them lexicographically—later files amend/override earlier ones.
# Interface names only
ip -o link show | awk -F': ' '{print $2}'
# IPv4 per NIC (comma-separated)
for i in $(ls /sys/class/net | grep -v lo); do
printf "%-12s %s\n" "$i" "$(ip -4 -o addr show dev $i | awk '{print $4}' | paste -sd, -)"
done
# JSON (good for scripts)
ip -j addr show | jq .
-br
/--brief
for compact tables, -j
/--json
for machine-readable, and object names can be abbreviated (ip addr
→ ip a
).