Skip to content

ip-forwarding

Маршрутизация IP и форвардинг

  • IP-forwarding — это процесс пересылки IP-пакетов от узла-отправителя к узлу–получателю в IP-сети с произвольной топологией на основе решения задачи о маршрутизации.
  • IP-routing – это процесс решающий задачу выбора наилучшего маршрута.
  • Node (сетевой узел) — любое устройство имеющее сетевой интерфейс с настроенным протоколом TCP/IP;
  • Host (хост) — узел, не обладающий возможностями маршрутизации пакетов;
  • Router (маршрутизатор) — узел, обладающий возможностями маршрутизации (перенаправление дейтаграмм из одной сети в другую), обычно такой узел имеет несколько сетевых-интерфейсов (со своими MAC- и IP-адресами), подключенными к разным IP-сетям.

Фундаментальная разница между хостом и маршрутизатором заключается в том, что хост никогда не перенаправляет дейтаграммы с одного своего интерфейса на другой, но, IP-уровень на узле может быть сконфигурирован таким образом, чтобы выполнять функции маршрутизации (ip-forwarding), в дополнение к тому, что он работает в качестве сетевого интерфейса, иначе дейтаграммы, не предназначенные хосту, будут молча удалены.

В целом процесс IP-пересылки одинаков в сетях любого размера и представляет собой серию отдельных операций прямой или косвенной маршрутизации пакетов.

Если целевая сеть непосредственно подключена к маршрутизатору, то для отправки пакетов используется прямая пересылка, иначе - косвенная пересылка через посредника.

Пути доступа к удаленной сети маршрутизатор узнаёт с помощью маршрутизации статической (информацию вручную вводит администратор) или динамической (местоположение сетей определяется из информации от соседних маршрутизаторов).

Процесс прямой IP-пересылки.

Когда один узел IP-сети отправляет пакет другому узлу, то в заголовке IP указываются IPадрес отправителя и IP-адрес получателя. Отправка пакета происходит следующим образом:

  1. Отправитель определяет, находится ли получатель в той же самой IP-сети, что и отправитель (локальной), или в другой IP-сети (удаленной). Для этого отправитель производит поразрядное умножение IP-отправителя и IP-получателя на маску подсети-отправителя. Если результаты совпадают, значит, оба узла находятся в одной подсети.
  2. Если узлы в одной IP-сети, то отправитель проверяет ARP-кэш на наличие MAC-адреса получателя. Если нужная запись имеется, то дальше отправка пакетов производится напрямую узлу-получателю на канальном уровне. Если нужной записи нет, то отправитель посылает ARP-запрос с IP-адресом получателя, ответ помещает в ARP- кэш и передача пакета также производится на канальном уровне (между сетевыми адаптерами компьютеров).
  3. Если отправитель и получатель расположены в разных IP-сетях, то отправитель посылает данный пакет сетевому узлу, который указан в таблице маршрутизации как наилучший или который в конфигурации отправителя указан как DefaultGateway. Основной шлюз всегда находится в той же IP-сети, что и узел-отправитель, поэтому взаимодействие происходит на канальном уровне (после выполнения ARP-запроса).

В целом процесс IP-пересылки представляет собой серию отдельных операций прямой или косвенной пересылки пакетов.

ip_forward

Маршрутизация транзитных IP-пакетов (не предназначенных для этого компьютера), или IP-форвардинг, является опциональной возможностью IP-стека Linux. По умолчанию функция форвардинга не активируется, и система не пересылает транзитные пакеты через свои интерфейсы, а только обрабатывает адресованные ей пакеты. Включение форвардинга IP-пакетов производится через параметр net.ipv4.ip_forward интерфейса sysctl. Если значение этого параметра равно 0, то форвардинг отключен, если же значение параметра не равно 0, форвардинг включен:

ip_forward
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

# пересылка трафика между интерфейсами включается командой:
echo 1 > /proc/sys/net/ipv4/ip_forward

# Или при помощи команды sysctl
sysctl net.ipv4.ip_forward=1

# Чтобы настройка сохранилась после перезагрузки, необходимо указать в /etc/sysctl.conf строку:
net.ipv4.ip_forward = 1

В процессе маршрутизации для выбора интерфейса и следующего узла для доставки пакета (next hop) ядро использует таблицу маршрутизации. Эта таблица представляет список критериев, в соответствии с которыми выбирается следующий узел. В частности, в таблице маршрутизации фигурируют следующие условия: адрес сети получателя пакета, маска подсети получателя пакета, IP-адрес следующего узла, метрика маршрута и служебные поля (например, тип и возраст записи). Таблица маршрутизации используется не только в IP-форвардинге, но и даже при простой отсылке IP-пакета для выбора интерфейса, через который будет производиться отсылка пакета.

Запись о сети с адресом 0.0.0.0 и маской подсети 0.0.0.0 называют маршрутом по умолчанию, или default route. Узел, чей адрес указан в поле gateway для маршрута по умолчанию, называют маршрутизатором по умолчанию, или default gateway или default router. В системе может быть произвольное количество маршрутов по умолчанию, но они должны быть как минимум с разными метриками. Для просмотра таблицы маршрутизации можно воспользоваться командой route. Эта команда позволяет оперировать с таблицей маршрутов, добавляя и удаляя из нее записи.