Skip to Content

Setup Ubuntu Static IP

Learn how to configure a static IP address on Ubuntu for consistent network connectivity.

karchunt

Kar Chun Tan

Creator

Metadata

Sat Dec 27 2025

4 min read

707 words

Setup Ubuntu Static IP

To configure a static IP address on Ubuntu, you will need to edit the network (netplan) configuration files.

Step 1: Find your network interface

ip addr

Look for the interface that is currently connected to the network. For my cased, it is wlo1.

kc@kchomelab:~$ ip addr 3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether a0:29:42:00:3c:78 brd ff:ff:ff:ff:ff:ff altname wlp0s20f3 inet 192.168.0.20/24 brd 192.168.0.255 scope global dynamic noprefixroute wlo1 valid_lft 86009sec preferred_lft 86009sec inet6 2001:e68:545b:1e09:331:a36c:d781:b2ad/64 scope global temporary dynamic valid_lft 209331sec preferred_lft 85891sec inet6 2001:e68:545b:1e09:20ce:6713:d2e1:733a/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 209331sec preferred_lft 122931sec inet6 fe80::c7b2:63f6:791c:7ef9/64 scope link noprefixroute valid_lft forever preferred_lft forever

Step 2: Create or Edit the netplan configuration file

Let’s first list the files in the /etc/netplan/ directory. You should see a lists of YAML files. You can either create a new file or edit an existing one.

kc@kchomelab:~$ ls /etc/netplan 01-network-manager-all.yaml 90-NM-904e969d-0545-4cb6-98f5-3b150b90657e.yaml 50-cloud-init.yaml

For my case, I will create a new file called 99-static-ip.yaml, there’s because by using a higher prefix like 99-, it ensures that this configuration will take priority over the earlier files like 01- or 50-.

To get the gateway address (route), you can use the following command:

kc@kchomelab:~$ ip route | grep default default via 192.168.0.1 dev wlo1 proto dhcp src 192.168.0.20 metric 600
/etc/netplan/99-static-ip.yaml
network: version: 2 renderer: NetworkManager # ethernets: # for wired connection, use 'ethernets' wifis: # for wireless connection, use 'wifis' wlo1: # use the actual interface name dhcp4: no # this overrides the 'yes' in the 50-cloud-init file dhcp6: no # this overrides the 'yes' in the 50-cloud-init file addresses: # static IP - 192.168.0.20/24 routes: - to: default via: 192.168.0.1 nameservers: addresses: [8.8.8.8, 8.8.4.4, 1.1.1.1] access-points: # for wireless connection only "kc_5G": password: <wireless-password>
  • nameservers must be set as computer only speak in IP address format, but we use domain names to access websites, so in order to translate domain names to IP addresses, we need to use nameservers.
    • 8.8.8.8 = Google Public DNS
    • 8.8.4.4 = Google Secondary Public DNS
    • 1.1.1.1 = Cloudflare Public DNS

Step 3: Apply the netplan configuration

Try the configuration first to se if there are any errors:

kc@kchomelab:~$ sudo netplan try ** (process:13133): WARNING **: 14:01:57.841: Permissions for /etc/netplan/01-network-manager-all.yaml are too open. Netplan configuration should NOT be accessible by others. ** (process:13133): WARNING **: 14:01:57.842: Permissions for /etc/netplan/99-static-ip.yaml are too open. Netplan configuration should NOT be accessible by others.

Fix the “Permissions are too open” warning by changing the file permissions.

sudo chmod 600 /etc/netplan/01-network-manager-all.yaml sudo chmod 600 /etc/netplan/99-static-ip.yaml

If everything looks good, apply the configuration:

kc@kchomelab:~$ sudo netplan try Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 106 seconds Configuration accepted. kc@kchomelab:~$ sudo netplan apply

Step 4: Check Static IP setup successfully?

You can check whether the static IP is setup successfully by using two commands:

  • ip addr
  • ip route

For ip addr command, you will notice the dynamic keyword is gone.

kc@kchomelab:/etc/netplan$ ip addr show wlo1 3: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether a0:29:42:00:3c:78 brd ff:ff:ff:ff:ff:ff altname wlp0s20f3 inet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute wlo1 valid_lft forever preferred_lft forever inet6 2001:e68:545b:1e09:435:c1ff:b38f:d374/64 scope global temporary dynamic valid_lft 206237sec preferred_lft 86014sec inet6 2001:e68:545b:1e09:a229:42ff:fe00:3c78/64 scope global dynamic mngtmpaddr valid_lft 206237sec preferred_lft 119837sec inet6 fe80::a229:42ff:fe00:3c78/64 scope link valid_lft forever preferred_lft forever

For ip route command, you will notice proto static.

kc@kchomelab:/etc/netplan$ ip route | grep default default via 192.168.0.1 dev wlo1 proto static metric 600

One final test to ensure the internet routing and DNS are working correctly:

kc@kchomelab:~$ ping -c 3 google.com PING google.com (2404:6800:4001:804::200e) 56 data bytes 64 bytes from pnkula-ah-in-x0e.1e100.net (2404:6800:4001:804::200e): icmp_seq=1 ttl=120 time=10.9 ms 64 bytes from pnkula-ah-in-x0e.1e100.net (2404:6800:4001:804::200e): icmp_seq=2 ttl=120 time=13.4 ms 64 bytes from pnkula-ah-in-x0e.1e100.net (2404:6800:4001:804::200e): icmp_seq=3 ttl=120 time=12.2 ms --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 10.868/12.135/13.378/1.024 ms
Last updated on