- Настройка сетевых маршрутов в Linux (CentOS)
- Просмотр таблицы маршрутизации в Linux
- Как добавить или удалить статический маршрут?
- Изменить маршрут в Linux
- Изменить маршрут по умолчанию
- How To Delete Route In Ubuntu Linux?
- List Existing Routes
- Remove Specific Route
- Check
- How To Delete Route In Ubuntu Linux? Infografic
- How to Flush Routing Table from Cache in Linux
- Flush routing table using ip command
- Flush specific route
- Flush all routes
- Empty a routing cache
- Displaying statistics from the routing cache
- Conclusion
Настройка сетевых маршрутов в Linux (CentOS)
13.04.2020
VyacheslavK
CentOS, Linux
Один комментарий
В этой статье мы рассмотрим особенности настройки маршрутизации и управления маршрутами в Linux (просмотр таблицы маршрутизации, добавление/удаление статических маршрутов и т.д.) на примере CentOS с помощью утилиты ip. Статья применима и для любого другого дистрибутива Linux с утилитой ip (Red Hat, Fedora и т.д.).
Для управления маршрутизацией в Linux предпочтительно исопльзовать утилиту ip , а не route . Команда route не позволяет настраивать расширенные возможности маршрутизации (например, политики маршрутизации), и не покажет специальные настройки маршрутизации, если они уже сделаны через ip.
Просмотр таблицы маршрутизации в Linux
Чтобы вывести текущую таблицу маршрутизации в Linux выполните команду:
- default via 192.168.1.1 dev enp0s3 – шлюз по умолчанию, в данном примере работающий через интерфейс enp0s3. Если для target адреса в таблице маршрутизации отсутствует маршрут, то такой пакет отправляется через данный шлюз (маршрут по умолчанию)
- 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.201 — статический маршрут для сети 192.168.1.0/24 через адрес 192.168.1.201, который прописан на интерфейсе
- proto kernel – маршрут создан ядром ( proto static – маршрут добавлен администратором)
- metric – приоритет маршрута (чем меньше значение metric, тем выше приоритет). При наличии двух маршрутов с одинаковой метрикой (не стоит так делать!), ядро начинает выбирать маршруты случайным образом.
Чтобы узнать через какой интерфейс (шлюз) должен маршрутизироваться трафик к определенному IP адресу используется команда:
192.168.2.45 via 192.168.1.1 dev enp0s3 src 192.168.1.201
Вы можете использовать ваш Linux сервер с двумя и более интерфейсами как маршрутизатор или интернет-шлюз. Чтобы разрешить маршрутизацию пакетов между несколькими интерфейсами, нужно включить параметр ядра net.ipv4.ip_forward = 1.
Как добавить или удалить статический маршрут?
Чтобы добавить новый маршрут к определенной IP подсети в таблицу маршрутизации Linux, нужно выполнить следующую команду:
# ip route add 192.168.0.0/24 via 192.168.1.1
Таким образом, мы добавим маршрут для IP сети 192.168.0.0/24 через шлюз 192.168.1.1.
Формат команды ip route очень похоже на синтаксис в Cisco IOS. Здесь также можно исопльзовать сокращений, например вместо ip route add можно написать ip pro ad .
Также можно добавить отдельный маршрут для одного IP адреса (хоста):
# ip route add 192.168.1.0 via 192.168.1.1
Можно сделать аналог null route маршрута в Cisco (ip route null0), пакеты в такую сеть удаляются по причине No route to host:
# ip route add blackhole 10.1.20.0/24
Маршруты, добавленные таким образом являются временным и будут работать до перезагрузки сетевой службы или сервера.
Чтобы удалить созданный вручную маршрут, выполните:
Как видите, маршрут удален из таблицы маршрутизации.
Чтобы добавить постоянный маршрут, нужно создать файл для этого маршрута, либо добавить правило в файл rc.local (выполняется при загрузке сервера).
Чтобы добавить постоянный (статический) маршрут, нужно знать имя сетевого интерфейса, который будет использоваться для маршрутизации. Узнать имя сетевого интерфейса можно командой:
В моем случае, интерфейс enp0s3.
Далее открываем следующий файл:
И добавляем туда строку с маршрутом:
После добавления маршрута в файл нужно перезапустить сервис network:
После перещаауска сетевого сервиса, в таблице маршрутизации появился статический маршрут.
Также можно добавить команду добавления нового маршрута в файл rc.local, чтобы он автоматически добавлялся при загрузке сервера. Откройте файл:
И укажите команду добавления маршрута:
# ip route add 192.168.0.0/24 via 192.168.1.1
Теперь, если ваш сервер будет перезагружен, маршрут пропишется автоматически при загрузке системы.
Изменить маршрут в Linux
Чтобы изменить уже существующий маршрут, можно использовать команду ip route replace:
# ip route replace 192.168.0.0/24 via 192.168.1.1
Чтобы сбросить все временные маршруты в таблице маршрутизации, просто перезапустите сетевой сервис:
Restarting network (via systemctl): [ OK ]
default via 192.168.1.1 dev enp0s3 proto static metric 100 192.168.0.0/24 via 192.168.1.1 dev enp0s3 proto static metric 100 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.201 metric 100
Изменить маршрут по умолчанию
Вы можете удалить маршрут по-умолчаню с помощью команды ip route del:
# ip route del default via 192.168.1.1 dev enp0s3
Чтобы указать новый маршрут по-умолчанию в CentOS используется команда:
# ip route add default via 192.168.1.2 (маршрут через IP адрес шлюза)
# ip route add default via enp0s3 (маршрут через имя устройства)
Чтобы изменить параметры маршрута по умолчанию, используется команда:
# ip route replace default via 192.168.1.2
Предыдущая статья Следующая статья
How To Delete Route In Ubuntu Linux?
I have some route in my routing table. But I want to delete one route from routing table. How can accomplish this?
List Existing Routes
To get detailed information about route that will be removed we list the existing routes in our system.
$ sudo ip route show default via 192.168.122.1 dev ens3 10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 172.16.0.0/24 via 192.168.122.1 dev ens3 192.168.122.0/24 dev ens3 proto kernel scope link src 192.168.122.211
Remove Specific Route
This command can be run all modern Linux distributions like Kali, Debian, Ubuntu, Fedora, CentOS. We remove the route by giving specific details about route like below. We will use ip route del command and provide related parameters.
$ sudo ip route del 172.16.0.0/24 via 192.168.122.1 dev ens3
- ip route del is the command issues for removal
- 172.16.0.0/24 via 192.168.122.1 dev ens3 is our route to be removed. We give the full detail route so there will no space for error.
Check
We want to check the last status of our routing table. We issue the same command we issued when starting.
$ sudo ip route show default via 192.168.122.1 dev ens3 10.0.3.0/24 dev lxcbr0 proto kernel scope link src 10.0.3.1 192.168.122.0/24 dev ens3 proto kernel scope link src 192.168.122.211
As we can see from the output the route to the 172.16.0.0/24 is deleted from routing table.
How To Delete Route In Ubuntu Linux? Infografic
How to Flush Routing Table from Cache in Linux
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:
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- # 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.
If this resource helped you, let us know your care by a Thanks Tweet. Tweet a thanks