Как настроить маршрутизацию в Linux

14.03.2021, 18:59

Маршруты, которые необходимы для поставки пакетов до конечного назначения, настраиваются в интерфейсе или маршрутизаторе. Если перед компьютером стоит задача отправить пакет в сеть, он смотрит таблицу маршрутизации, в которой перечислены IP-адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан, то в первую очередь задействуется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP-адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше. Дальше на примере рассмотрим, как настроить определенные маршруты и создать новые.

Смотрим таблицу маршрутизации

Прежде чем начать что-либо менять, необходимо понять, какие правила уже используются. Для этого в операционной системе Линукс предусмотрено несколько команд. Для этого используем специальную команду route:

$ route

Маршрутизация в Linux

Именно так выглядит таблица маршрутизации linux. В ней предусмотрена простая информация, которой не всегда достаточно чтобы понять суть дела. Для получения более детальной информации необходимо пользоваться командой routel:

$ routel

Маршрутизация в LinuxЗдесь вы сможете увидеть IP адрес (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но есть более удобый способ посмотреть таблицу маршрутизации linux при помощи команды IP:

$ ip route

Маршрутизация в Linux

Мы видим результат, который похож с выводом предыдущей команды. Поскольку результата предоставлен в не самым удобном виде, можно использовать в качестве аргумента для ip route add или ip route del. Поверьте, это очень удобно. Так вы увидите в качестве шлюза по умолчанию везде используется 192.168.1.1. Дальше поговорим, что означает вывод этой команды:

  • default - вариант по умолчанию. Здесь должен быть ip адрес цели или маска подсети;
  • via 192.168.1.1 - указывает через какой шлюз мы можем добраться до этой цели, у нас это 192.168.1.1;
  • dev enp2s0 - сетевой интерфейс, с помощью которого будет доступен этот шлюз;
  • proto static - означает, что маршрут был установлен администратором, значение kernel значит что он был установлен ядром;
  • metric - это приоритет маршрута, чем меньше значение - тем выше приоритет.

Дальше рассмотрим, как происходит настройка маршрутов Linux.

Настраиваем маршруты

У пользователя остается возможность настраивать таблицу маршрутизации с помощью команды ip. Например, чтобы изменить маршрут по умолчанию достаточно выполнить:

$ ip route add default via 192.168.1.1

Так вы можете добавить маршрут для любого IP адреса, например, для 243.143.5.25:

$ sudo ip route add 243.143.5.25 via 192.168.1.1

Итак, мы указываем IP адрес цели, а затем шлюз в локальной сети, через который можно достичь этого адреса. Проблема лишь в том, что такие марщруты активны до первой перезагрузки компьютера. После перезагрузки они автоматически удаляются. Чтобы исправить этот недостаток, маршруты нужно добавить в файл конфигурации.

Например, в системах семейства Red Hat есть конфигурационные файлы /etc/sysconfig/network-scripts/route-ethX. Каждый файл может описывать несколько маршрутов, например:

GATEWAY=10.10.0.1
NETMASK=255.0.0.0
IPADDR=10.10.0.22

В этом файле конфигурации используется gateway, это щлюз для интерфейса, netmask - маска сети, а ipaddr - ip адрес интерфейса. В Debian и основанных на нем дистрибутивах можно настроить маршруты в файле /etc/network/interfaces. Здесь команда route добавляется в секцию iface. Например:

up route add -net 10.10.0.0 netmask 255.0.0.0 gw 10.10.0.1

Маршрутизация в Linux

При помощи опии -net мы указываем целевую сеть, netmask - это маска сети, а gw - шлюз. Ничего сложного в этом нет. Теперь добавленные маршруты останутся даже после перезагрузки. 

Так мы рассмотрели как работает маршрутизация в Linux, как выполняется настройка маршрутизации в linux, а также зачем это нужно.