Введение в сетевую маршрутизацию Linux

Linux Logo network

Каждый компьютер, подключенный к сети, требует определенного типа инструкций по маршрутизации для сетевых TCP/IP-пакетов, когда они покидают локальный хост. Обычно это очень просто, потому что большинство сетевых сред очень просты и существует только два варианта отправки пакетов. Все пакеты отправляются либо на устройство в локальной сети, либо в какую-то другую, удаленную сеть.

Давайте определим, что «локальная» сеть - это логическая и, как правило, физическая сеть, в которой находится локальный хост. Логически это означает локальную подсеть, в которой хосту назначен один из диапазона IP-адресов локальной подсети. Физически это означает, что хост подключен к одному или нескольким коммутаторам, которые также подключены к остальной части локальной сети.

Модель сети TCP/IP

Прежде чем мы перейдем к маршрутизации, необходимо немного разобраться в том, как пакеты попадают на нужный узел сети. Сетевая модель TCP/IP представляет собой пятиуровневый стек, который описывает механизмы, необходимые для передачи пакетов данных от одного узла к другому, независимо от того, находится ли этот узел в локальной сети или на другом конце света. Каждый из уровней в приведенном ниже описании этой модели пронумерован, а также содержит названия единиц данных, которые обрабатываются этим уровнем.

5. Прикладной уровень: Сообщение Этот уровень состоит из протоколов соединения, необходимых для взаимодействия различных сетевых приложений, таких как HTTP, DHCP, SSH, FTP, SMTP, IMAP и другие. Когда вы запрашиваете веб-страницу с удаленного веб-сайта, на этом уровне отправляется запрос на соединение с веб-сервером, ответ отправляется обратно на ваш хост, а затем ваш браузер отображает веб-страницу в своем окне.

4. Транспортный уровень: Сегмент TCP. Транспортный уровень предоставляет услуги сквозной передачи данных и управления потоками, которые не зависят от передаваемых данных и типов протоколов. Он использует такие порты, как 80 для HTTP и 25 для SMTP, для установления соединений между отправляющим и удаленным узлами.

3. Уровень Интернета: Пакетный. Маршрутизация пакетов осуществляется на уровне Интернета. Этот уровень отвечает за маршрутизацию пакетов через две или более различных сетей для достижения конечного пункта назначения. Этот уровень использует IP-адреса и таблицу маршрутизации, чтобы определить, на какое устройство отправить пакет. Если пакет отправляется на маршрутизатор, то каждый маршрутизатор отвечает за отправку пакетов данных только на следующий маршрутизатор в серии, а не за прокладку всего маршрута от локального узла до целевого узла. Уровень Интернета - это в основном общение маршрутизаторов с маршрутизаторами для определения следующего маршрутизатора в цепочке.

2. Уровень канала передачи данных: Кадр. Канальный уровень управляет прямыми соединениями между аппаратными узлами в одной локальной, логической, физической сети. Этот уровень использует адреса Media Access Control (MAC), встроенные в карты сетевого интерфейса (NIC), для идентификации физических устройств, подключенных к локальной сети. Этот уровень не может получить доступ к узлам, которые не находятся в локальной сети.

1. Физический уровень: Биты. Это аппаратный уровень, состоящий из сетевых карт и физического кабеля Ethernet, а также протоколов аппаратного уровня, используемых для передачи отдельных битов, составляющих кадры данных, между любыми двумя хостами или другими узлами сети, подключенными локально.

Простой пример

Как же это выглядит, когда хост на самом деле отправляет данные по сети, используя сетевую модель TCP/IP? Вот мое собственное выдуманное описание того, как данные перемещаются из одной сети в другую. В этом примере мой компьютер отправляет запрос на удаленный сервер для получения веб-страницы.

  1. На прикладном уровне браузер инициирует сообщение запроса HTTP-соединения с удаленным узлом www.example.com, чтобы отправить обратно данные, составляющие содержимое веб-страницы. Это сообщение включает в себя только IP-адрес удаленного веб-сервера.
  2. Транспортный уровень инкапсулирует сообщение с запросом веб-страницы в дейтаграмму TCP с IP-адресом удаленного веб-сервера в качестве адресата. Вместе с исходным пакетом запроса этот пакет теперь включает порт источника, с которого будет отправлен запрос, обычно это случайный порт с очень высоким номером, чтобы возвращаемые данные знали, какой порт прослушивает браузер; и порт назначения на удаленном хосте, в данном случае порт 80.
  3. Интернет-уровень инкапсулирует TCP-дейтаграмму в пакет, который также содержит IP-адреса источника и назначения.
  4. Канальный уровень использует протокол разрешения адресов (ARP) для определения физического MAC-адреса маршрутизатора по умолчанию и инкапсулирует интернет-пакет в кадр, содержащий MAC-адреса источника и назначения.
  5. Кадр отправляется по проводу, обычно CAT5 или CAT6, от сетевой карты локального узла к сетевой карте маршрутизатора по умолчанию.
  6. Маршрутизатор по умолчанию открывает дейтаграмму и определяет IP-адрес назначения. Маршрутизатор использует свою собственную таблицу маршрутизации для определения IP-адреса следующего маршрутизатора, который отправит кадр на следующий этап своего путешествия. Затем маршрутизатор повторно инкапсулирует кадр в новую дейтаграмму, содержащую его собственный MAC-адрес в качестве источника и MAC-адрес следующего маршрутизатора, а затем отправляет ее через соответствующий интерфейс. Маршрутизатор выполняет свою задачу маршрутизации на уровне 3, уровне Интернета.

Обратите внимание, что коммутаторы невидимы для всех протоколов второго уровня и выше, поэтому они не влияют на передачу данных никаким логическим образом. Функция коммутаторов заключается лишь в том, чтобы обеспечить простое средство для соединения нескольких хостов в единую физическую сеть с помощью длинных кабелей Ethernet.

Вы можете использовать команду arp [-n], чтобы просмотреть все MAC-адреса, которые ваш хост хранит в своей таблице arp. Это всегда хосты в локальной сети.

Таблица маршрутизации

Все сетевые устройства, будь то хосты, маршрутизаторы или другие типы сетевых узлов, такие как подключенные к сети принтеры, должны принимать решения о том, куда направлять пакеты данных TCP/IP. Таблица маршрутизации предоставляет конфигурационную информацию, необходимую для принятия этих решений. Таблица маршрутизации, подобная очень простой таблице на рисунке 1, используется для определения единственного маршрута, доступного для типичного локального хоста, и для определения того, следует ли отправлять пакеты на маршрутизатор со шлюзом по умолчанию. Команда route -n выводит список таблицы маршрутизации; опция -n отображает результаты только в виде IP-адресов и не пытается выполнить поиск DNS, который заменит IP-адреса именами хостов, если они доступны. Команда netstat -rn выдает очень похожие результаты.

При использовании опции -n шлюз по умолчанию всегда отображается с пунктом назначения 0.0.0.0. Если параметр -n не используется, в столбце «Назначение» появляется слово «По умолчанию». IP-адрес в столбце Gateway - это IP-адрес маршрутизатора исходящего шлюза. Маска 0.0.0.0 для шлюза по умолчанию означает, что все пакеты, не адресованные локальной сети или другому исходящему маршрутизатору с помощью дополнительных записей в таблице маршрутизации, будут отправлены на шлюз по умолчанию, независимо от класса сети.

Колонка Iface (интерфейс) - это имя исходящей сетевой карты, в данном случае eno1. Для хостов, выступающих в роли маршрутизаторов, скорее всего, будет использоваться как минимум две, а иногда и больше сетевых карт. Каждая сетевая карта, используемая в качестве маршрута, будет подключена к разным физическим и логическим сетям. Флаги в столбце «Флаг» указывают на то, что маршрут является Up (U) и что он является шлюзом по умолчанию (G). Могут присутствовать и другие флаги.

Решения о маршрутизации довольно просты для большинства узлов:

  • Если хост назначения находится в локальной сети, отправьте данные непосредственно на него.
  • Если конечный узел находится в удаленной сети, доступной через локальный шлюз, указанный в таблице маршрутизации, отправьте данные на явно указанный шлюз.
  • Если хост назначения находится в удаленной сети и нет другой записи, определяющей маршрут к этому хосту, отправьте данные на шлюз по умолчанию.

Эти правила просто означают, что если все остальное не работает из-за отсутствия соответствия, отправьте пакет на основной шлюз.

Таблица маршрутизации ниже немного сложнее, поскольку она принадлежит хосту Linux, выступающему в роли маршрутизатора, который подключается к трем сетям, одна из которых ведет в Интернет. Локальные сети класса C, 192.168.0.0/24 на интерфейсе eth1 и 192.168.25.0/24 на eth2, имеют записи в таблице, как и маршрут по умолчанию, ведущий в остальной мир на eth0.

Обратите внимание, что по-прежнему существует только один шлюз по умолчанию, и он находится на интерфейсе eth0. Однако в дополнение к записи маршрута по умолчанию, которая указывает непосредственно на IP-адрес маршрутизатора со стороны LAN, есть также запись для сети 192.168.1.24/30 в целом. Эта сеть содержит только два полезных IP-адреса: один, 192.168.1.25/30, для LAN-стороны маршрутизатора и один, 192.168.1.26/30, для самого хоста.

Конфигурация маршрутизации

Как же настраивается таблица маршрутизации? Для хостов, подключенных к сети с помощью DHCP, DHCP-сервер предоставляет информацию о конфигурации маршрута по умолчанию вместе с DNS, IP-адресом хоста и, возможно, другой информацией, например IP-адресом сервера NTP. Для статических конфигураций это обычно просто, но иногда может быть немного сложнее.

В большинстве случаев добавление маршрута по умолчанию в файл /etc/sysconfig/network приводит к тому, что сеть настраивает маршрут по умолчанию в таблице маршрутизации. Эта запись выглядит так:

С помощью файла network можно настроить только шлюз по умолчанию.

Другой способ настройки шлюза по умолчанию в статически настроенной среде - добавить его в соответствующий файл конфигурации интерфейса в каталоге /etc/sysconfig/network-scripts. Чтобы добавить шлюз в файл конфигурации интерфейса eth0, нужно добавить в файл ifcfg-eth0 такую же строку, как на рисунке 3 выше. Если вы это сделаете, вам следует удалить эту запись из сетевого файла.

В более сложной среде, например, когда хост-компьютер подключен к нескольким сетям с помощью нескольких сетевых карт, и когда в таблицу маршрутизации необходимо внести как минимум два, а возможно, и больше маршрутов, следует рассмотреть возможность использования файла маршрутов в /etc/sysconfig/network-scripts. Для сетевой карты enp7s1 этот файл будет route-enp7s1, и он будет содержать запись:

Настройки шлюза по умолчанию в файлах route-interface отменяют те, которые могут быть указаны в файле network.

Конечно, вы всегда можете добавить маршруты из командной строки с помощью команды route. Это может занять некоторое время, если вам нужно делать это каждый раз при загрузке системы, поэтому лучше воспользоваться вышеописанными методами или создать сценарий, запускаемый при загрузке. У меня есть сценарий для одной из моих систем, который содержит следующие две строки, как показано ниже.

Обратите внимание, что имя устройства необязательно во всех этих командах и не используется.

Заключение

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

Avatar for Gnostis
Gnostis
Добавить комментарий