During the installation of Ubuntu, it will try and automatically obtain an IP address using DHCP. While that may be fine for most users, if you are wanting to set up a server, the chances are you will want it to always have the same IP address.
There are two options for ensuring you get/use the same IP address at every boot up. You could set up a IP address reservation on the DHCP server based on the hardware/MAC address of the network interface, or alternatively, set the operating system to use a static IP address.
If for whatever reason you don’t want to go down the path of setting a DHCP reservation (you may not have access to the DHCP server; unsure how to set it up; etc), the only option is to set a static IP address on the machine itself.
The following steps will guide you through setting up your Ubuntu installation to use a static IP address on Ubuntu 18.04 and higher using the netplan configuration tools.
Note: With Ubuntu versions prior to 18.04, you had to manually edit the /etc/network/interfaces file to set up static IP addressing. (See “Setting a static IP address in Ubuntu” for Ubuntu versions prior to 18.04).
Setting static IP using netplan config
With the introduction of Ubuntu 18.04, along came the netplan YAML based network configuration tool.
The netplan configuration files are located in the /etc/netplan folder.
Find the netplan config file
Run the following command to list the netplan configuration files.
$ ls /etc/netplan
You should see something like the following:
$ ls /etc/netplan 01-netcfg.yaml $
$ ls /etc/netplan 50-cloud-init.yaml $
In this guide we will be using the “01-netcfg.yaml” file, as that is the default for a bare metal installation of Ubuntu 18.04.
Edit the netplan configuration file
Open up your netplan config file in a text editor.
$ sudo nano /etc/netplan/01-netcfg.yaml
You will be presented with a default configuration similar to this:
(network interface names will differ machine to machine)
# This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: eno1: dhcp4: yes
The first thing you will want to do, is disable the dhcp4 option. Set this to false.
Then you can add the following static IP options.
The IP address and netmask
Add the following line below the “dhcp4” line mentioned above. Modify the IP address and netmask to suit. Ensure you keep the indentation correct as per the final example yaml file further down.
In this example, the IP address we are assigning to the machine, is “192.168.0.20” with a subnet mask of 255.255.255.0.
The default gateway
Add the following line below the “addresses” line mentioned above. Modify the gateway IP address to suit. Ensure you keep the indentation correct as per the final example yaml file further down.
In this example, the default gateway will be pointing to “192.168.0.1”.
Add the following lines below the “gateway4” line mentioned above. Modify the DNS server ip addresses to suit. Ensure you keep the indentation correct as per the final example yaml file further down.
nameservers: addresses: [18.104.22.168,22.214.171.124,126.96.36.199]
In this example, the DNS servers in use are seperated out by commas. They are currenly set to “188.8.131.52”, “184.108.40.206” and “220.127.116.11”.
Example netplan yaml config file
The file should now look something like this:
# This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: eno1: dhcp4: false addresses: [192.168.0.20/24] gateway4: 192.168.0.1 nameservers: addresses: [18.104.22.168,22.214.171.124,126.96.36.199]
Note: With YAML configuration files it is critical to get the spacing/indentation/layout correct.
Make sure the layout and indentaion matches the example above, otherwise you may get syntax errors when going to trying to reload the netplan config changes.
Save the configuration, and exit the editor.
Applying the configuration change
You can either apply the changes straight away, with the following command:
$ sudo netplan apply
or, if you want to test it first, and potentially roll back any changes, you can use the following command:
$ sudo netplan try
This option apply the changes, and provide a 120 timeout where by if you don’t accept the changes, they will revert back. This is useful to prevent you from locking yourself out of the system, if the network change didn’t work the way you were intending.
The message that will be displayed will look like this:
$ sudo netplan try Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 120 seconds
Simply press the ENTER key on the keyboard before the timeout expires, and the changes will have been applied.
Your PC should now retain its IP address across reboots, and wont be relying on a DHCP server being operational. Use the ‘ip address show’ command to confirm the IP address has been updated successfully.
$ ip address show
You should see an example output like this. This should now reflect your static IP address as configured with netplan.
mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno1: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff inet 192.168.0.20/24 brd 192.168.0.255 scope global eno1 valid_lft forever preferred_lft forever inet6 fe80::aabb:ccdd:aabb:ccdd/64 scope link valid_lft forever preferred_lft forever 3: wlp2s0: mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether aa:cc:ee:11:22:33 brd ff:ff:ff:ff:ff:ff