Networking HowTos
Networking HowTos

Adding persistent static routes on Ubuntu 18.04 and higher using netplan

March 17, 2020 Linux, Ubuntu

When you need to access network devices located on a different network segment than the one you are on, you need to have a route set up so the networking stack knows how to get to the other network segment. This generally just points to your main gateway, but you may want to set up additional static routes, where you don’t want the traffic going through your main default gateway.

With Ubuntu versions prior to 18.04, you had to manually edit the /etc/network/interfaces file to set up persistent static routes.
(See “Adding persistent static routes on Ubuntu” for Ubuntu versions prior to 18.04)

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
$

or

$ 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

Add the following lines to the bottom of the config section for the network interface you want the route to be assigned to.

      routes:
      - to: 192.168.44.0/24
        via: 192.168.0.1

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: true
      routes:
      - to: 192.168.44.0/24
        via: 192.168.0.1

Note: With YAML configuration files it is critical to get the spacing/indentation/layout correct.

Make sure the “routes:” statement is aligned 2 spaces to the right of the parent interface name you are assigning the route to.

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.

Checking the routes have been added

You can confirm your routes have been added by issuing the following command:

$ ip route show 

You should see your newly added route appearing in the list of routes. It should appear something like this:

192.168.44.0/24 via 192.168.0.1 dev eno1 proto static

If you cant see your static route in the list of routes, you may have an issue with your configuration syntax, or the logic of your route isn’t correct. Netplan should provide any warnings for syntax errors. Check the syslog log file for further errors.

Check the syslog file for network related errors using the following command:

$ grep networkd /var/log/syslog

You Might Also Like