GRE (Generic Routing Encapsulation) CISCO

от автора

Здравствуйте, коллеги! Сегодня мы будем рассматривать протокол GRE (Generic Router Encapsulation) на устройствах Cisco, а также основы его работы.

На сегодняшний день этот протокол используется реже, так как существует более эффективные протоколы, такие как IPsec. Одной из причин этого является наличие дополнительного заголовка в GRE, который уменьшает полезные данные, а также может вызывать проблемы с размером пакетов, особенно при передаче через MTU. В отличие от GRE, IPsec использует более компактные и безопасные заголовки, что позволяет передавать больше полезных данных через интерфейсы.

Использование GRE не предоставляет нам значительных преимуществ с точки зрения безопасности и производительности, особенно когда речь идет об защищенных соединениях. Однако он находит свое применение в некоторых случаях, например, при туннелировании трафика между маршрутизаторами, где шифрование не является необходимым.

Пример работы протокола GRE и его взаимодействие с IPsec:

  • Оригинальный пакет:

    • Ethernet → IP → ICMP

  • Транспортный режим:

    • Ethernet → IP → ESP → ICMP → ESP Trailer → ESP Authentication (зашифровано)

  • Туннельный режим:

    • Ethernet → новый IP → ESP → IP → ICMP → ESP Trailer → ESP Authentication (зашифровано)

  • IPsec over GRE (транспортный режим):

    • Ethernet → новый IP → ESP → GRE → IP → ICMP → ESP Trailer → ESP Authentication (зашифровано)

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

Как видно на схеме, у нас есть два офиса: главный и филиал. Мы настроили туннель через IP-адрес 172.20.20.0, по которому оба офиса соединены между собой с использованием GRE (Generic Routing Encapsulation). Это позволяет эффективно организовать защищенную связь между офисами через публичную сеть.

Настройки на маршрутизаторе главного офиса

Команда

Описание

Router1 (config)# int e0/1

Переход на интерфейс Ethernet e0/1 маршрутизатора (интерфейс, подключенный к интернету). Это физический интерфейс, через который будет проходить интернет-трафик.

Router1 (config)# ip address 209.165.201.1 255.255.255.0

Установка IP-адреса для интерфейса e0/1. Адрес предоставляется провайдером и используется для внешней связи через интернет.

Router2 (config)# ip address 209.165.201.2 255.255.255.0

Установка IP-адреса для интерфейса маршрутизатора второго офиса. Адрес аналогичен для внешней связи, но принадлежит другому маршрутизатору.

Router1 (config)# int Tunnel0

Переход на конфигурацию виртуального интерфейса Tunnel0. Этот интерфейс используется для настройки GRE туннеля между двумя маршрутизаторами.

Router1 (config)# tunnel mode gre ip

Установка режима работы интерфейса как GRE (Generic Routing Encapsulation), что позволяет инкапсулировать IP-пакеты в туннель для безопасной передачи.

Router1 (config)# ip address 192.168.2.1 255.255.255.255

Установка IP-адреса для туннельного интерфейса. Этот адрес уникален для туннеля и не должен перекрываться с другими IP-адресами в сети.

Router1 (config)# tunnel source e0/1

Указание интерфейса e0/1 в качестве источника для туннельного трафика. Это интерфейс с внешним подключением, через который туннель будет инициироваться.

Router1 (config)# tunnel destination 209.165.201.2

Указание публичного IP-адреса второго маршрутизатора, с которым устанавливается GRE туннель. Это внешний (белый) адрес маршрутизатора филиала.


Настройки на маршрутизаторе филиала

Команда

Описание

Router2 (config)# int Tunnel0

Переход на интерфейс Tunnel0 для настройки туннеля на маршрутизаторе филиала.

Router2 (config)# tunnel mode gre ip

Установка режима туннеля как GRE (Generic Routing Encapsulation), для передачи данных через безопасный канал.

Router2 (config)# ip address 192.168.2.2 255.255.255.0

Установка уникального IP-адреса для туннельного интерфейса на маршрутизаторе филиала. Этот адрес также будет использоваться для маршрутизации трафика через туннель.

Router2 (config)# tunnel source e0/1

Указание интерфейса e0/1 как источника для туннельного трафика на маршрутизаторе филиала. Это интерфейс, через который маршрутизатор подключается к интернету.

Router2 (config)# tunnel destination 209.165.201.1

Указание публичного IP-адреса маршрутизатора главного офиса, с которым устанавливается GRE туннель.

Router1 (config)# ip route 192.168.4.1 255.255.255.0 192.168.2.2

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

Router2 (config)# show int Tunnel0

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

Router2 (config)# show ip route

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

Примечания:

  1. IP-адреса могут отличаться: В реальной сети IP-адреса, указанные для туннеля и интерфейсов, могут быть различными. Убедитесь, что настройки соответствуют вашей сети.

  2. Статические маршруты: Обязательно добавьте статический маршрут на каждом маршрутизаторе, чтобы пакеты правильно маршрутизировались через туннель.

  3. Проверка состояния: Используйте команды show int Tunnel0 и show ip route для диагностики и проверки работы туннеля. Это поможет удостовериться в правильности настройки и в том, что туннель активно передает трафик.

  1. PC 1 (192.168.2.1) отправляет запрос (например, пинг ICMP) на PC 2 (192.168.2.2). Это стандартный пакет, который имеет исходный адрес 192.168.2.1 и целевой адрес 192.168.2.2.

  2. На маршрутизаторе R1, который подключен к PC 1, этот исходный IP-пакет инкапсулируется в новый пакет с добавлением заголовка GRE. GRE (Generic Routing Encapsulation) — это протокол инкапсуляции, который позволяет передавать данные по туннелю. В результате, создается новый пакет, который будет включать:

    • Ethernet — канальный уровень.

    • Новый IP-адрес маршрутизатора R1 (например, 156.213.54.7) — внешний (публичный) IP-адрес маршрутизатора, через который трафик будет передаваться в интернет.

    • GRE — заголовок GRE, который инкапсулирует исходный пакет.

    • Оригинальный IP-пакет (с ICMP-запросом) — это исходный пакет от PC 1, который был инкапсулирован в GRE.

  3. Инкапсулированный пакет теперь отправляется через интернет (обозначен как облако на схеме). Он передается через публичную сеть, используя внешний IP-адрес маршрутизатора R1 (156.213.54.7).

  4. Пакет продолжает свой путь через интернет, не изменяя содержимого (все данные находятся в GRE-обертке), что позволяет безопасно передавать данные между сетями, даже через общедоступную сеть (интернет).

Таким образом, на этом этапе весь трафик между PC 1 и PC 2 передается через туннель, инкапсулированный в GRE, который позволяет передавать данные в рамках защищенной и виртуальной сети между двумя офисами через публичную сеть.

  1. Распаковка пакета на маршрутизаторе R2:

    • После того как инкапсулированный пакет, отправленный R1, достигает маршрутизатора R2, процесс инкапсуляции происходит в обратном порядке.

  2. Удаление GRE-заголовка:

    • На маршрутизаторе R2 происходит извлечение исходного пакета из GRE-обертки. В этом процессе удаляется GRE-заголовок, который был добавлен на R1. Теперь пакету возвращается его оригинальная форма, то есть IP-пакет с исходным адресом 192.168.2.1 и целевым адресом 192.168.2.2.

  3. Обработка пакета маршрутизатором R2:

    • После удаления GRE-заголовка, R2 видит оригинальный IP-пакет с ICMP запросом (например, пинг), который был отправлен PC 1.

    • Этот пакет теперь передается дальше на PC 2 (192.168.2.2).

  4. Отправка ICMP-пакета на PC 2:

    • PC 2 (192.168.2.2) получает ICMP-пакет, который теперь не содержит обертки GRE и готов к дальнейшей обработке.

Важные шаги в процессе:

  • GRE-заголовок удаляется только на маршрутизаторе R2, так как R2 извлекает оригинальный IP-пакет.

  • Пакет передается по туннелю без изменений через интернет (обозначенный облаком).

  • Когда пакет достигает R2, он извлекается из GRE-туннеля и отправляется непосредственно PC 2.

На схеме показан GRE туннель между маршрутизаторами R1 (IP 18.34.67.2) и R2 (IP 156.213.54.7), через который передаются данные между PC 1 и PC 2 через интернет. Туннель инкапсулирует трафик, создавая защищенное соединение между удаленными офисами.

На схеме показан GRE туннель между маршрутизаторами R1 (IP 18.34.67.2) и R2 (IP 156.213.54.7), через который передаются данные между PC 1 и PC 2 через интернет. Туннель инкапсулирует трафик, создавая защищенное соединение между удаленными офисами.
  1. Ethernet — канальный уровень, который определяет физическое соединение для передачи данных.

  2. Новый IP — это внешний IP-адрес, который используется для доставки пакета через интернет.

  3. GRE — заголовок инкапсуляции, который добавляется для передачи пакета через туннель. Он необходим для того, чтобы маршрутизаторы могли обрабатывать данные как туннельные пакеты.

  4. Заголовок доставки (Delivery header) — информация, которая используется для адресации и доставки пакета через сеть.

  5. IP — оригинальный заголовок пакета, который был инкапсулирован в GRE-пакет, и содержит информацию о передаче данных.

  6. ICMP — это полезная нагрузка (например, запрос на пинг), которая является исходными данными, инкапсулированными в пакет GRE.

47 — это номер протокола GRE в таблице IP-протоколов. Он указывает, что пакет инкапсулирован в GRE и что маршрутизаторы должны обрабатывать его как GRE-трафик, а не обычный IP-пакет. Этот номер помогает сетевым устройствам распознать и правильно обработать пакет, передаваемый через GRE туннель.

Команда

Описание

Когда использовать

Причина использования

Router(config)# int tunnel 0

Переход на виртуальный туннельный интерфейс Tunnel0. Это позволяет настроить GRE туннель и работать с ним.

Используется всегда при настройке GRE туннеля для его активации.

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

Router(config)# keepalive 10

Включение функции отслеживания состояния туннельного интерфейса. Если соседний маршрутизатор не отвечает на «keepalive» пакеты, то интерфейс автоматически переводится в состояние down.

Когда необходимо отслеживать состояние туннеля и автоматически его отключать, если связь теряется.

Эта команда полезна для обеспечения стабильности соединения и автоматического отключения туннеля при потере связи с соседним маршрутизатором. Это важная функция для поддержания надежности соединения.

Router(config)# ip tcp adjust-mss 1436

Настройка опции MSS (Maximum Segment Size) для TCP SYN-пакетов, которые проходят через маршрутизатор. Эта команда изменяет максимальный размер сегмента для TCP-пакетов, передаваемых через туннель.

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

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

Когда и почему использовать эти команды:

  1. int tunnel 0:

    • Когда: Нужно активировать и настроить виртуальный туннельный интерфейс GRE на маршрутизаторе.

    • Почему: Без этой команды маршрутизатор не будет знать, какой интерфейс использовать для туннелирования данных.

  2. keepalive 10:

    • Когда: Нужно отслеживать активность соседнего маршрутизатора и автоматически отключать туннель, если связь теряется.

    • Почему: Это помогает поддерживать работоспособность сети, автоматически отключая туннель, если соседний маршрутизатор перестает отвечать.

  3. ip tcp adjust-mss 1436:

    • Когда: Если возникают проблемы с фрагментацией пакетов через GRE туннель.

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

Существует две основные версии GRE:

  1. GRE Version 0:

    • Описание: Это стандартная версия GRE, используемая для инкапсуляции пакетов IP в GRE-туннеле. Она не поддерживает дополнительную функциональность, такую как аутентификация или шифрование, и используется для передачи любых IP-пакетов через туннель.

    • Использование: Подходит для простого туннелирования между двумя сетями.

  2. GRE Version 1:

    • Описание: Эта версия добавляет поддержку новых возможностей, таких как аутентификация и контроль целостности данных. Однако она используется реже и имеет более ограниченное применение по сравнению с версией 0.

    • Использование: Используется в случаях, когда требуется дополнительная безопасность и контроль целостности.

В большинстве случаев используется GRE Version 0, так как она проще и достаточно функциональна для большинства задач по туннелированию.

Структура GRE версии 0

Основная структура:

  1. Ethernet (Желтый блок):

    • Описание: Это канальный уровень, который используется для передачи данных по сети Ethernet. Он представляет собой физическую среду для передачи пакетов.

    • Роль: Этот блок отвечает за передачу пакетов через Ethernet-сеть. Здесь устанавливается исходный адрес и MAC-адрес устройства.

  2. Новый IP (Желто-оранжевый блок):

    • Описание: Это IP-заголовок, который используется для доставки пакета через интернет (или другие сети). Он используется для маршрутизации пакетов между устройствами в разных подсетях или по всему интернету.

    • Роль: Новый IP-адрес указывает адресацию для доставки пакета через внешний маршрутизатор (маршруты, указанные на маршрутизаторе).

  3. GRE (Серый блок):

    • Описание: Это заголовок инкапсуляции для протокола GRE (Generic Routing Encapsulation). GRE используется для инкапсуляции различных типов данных в IP-пакетах, позволяя передавать их через туннели.

    • Роль: Заголовок GRE используется для инкапсуляции пакетов и доставки их через туннель. В нем содержится важная информация, необходимая для правильной передачи данных, включая версию GRE, тип данных, контрольные суммы и другие поля.

  4. IP (Зеленый блок):

    • Описание: Это оригинальный IP-заголовок, который был инкапсулирован в GRE. Он содержит информацию о передаче данных, такие как адрес назначения и источник. Это тот же IP-пакет, который бы был передан без GRE, но теперь он находится внутри GRE-туннеля.

    • Роль: Заголовок IP помогает маршрутизировать пакет через сеть и указывает, какой конечный адрес должен получить данные.

  5. ICMP (Зеленый блок):

    • Описание: Это часть полезной нагрузки пакета. В данном случае, это ICMP-пакет, который может использоваться для диагностики, например, для пинга. Он находится внутри инкапсулированного IP-пакета.

    • Роль: Это данные, которые передаются через туннель. В нашем случае это запрос ICMP (например, пинг).


Структура заголовка GRE:

  1. C, R, K, S, s (Флаги, поля контроля):

    • Описание: Эти биты используются для управления туннелем и его поведением:

      • C (Check bit) — флаг, который указывает, что следует производить проверку ошибок в пакете.

      • R (Routing bit) — указывает на использование маршрутизации в туннеле.

      • K (Key bit) — если установлен, используется ключ безопасности для туннеля.

      • S (Sequence bit) — используется для управления последовательностью пакетов.

      • s (Reserved bit) — зарезервировано для будущих расширений.

  2. Recur (Рекурсия):

    • Описание: Этот бит отвечает за рекурсивную инкапсуляцию. Он указывает, нужно ли инкапсулировать пакеты в другие GRE пакеты, создавая многослойную инкапсуляцию.

    • Роль: Может использоваться для сложных сценариев маршрутизации или когда требуется повторная инкапсуляция пакетов.

  3. Flags (Флаги):

    • Описание: Это дополнительные флаги, которые могут указывать на различные особенности туннеля, такие как наличие дополнительной проверки или меток.

    • Роль: Управляют поведением и режимами туннеля, могут быть использованы для изменения функциональности.

  4. Version (Версия):

    • Описание: Указывает версию протокола GRE. В данном случае это версия 0.

    • Роль: Позволяет идентифицировать тип протокола для правильной обработки данных. Разные версии GRE могут иметь различные возможности или заголовки.

  5. Protocol (Протокол):

    • Описание: Это поле указывает, какой протокол инкапсулирован в GRE. Это поле указывает на тип данных, который передается (например, IP, CLNP, IPX, AppleTalk и т. д.).

    • Роль: Это важный элемент, который помогает маршрутизатору понять, как интерпретировать инкапсулированные данные.

  6. Checksum (Контрольная сумма):

    • Описание: Это поле используется для проверки целостности данных. Контрольная сумма позволяет обнаружить ошибки при передаче.

    • Роль: Обеспечивает корректность данных, гарантируя, что переданные пакеты не были повреждены.

  7. Key (Ключ):

    • Описание: Используется для добавления метки безопасности или уникальной идентификации туннеля.

    • Роль: Этот ключ помогает отличить различные туннели, улучшая безопасность и контроль трафика.

  8. Sequence Number (Номер последовательности):

    • Описание: Это поле используется для отслеживания порядковых номеров пакетов, передаваемых через туннель.

    • Роль: Упорядочивает пакеты, чтобы избежать проблем с их обработкой и доставкой.

  9. Routing (Маршрутизация):

    • Описание: Это поле может содержать информацию о маршруте, который должен быть использован для передачи пакета через туннель.

    • Роль: Помогает определить, как маршрутизировать пакеты через GRE-туннель.

  10. Data (Данные):

    • Описание: Это сам пакет или информация, передаваемая через туннель. В данном случае это ICMP-пакет, который был инкапсулирован.

    • Роль: Это полезная нагрузка, которая должна быть доставлена на конечное устройство.

Структура GRE версии 1, которая используется в сочетании с PPP (Point-to-Point Protocol), и включает дополнительные функции по сравнению с GRE версии 0.

Основная структура:

  1. Ethernet (Желтый блок):

    • Описание: Это канальный уровень, который используется для передачи данных через физическую среду Ethernet.

    • Роль: Это базовая передача данных на канальном уровне, которая будет передана через IP-сеть.

  2. Новый IP (Желто-оранжевый блок):

    • Описание: Это IP-заголовок, который используется для маршрутизации пакетов через сеть.

    • Роль: Этот блок необходим для правильной доставки пакета через интернет, указывая адрес назначения и источник.

  3. GRE (Серый блок):

    • Описание: Заголовок GRE используется для инкапсуляции и передачи пакетов через туннель. В версии 1 GRE включает дополнительные функции и параметры.

    • Роль: Это основа инкапсуляции, которая помогает передавать данные через виртуальные туннели.

  4. PPP (Красный блок):

    • Описание: Это заголовок PPP (Point-to-Point Protocol), который используется для создания прямого соединения между двумя точками. В данном случае PPP добавляется поверх GRE для улучшенной аутентификации и контроля данных.

    • Роль: PPP позволяет устанавливать и поддерживать соединение с аутентификацией и возможностью сжатия данных.

  5. PPP Payload (Payload):

    • Описание: Это полезная нагрузка, которая содержит фактические данные, которые передаются по туннелю. В данном случае это инкапсулированный пакет PPP.

    • Роль: Это данные, которые должны быть доставлены от источника к получателю.


Структура заголовка GRE версии 1:

  1. C, R, K, S, s (Флаги и поля контроля):

    • Описание: Эти биты управляют функциями туннеля:

      • C (Check bit) — флаг проверки ошибок.

      • R (Routing bit) — используется для маршрутизации данных через туннель.

      • K (Key bit) — указывает на использование ключа безопасности.

      • S (Sequence bit) — указывает на необходимость последовательности пакетов.

      • s (Reserved bit) — зарезервировано для будущих версий или функций.

    • Роль: Эти флаги управляют поведением туннеля и обеспечивают дополнительную функциональность, например, безопасность и контроль.

  2. Recur (Рекурсия):

    • Описание: Этот бит используется для поддержки рекурсивных туннелей, то есть инкапсуляции туннелей внутри других туннелей.

    • Роль: Этот параметр помогает организовать более сложные структуры туннелей, что полезно для многослойной маршрутизации.

  3. A (Флаг подтверждения):

    • Описание: Этот флаг используется для подтверждения получения пакетов в туннеле.

    • Роль: Помогает подтверждать, что данные были успешно переданы и получены.

  4. Flags (Флаги):

    • Описание: Дополнительные флаги, которые указывают на различные особенности туннеля, такие как включение безопасности или других настроек.

    • Роль: Контролируют поведение туннеля и могут влиять на дополнительные параметры, такие как контроль целостности данных.

  5. Version (Версия):

    • Описание: Указывает на версию протокола GRE. В данном случае это версия 1.

    • Роль: Помогает идентифицировать тип туннеля и его возможности, а также влияет на поддержку дополнительных функций.

  6. Protocol (Протокол):

    • Описание: Указывает, какой тип данных передается через GRE туннель (например, IP, IPX, AppleTalk).

    • Роль: Это поле указывает, какой протокол инкапсулирован в пакете, позволяя маршрутизатору правильно интерпретировать передаваемые данные.

  7. Payload Length (Длина полезной нагрузки):

    • Описание: Это поле указывает на длину полезной нагрузки в пакете PPP.

    • Роль: Это важно для корректной обработки пакета, так как позволяет маршрутизатору понять, сколько данных передается.

  8. Sequence Number (Номер последовательности):

    • Описание: Это поле помогает отслеживать порядок пакетов, передаваемых через туннель.

    • Роль: Гарантирует, что пакеты будут доставлены в правильном порядке, что особенно важно для потоковых данных.

  9. Acknowledgment Number (Номер подтверждения):

    • Описание: Это поле используется для подтверждения получения пакетов.

    • Роль: Используется для управления передачей данных и обеспечения надежности соединения.

  10. Data (Данные):

    • Описание: Это фактическая полезная нагрузка, которая передается через туннель.

    • Роль: Это сами данные, которые инкапсулируются и передаются через GRE и PPP туннели.

© Javid CCNP


ссылка на оригинал статьи https://habr.com/ru/articles/891306/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *