GRE (англ. Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный компанией Cisco Systems. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP-пакеты. Номер протокола в IP — 47.
IP/GRE является самостоятельным транспортным протоколом, и не опирается на протоколы типа TCP или UDP. Размер заголовка GRE составляет 4 байта, что совместно с заголовком IP в 20 байт уменьшает MTU полезной нагрузки в виде инкапсулируемых данных на 24 байта.
Туннелирование подразумевает три протокола:
- пассажир — инкапсулированный протокол (IP, CLNP, IPX, AppleTalk, DECnet Phase IV, XNS, VINES и Apollo)
- протокол инкапсуляции (GRE)
- сетевой протокол (IP)
Так как GRE является протоколом транспортного уровня, который не использует порты (в отличие от протоколов TCP и UDP), а одним из необходимых условий работы механизма NAT является наличие «открытого» порта, то работа протокола GRE через межсетевой экран может быть затруднена.
Для GRE, работающего совместно с PPTP эта задача решается, благодаря тому, что PPTP согласует оконечные точки соединения и маршрутизатор совершающий NAT, с технологией PPTP Passthrough или ее разновидностью может построить в таблице трансляции соответствующее правило.
Для чистого GRE этот способ не подходит, поскольку оконечные точки указываются непосредственно при конфигурировании протокола, и если в одну сторону (клиент за NAT) пакеты еще могут быть транслированы, то обратный трафик не сможет быть транслирован, поскольку в своём составе GRE не имеет инструментов для сопоставления сеанса связи. Единственное решение может быть только статическая настройка SNAT\DNAT.