Sometimes, a device on your network needs a permanent IP address — like when you’re setting up a server, a VPN, or a storage system. In this guide, we’ll walk you through how to assign a static IP in Ubuntu 22.04 using Netplan.
Every time you connect a device to a network, it’s assigned an IP address — usually temporarily, by a DHCP server (like your router). That address might change after a reboot or a day or two. That’s fine for laptops, phones, and most user devices.
But for a server that needs to stay reachable at the same address — dynamic IP just doesn’t cut it. Imagine you’ve launched a website, linked your domain to it, and then suddenly the server’s IP changes. The site becomes unreachable. Same story for SSH access, file sharing, or internal APIs.
→ Static IP is set manually. It never changes unless you change it yourself. It’s reliable, but you need to be careful — don’t assign an address that’s already in use.
→ Dynamic IP is assigned automatically. Convenient, but less predictable.
→ Reserved IP is a middle ground: your router hands out the IP, but always assigns the same one to a specific MAC address. Useful if you control the router.
Netplan is Ubuntu’s tool for configuring network settings, introduced in version 18.04. It uses YAML files for configuration and lets you define static IPs directly.
Open a terminal and run:
ip a
Look for the active interface — it might be named enp0s3, eth0, or something similar.
Netplan config files are located in /etc/netplan/. Common file names include:
→ 00-installer-config.yaml
→ 01-network-manager-all.yaml
Open the file for editing:
sudo nano /etc/netplan/01-network-manager-all.yaml
Now paste in a configuration like this:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
What this means:
→ renderer: networkd — use this if you’re not on a graphical desktop. If you are, use NetworkManager instead.
→ addresses — sets the static IP and subnet mask.
→ routes — defines the default gateway.
→ nameservers — sets DNS servers (in this case, Google’s public DNS).
Important: Make sure the spacing in the YAML file is correct. Use spaces, not tabs — YAML is strict about formatting.
Run:
sudo netplan apply
If something goes wrong, try the debug mode:
sudo netplan apply --debug
Check that everything is working:
ip a show enp0s3
ping 8.8.8.8