Debian Permanent Static Routes
What is a Permanent or Persistent static route
In Linux, permanent static routes also called as Persistent routes are the static route entries that will not be deleted when the network restart or when the system restart.
Typically in a Linux System, route add and ip route add commands are used to add static routes to the routing table. But those static route entries get deleted from the routing table when either network or system restart.
example:
If you want to add a route to the network 192.168.1.0 through gateway 192.168.221.1 and print result, you can execute the following commands.
~] ip route add 192.168.1.0/24 via 192.168.221.1
And print result of previous command:
~] ip route show
default via 84.244.68.1 dev ens192 onlink
84.244.68.0/24 dev ens192 proto kernel scope link src 84.244.68.206
192.168.1.0/24 via 192.168.221.1 dev ens192
192.168.221.0/24 dev ens192 proto kernel scope link src 192.168.221.206
Restart networking service
~] systemctl restart networking
After print result we can see that static rule is deleted:
~] ip route show
default via 84.244.68.1 dev ens192 onlink
84.244.68.0/24 dev ens192 proto kernel scope link src 84.244.68.206
192.168.221.0/24 dev ens192 proto kernel scope link src 192.168.221.206
So how we can make static routes permanent? We have a several option how to do it.
1. Edit /etc/network/interfaces file
The first option is edit /etc/network/interfaces file.
Following is the sample Debian (Ubuntu) network interface configuration file with permanent static route entries.
# The primary network interface
auto ens192
allow-hotplug ens192
iface ens192 inet static
address 192.168.221.54/24
gateway 192.168.221.1
dns-nameservers 82.99.137.41 212.158.133.41
dns-search secar.cz
up ip route del 192.168.0.0/24 via 192.168.221.1 dev ens192
up ip route add 192.168.0.0/24 via 192.168.221.1 dev ens192
up ip route del 192.168.1.0/24 via 192.168.221.1 dev ens192
up ip route add 192.168.1.0/24 via 192.168.221.1 dev ens192
When next hop (192.168.221.1) is in network subnet with direct attached interface, the dev [interface] in ip route command is optional.
Restart network with /etc/init.d/networking restart or with systemd restart networking command and print the result:
~] ip route show
default via 192.168.221.1 dev ens192 onlink
192.168.221.0/24 dev ens192 proto kernel scope link src 192.168.221.54
192.168.0.0/24 via 192.168.221.1 dev ens192
192.168.1.0/24 via 192.168.221.1 dev ens192
2. Create own file in /etc/network/if-up.d directory
Another way to create a static network route is to create a script file in a directory /etc/network/if-up.d. For me, this is the preferred way to create static routes in debian.
Example:
Change working directory to /etc/network/if-up.d, create file my_route, change permissions to 751 with chmod 751 my_route
and insert this content:
#!/bin/sh
if [ "$IFACE" = "ens192" ]; then
ip route add 192.168.0.0/24 via 192.168.221.1
ip route add 192.168.1.0/24 via 192.168.221.1
fi
~] ip route show
default via 192.168.221.1 dev ens192 onlink
192.168.221.0/24 dev ens192 proto kernel scope link src 192.168.221.54
192.168.0.0/24 via 192.168.221.1 dev ens192
192.168.1.0/24 via 192.168.221.1 dev ens192