Маршруты, которые необходимы для поставки пакетов до конечного назначения, настраиваются в интерфейсе или маршрутизаторе. Если перед компьютером стоит задача отправить пакет в сеть, он смотрит таблицу маршрутизации, в которой перечислены IP-адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан, то в первую очередь задействуется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP-адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше. Дальше на примере рассмотрим, как настроить определенные маршруты и создать новые.
Прежде чем начать что-либо менять, необходимо понять, какие правила уже используются. Для этого в операционной системе Linux предусмотрено несколько команд. Для этого используем специальную команду route
:
$ route
Именно так выглядит таблица маршрутизации linux. В ней предусмотрена простая информация, которой не всегда достаточно чтобы понять суть дела. Для получения более детальной информации необходимо пользоваться командой routel
:
$ routel
Здесь вы сможете увидеть IP адрес (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но есть более удобный способ посмотреть таблицу маршрутизации linux при помощи команды IP:
$ ip route
Мы видим результат, который похож с выводом предыдущей команды. Поскольку результата предоставлен в не самым удобном виде, можно использовать в качестве аргумента для 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.1NETMASK
=255.0.0.0IPADDR
=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
При помощи опии -net
мы указываем целевую сеть, netmask
- это маска сети, а gw
- шлюз. Ничего сложного в этом нет. Теперь добавленные маршруты останутся даже после перезагрузки.
Так мы рассмотрели как работает маршрутизация в Linux, как выполняется настройка маршрутизации в Linux, а также зачем это нужно.