How to Flush Routing Table from Cache in Linux

Written by: Bobbin Zachariah   |   Last updated: June 25, 2022

A routing table in computer networking is a data table that's stored on a router or network server which lists the routes to particular network destinations. Usually, each static route has a metric associated with it. This metric is used by network devices to decide which route to be selected for packets destined to a particular network. When talking in the context of Linux or Unix Systems, they also maintain a routing table, mostly when the server has more than one active network interface.

At some point, you may want to flush a routing table or update it so that you can access some networks. The network(s) can be local in your organization, or where traversing the public internet is involved. Most Linux distributions provide two major tools used for this task, namely IP and route command.

In this guide, we learn how to flush routing table in Linux using terminal commands.

Flush routing table using ip command

IP is a Linux command line tool used to show and manipulate routing, network devices, interfaces, and tunnels. It is a replacement for ifconfig tool. IP command can do almost all kinds of Linux network configurations for an interface.

Before you flush any routes, you may first need to check your current routing table using the command:

$ ip route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600

As you can see from my output, my default route is set to 192.168.0.1. This means all packets destined for networks other than my local subnet 92.168.0.0/24 will be forwarded through 192.168.0.1. This IP 192.168.0.1 is for my router.

For demonstration purposes, I'm going to start docker service on my Laptop. Docker has its own subnet. we'll use this to demonstrate the usage of ip command.

$ sudo systemctl start docker
$ ip route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600

Flush specific route

I now have another route for '172.17.0.0/16' subnet via '172.17.0.1'. If I want to flush this route, I'll use:

$ sudo ip route flush 172.17.0.0/16
$ ip route 
default via 192.168.0.1 dev wlp1s0 proto dhcp metric 600 
192.168.0.0/24 dev wlp1s0 proto kernel scope link src 192.168.0.16 metric 600
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 600 0 0 wlp1s0
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0

You can confirm that the route has been removed from the routing table.

Flush all routes

To flush all routes on the routing tables, the ip command options route flush table main are used. The full commands to run are:

$ sudo ip route flush table main
$ ip route show

A recheck for the routing table should return empty. This command should be used with caution since it can kick you out of the server if you're not on direct connection or don't have other access methods like a console, modem e.t.c.

Empty a routing cache

The Linux kernel usually refers to the routing cache before fetching a new route from the routing tables. This cache can be cleared using the command.

$ sudo ip route flush cache

The confirm any available cached routes with:

$ sudo ip route show cache

Displaying statistics from the routing cache

If you would like to get more information about the cached routes use the following commands:

$ sudo ip -s route show cache

Additional information like "used" field is given, which indicates the number of times this route has been accessed in the routing cache.

For a persistent static route, you can place routes in any of the below files:

/etc/sysconfig/static-routes or /etc/sysconfig/network-scripts/route-<interface>  # RedHat and its derivatives - CentOS, Fedora e.t.c
/etc/network/interfaces # Debian and its derivatives

An example of persistent routes on RedHat or CentOS Stream is:

# cat /etc/sysconfig/network-scripts/route-eth0

GATEWAY0=192.168.1.254
NETMASK0=255.255.255.0
ADDRESS0=192.168.5.0

GATEWAY1=10.10.10.1
NETMASK1= 255.255.255.240
ADDRESS1=10.164.234.132

A line on Ubuntu/Debian will look like the below:

up route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254
down route del -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.1.254

Conclusion

In this tutorial, we learned how to flush the routing table from cache from the Linux terminal.

Thanks for reading, add your suggestions and feedback in the below comment section.

About The Author

Bobbin Zachariah

Bobbin Zachariah

Bobbin Zachariah is an experienced Linux engineer who has been supporting infrastructure for many companies. He specializes in Shell scripting, AWS Cloud, JavaScript, and Nodejs. He has qualified Master’s degree in computer science. He holds Red Hat Certified Engineer (RHCE) certification and RedHat Enable Sysadmin.

SHARE

Comments

Please add comments below to provide the author your ideas, appreciation and feedback.

Leave a Reply

Leave a Comment