Здравствуйте, коллеги! Сегодня мы будем рассматривать протокол 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 |
Просмотр маршрутов на маршрутизаторе филиала, чтобы подтвердить, что трафик для главного офиса правильно направляется через туннель. |
Примечания:
-
IP-адреса могут отличаться: В реальной сети IP-адреса, указанные для туннеля и интерфейсов, могут быть различными. Убедитесь, что настройки соответствуют вашей сети.
-
Статические маршруты: Обязательно добавьте статический маршрут на каждом маршрутизаторе, чтобы пакеты правильно маршрутизировались через туннель.
-
Проверка состояния: Используйте команды show int Tunnel0 и show ip route для диагностики и проверки работы туннеля. Это поможет удостовериться в правильности настройки и в том, что туннель активно передает трафик.

-
PC 1 (192.168.2.1) отправляет запрос (например, пинг ICMP) на PC 2 (192.168.2.2). Это стандартный пакет, который имеет исходный адрес 192.168.2.1 и целевой адрес 192.168.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.
-
-
Инкапсулированный пакет теперь отправляется через интернет (обозначен как облако на схеме). Он передается через публичную сеть, используя внешний IP-адрес маршрутизатора R1 (156.213.54.7).
-
Пакет продолжает свой путь через интернет, не изменяя содержимого (все данные находятся в GRE-обертке), что позволяет безопасно передавать данные между сетями, даже через общедоступную сеть (интернет).
Таким образом, на этом этапе весь трафик между PC 1 и PC 2 передается через туннель, инкапсулированный в GRE, который позволяет передавать данные в рамках защищенной и виртуальной сети между двумя офисами через публичную сеть.

-
Распаковка пакета на маршрутизаторе R2:
-
После того как инкапсулированный пакет, отправленный R1, достигает маршрутизатора R2, процесс инкапсуляции происходит в обратном порядке.
-
-
Удаление GRE-заголовка:
-
На маршрутизаторе R2 происходит извлечение исходного пакета из GRE-обертки. В этом процессе удаляется GRE-заголовок, который был добавлен на R1. Теперь пакету возвращается его оригинальная форма, то есть IP-пакет с исходным адресом 192.168.2.1 и целевым адресом 192.168.2.2.
-
-
Обработка пакета маршрутизатором R2:
-
После удаления GRE-заголовка, R2 видит оригинальный IP-пакет с ICMP запросом (например, пинг), который был отправлен PC 1.
-
Этот пакет теперь передается дальше на PC 2 (192.168.2.2).
-
-
Отправка ICMP-пакета на PC 2:
-
PC 2 (192.168.2.2) получает ICMP-пакет, который теперь не содержит обертки GRE и готов к дальнейшей обработке.
-
Важные шаги в процессе:
-
GRE-заголовок удаляется только на маршрутизаторе R2, так как R2 извлекает оригинальный IP-пакет.
-
Пакет передается по туннелю без изменений через интернет (обозначенный облаком).
-
Когда пакет достигает R2, он извлекается из GRE-туннеля и отправляется непосредственно PC 2.


-
Ethernet — канальный уровень, который определяет физическое соединение для передачи данных.
-
Новый IP — это внешний IP-адрес, который используется для доставки пакета через интернет.
-
GRE — заголовок инкапсуляции, который добавляется для передачи пакета через туннель. Он необходим для того, чтобы маршрутизаторы могли обрабатывать данные как туннельные пакеты.
-
Заголовок доставки (Delivery header) — информация, которая используется для адресации и доставки пакета через сеть.
-
IP — оригинальный заголовок пакета, который был инкапсулирован в GRE-пакет, и содержит информацию о передаче данных.
-
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 туннелей, чтобы предотвратить потерю данных и проблемы с соединением. |
Когда и почему использовать эти команды:
-
int tunnel 0:
-
Когда: Нужно активировать и настроить виртуальный туннельный интерфейс GRE на маршрутизаторе.
-
Почему: Без этой команды маршрутизатор не будет знать, какой интерфейс использовать для туннелирования данных.
-
-
keepalive 10:
-
Когда: Нужно отслеживать активность соседнего маршрутизатора и автоматически отключать туннель, если связь теряется.
-
Почему: Это помогает поддерживать работоспособность сети, автоматически отключая туннель, если соседний маршрутизатор перестает отвечать.
-
-
ip tcp adjust-mss 1436:
-
Когда: Если возникают проблемы с фрагментацией пакетов через GRE туннель.
-
Почему: Эта команда уменьшает размер TCP пакетов, чтобы избежать их фрагментации на сетевых устройствах, что помогает сохранить стабильность соединения и уменьшить потерю данных.
-
Существует две основные версии GRE:
-
GRE Version 0:
-
Описание: Это стандартная версия GRE, используемая для инкапсуляции пакетов IP в GRE-туннеле. Она не поддерживает дополнительную функциональность, такую как аутентификация или шифрование, и используется для передачи любых IP-пакетов через туннель.
-
Использование: Подходит для простого туннелирования между двумя сетями.
-
-
GRE Version 1:
-
Описание: Эта версия добавляет поддержку новых возможностей, таких как аутентификация и контроль целостности данных. Однако она используется реже и имеет более ограниченное применение по сравнению с версией 0.
-
Использование: Используется в случаях, когда требуется дополнительная безопасность и контроль целостности.
-
В большинстве случаев используется GRE Version 0, так как она проще и достаточно функциональна для большинства задач по туннелированию.

Структура GRE версии 0
Основная структура:
-
Ethernet (Желтый блок):
-
Описание: Это канальный уровень, который используется для передачи данных по сети Ethernet. Он представляет собой физическую среду для передачи пакетов.
-
Роль: Этот блок отвечает за передачу пакетов через Ethernet-сеть. Здесь устанавливается исходный адрес и MAC-адрес устройства.
-
-
Новый IP (Желто-оранжевый блок):
-
Описание: Это IP-заголовок, который используется для доставки пакета через интернет (или другие сети). Он используется для маршрутизации пакетов между устройствами в разных подсетях или по всему интернету.
-
Роль: Новый IP-адрес указывает адресацию для доставки пакета через внешний маршрутизатор (маршруты, указанные на маршрутизаторе).
-
-
GRE (Серый блок):
-
Описание: Это заголовок инкапсуляции для протокола GRE (Generic Routing Encapsulation). GRE используется для инкапсуляции различных типов данных в IP-пакетах, позволяя передавать их через туннели.
-
Роль: Заголовок GRE используется для инкапсуляции пакетов и доставки их через туннель. В нем содержится важная информация, необходимая для правильной передачи данных, включая версию GRE, тип данных, контрольные суммы и другие поля.
-
-
IP (Зеленый блок):
-
Описание: Это оригинальный IP-заголовок, который был инкапсулирован в GRE. Он содержит информацию о передаче данных, такие как адрес назначения и источник. Это тот же IP-пакет, который бы был передан без GRE, но теперь он находится внутри GRE-туннеля.
-
Роль: Заголовок IP помогает маршрутизировать пакет через сеть и указывает, какой конечный адрес должен получить данные.
-
-
ICMP (Зеленый блок):
-
Описание: Это часть полезной нагрузки пакета. В данном случае, это ICMP-пакет, который может использоваться для диагностики, например, для пинга. Он находится внутри инкапсулированного IP-пакета.
-
Роль: Это данные, которые передаются через туннель. В нашем случае это запрос ICMP (например, пинг).
-
Структура заголовка GRE:
-
C, R, K, S, s (Флаги, поля контроля):
-
Описание: Эти биты используются для управления туннелем и его поведением:
-
C (Check bit) — флаг, который указывает, что следует производить проверку ошибок в пакете.
-
R (Routing bit) — указывает на использование маршрутизации в туннеле.
-
K (Key bit) — если установлен, используется ключ безопасности для туннеля.
-
S (Sequence bit) — используется для управления последовательностью пакетов.
-
s (Reserved bit) — зарезервировано для будущих расширений.
-
-
-
Recur (Рекурсия):
-
Описание: Этот бит отвечает за рекурсивную инкапсуляцию. Он указывает, нужно ли инкапсулировать пакеты в другие GRE пакеты, создавая многослойную инкапсуляцию.
-
Роль: Может использоваться для сложных сценариев маршрутизации или когда требуется повторная инкапсуляция пакетов.
-
-
Flags (Флаги):
-
Описание: Это дополнительные флаги, которые могут указывать на различные особенности туннеля, такие как наличие дополнительной проверки или меток.
-
Роль: Управляют поведением и режимами туннеля, могут быть использованы для изменения функциональности.
-
-
Version (Версия):
-
Описание: Указывает версию протокола GRE. В данном случае это версия 0.
-
Роль: Позволяет идентифицировать тип протокола для правильной обработки данных. Разные версии GRE могут иметь различные возможности или заголовки.
-
-
Protocol (Протокол):
-
Описание: Это поле указывает, какой протокол инкапсулирован в GRE. Это поле указывает на тип данных, который передается (например, IP, CLNP, IPX, AppleTalk и т. д.).
-
Роль: Это важный элемент, который помогает маршрутизатору понять, как интерпретировать инкапсулированные данные.
-
-
Checksum (Контрольная сумма):
-
Описание: Это поле используется для проверки целостности данных. Контрольная сумма позволяет обнаружить ошибки при передаче.
-
Роль: Обеспечивает корректность данных, гарантируя, что переданные пакеты не были повреждены.
-
-
Key (Ключ):
-
Описание: Используется для добавления метки безопасности или уникальной идентификации туннеля.
-
Роль: Этот ключ помогает отличить различные туннели, улучшая безопасность и контроль трафика.
-
-
Sequence Number (Номер последовательности):
-
Описание: Это поле используется для отслеживания порядковых номеров пакетов, передаваемых через туннель.
-
Роль: Упорядочивает пакеты, чтобы избежать проблем с их обработкой и доставкой.
-
-
Routing (Маршрутизация):
-
Описание: Это поле может содержать информацию о маршруте, который должен быть использован для передачи пакета через туннель.
-
Роль: Помогает определить, как маршрутизировать пакеты через GRE-туннель.
-
-
Data (Данные):
-
Описание: Это сам пакет или информация, передаваемая через туннель. В данном случае это ICMP-пакет, который был инкапсулирован.
-
Роль: Это полезная нагрузка, которая должна быть доставлена на конечное устройство.
-

Структура GRE версии 1, которая используется в сочетании с PPP (Point-to-Point Protocol), и включает дополнительные функции по сравнению с GRE версии 0.
Основная структура:
-
Ethernet (Желтый блок):
-
Описание: Это канальный уровень, который используется для передачи данных через физическую среду Ethernet.
-
Роль: Это базовая передача данных на канальном уровне, которая будет передана через IP-сеть.
-
-
Новый IP (Желто-оранжевый блок):
-
Описание: Это IP-заголовок, который используется для маршрутизации пакетов через сеть.
-
Роль: Этот блок необходим для правильной доставки пакета через интернет, указывая адрес назначения и источник.
-
-
GRE (Серый блок):
-
Описание: Заголовок GRE используется для инкапсуляции и передачи пакетов через туннель. В версии 1 GRE включает дополнительные функции и параметры.
-
Роль: Это основа инкапсуляции, которая помогает передавать данные через виртуальные туннели.
-
-
PPP (Красный блок):
-
Описание: Это заголовок PPP (Point-to-Point Protocol), который используется для создания прямого соединения между двумя точками. В данном случае PPP добавляется поверх GRE для улучшенной аутентификации и контроля данных.
-
Роль: PPP позволяет устанавливать и поддерживать соединение с аутентификацией и возможностью сжатия данных.
-
-
PPP Payload (Payload):
-
Описание: Это полезная нагрузка, которая содержит фактические данные, которые передаются по туннелю. В данном случае это инкапсулированный пакет PPP.
-
Роль: Это данные, которые должны быть доставлены от источника к получателю.
-
Структура заголовка GRE версии 1:
-
C, R, K, S, s (Флаги и поля контроля):
-
Описание: Эти биты управляют функциями туннеля:
-
C (Check bit) — флаг проверки ошибок.
-
R (Routing bit) — используется для маршрутизации данных через туннель.
-
K (Key bit) — указывает на использование ключа безопасности.
-
S (Sequence bit) — указывает на необходимость последовательности пакетов.
-
s (Reserved bit) — зарезервировано для будущих версий или функций.
-
-
Роль: Эти флаги управляют поведением туннеля и обеспечивают дополнительную функциональность, например, безопасность и контроль.
-
-
Recur (Рекурсия):
-
Описание: Этот бит используется для поддержки рекурсивных туннелей, то есть инкапсуляции туннелей внутри других туннелей.
-
Роль: Этот параметр помогает организовать более сложные структуры туннелей, что полезно для многослойной маршрутизации.
-
-
A (Флаг подтверждения):
-
Описание: Этот флаг используется для подтверждения получения пакетов в туннеле.
-
Роль: Помогает подтверждать, что данные были успешно переданы и получены.
-
-
Flags (Флаги):
-
Описание: Дополнительные флаги, которые указывают на различные особенности туннеля, такие как включение безопасности или других настроек.
-
Роль: Контролируют поведение туннеля и могут влиять на дополнительные параметры, такие как контроль целостности данных.
-
-
Version (Версия):
-
Описание: Указывает на версию протокола GRE. В данном случае это версия 1.
-
Роль: Помогает идентифицировать тип туннеля и его возможности, а также влияет на поддержку дополнительных функций.
-
-
Protocol (Протокол):
-
Описание: Указывает, какой тип данных передается через GRE туннель (например, IP, IPX, AppleTalk).
-
Роль: Это поле указывает, какой протокол инкапсулирован в пакете, позволяя маршрутизатору правильно интерпретировать передаваемые данные.
-
-
Payload Length (Длина полезной нагрузки):
-
Описание: Это поле указывает на длину полезной нагрузки в пакете PPP.
-
Роль: Это важно для корректной обработки пакета, так как позволяет маршрутизатору понять, сколько данных передается.
-
-
Sequence Number (Номер последовательности):
-
Описание: Это поле помогает отслеживать порядок пакетов, передаваемых через туннель.
-
Роль: Гарантирует, что пакеты будут доставлены в правильном порядке, что особенно важно для потоковых данных.
-
-
Acknowledgment Number (Номер подтверждения):
-
Описание: Это поле используется для подтверждения получения пакетов.
-
Роль: Используется для управления передачей данных и обеспечения надежности соединения.
-
-
Data (Данные):
-
Описание: Это фактическая полезная нагрузка, которая передается через туннель.
-
Роль: Это сами данные, которые инкапсулируются и передаются через GRE и PPP туннели.
-
© Javid CCNP
ссылка на оригинал статьи https://habr.com/ru/articles/891306/
Добавить комментарий