GRE (Generic Routing Encapsulation)
GRE (Generic Routing Encapsulation) — протокол туннелирования, который упаковывает пакеты различных сетевых протоколов внутрь IP-пакетов для передачи через промежуточную сеть. Разработан компанией Cisco и описан в RFC 2784 (документ, определяющий базовый стандарт для протокола туннелирования Generic Routing Encapsulation); в IP-заголовке ему соответствует номер протокола 47.

Как работает туннель GRE
На двух маршрутизаторах создаются виртуальные туннельные интерфейсы с адресами источника и назначения. Исходный пакет получает заголовок GRE длиной от 4 байт и новый внешний IP-заголовок в 20 байт. Промежуточные узлы маршрутизируют его как обычный IP-пакет, а конечная точка снимает внешние заголовки и пересылает содержимое дальше. Из-за 24 байт накладных расходов MTU туннеля при стандартных 1500 байтах составляет 1476 байт. RFC 2890 (документ из серии Request for Comments (RFC), описывающий расширения протокола Generic Routing Encapsulation) добавляет необязательные поля ключа и порядкового номера.
Возможности и типовые задачи
GRE переносит многоадресный и широковещательный трафик, поэтому через туннель работают протоколы динамической маршрутизации, например OSPF или EIGRP. С его помощью передают IPv6 через сети IPv4, связывают площадки с частной адресацией через интернет. Многоточечный вариант mGRE лежит в основе DMVPN, где филиалы устанавливают туннели друг с другом динамически. Состояние туннеля контролируют сообщения keepalive, которые поддерживает ряд производителей.
Безопасность и ограничения
GRE не шифрует данные и не проверяет подлинность отправителя: содержимое туннеля доступно любому, кто перехватит пакеты. Для защиты применяют связку GRE over IPsec, в которой IPsec шифрует туннельный трафик. У GRE нет портов, поэтому протокол плохо проходит через NAT с трансляцией портов, а межсетевые экраны должны явно разрешать протокол 47. Заниженный MTU (максимальный размер пакета данных в байтах, который может быть передан по сети без его фрагментации) приводит к фрагментации, которую устраняют настройкой TCP MSS (параметр протокола TCP, определяющий максимальный размер полезной нагрузки (в байтах) одного TCP-сегмента).
Вопросы и ответы
Вопрос 1: Является ли GRE полноценным VPN?
GRE создаёт туннель, но не обеспечивает конфиденциальность
и целостность. Защищённым VPN он становится только
в сочетании с шифрованием, обычно с IPsec.
Вопрос 2: Зачем использовать GRE вместе с IPsec, если IPsec сам умеет туннелировать?
Классический туннельный режим IPsec передаёт только
одноадресный IP-трафик. GRE добавляет поддержку
многоадресных рассылок и протоколов маршрутизации,
а IPsec шифрует получившийся поток.
Вопрос 3: Какой MTU установить на туннеле GRE?
Для чистого GRE поверх сети с MTU 1500 байт — 1476 байт.
При использовании GRE over IPsec значение уменьшают
дополнительно, обычно до 1400 байт, и корректируют TCP MSS.

