GRE (Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный компанией CISCO Systems. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP пакеты. Номер протокола в IP — 47. Так как GRE является протоколом сетевого уровня и не использует порты (в отличие от протоколов TCP и UDP), а одним из необходимых условий работы механизма PAT является наличие «открытого» порта, то работа протокола GRE через межсетевой экран может быть затруднена.
Что такое GRE туннель?
GRE туннель представляет собой соединение точка - точка, его можно считать одной из разновидностей VPN туннеля, без шифрования. Основное достоинство GRE это возможность передавать широковещательный трафик, что позволяет пропускать через такой туннель протоколы маршрутизации использующие его, IPSec — протокол защиты сетевого трафика на IP-уровне туннели в чистом виде этого не могут. Причин для организации GRE туннеля может быть множество от банальной необходимости пробросить свою сеть через чужое IP пространство до использования протоколов OSPF, RIPv2, EGRP совместно с IPSec. Так же GRE, в отличии от IPIP, может помочь пробросить немаршрутизируюмые протоколы, такие как NetBios, IPX, AppleTalk.
Различия между туннель GRE или IPIP:
IPIP — инкапсулирует только unicast IPv4-трафик
GRE — IPv4/IPv6 unicast/multicast трафик
Туннелирование увеличивает нагрузку на систему и сеть, потому что добавляются дополнительные IP-заголовки. Таким образом, если обычный размер пакета (MTU) в сети равен 1500 байтам, то при пересылке по туннелю, пакет будет меньше, 1476 байт для GRE и 1480 байт для IPIP. Задать MTU можно вручную или с помощью PMTUD (path MTU discovery). Основная проблема в ручной настройке MTU и/или MSS состоит в том, что по пути между вашими площадками может оказаться линк с MTU, скажем, 1300. Тут на помощь может прийти PMTUD. Протокол целиком и полностью полагается на ICMP протокол диагностики перегрузки сети unreachable messages, которые должны быть разрешены на всем пути между соседями. Cisco рекомендует устанавливать MTU в 1400 байт вне зависимости от того работает GRE поверх IPSec в туннельном или в транспортном режиме.
Туннелирование подразумевает три протокола:
пассажир — инкапсулированный протокол (IP, CLNP, IPX, AppleTalk, DECnet Phase IV, XNS, VINES и Apollo)
протокол инкапсуляции (GRE)
транспортный протокол (IP)
Как происходит инкапсуляции заголовка GRE в IP-пакет
GRE-заголовок накладывается «поверх» стандартного IP-пакета. При этом в самом GRE-заголовке содержится так называемый Tunnel IP Header. Именно в нем содержится информация о tunnel source и tunnel destination.
Данные адреса вкладываются в основной пакет, когда он отправляется в публичную сеть. В поле Control Information оригинального IP-пакета содержатся исходные IP-адреса источника и назначения. Таким образом, локальные серые IP-адреса скрыты в пакете, а в маршрутизации участвуют только те адреса которые мы указали в tunnel source и tunnel destination. При передаче пакета в локальную сеть GRE-заголовок отбрасывается и остается «чистый» IP-пакет.
Пример:
Настроить GRE-туннель между устройствами R-FW и L-FW
Решение:
1 способ
Использование Network Manager#
На обоих устройствах запустить nmtui
Ethernet -> Add
Ok
Перезапустить настройки сетевых интерфейсов
В случае использования firewalld написать правила, разрешающее прохождение трафика gre:
firewall-cmd --zone=external --add-service=gre --permanent
firewall-cmd --reload
В случае использования iptables написать правила, разрешающее прохождение трафика gre:
IPT -A INPUT -p gre -j ACCEPT
or
IPT -A INPUT -p gre -s x.x.x.x -j ACCEPT
2 способ
Скрипт для ручного создания GRE туннеля#
L-FW:
nano /etc/network/interfaces
iface tun1 inet static
address 5.5.5.2
netmask 255.255.255.252
mtu 1400
up ifconfig tun1 multicast
pre-up iptunnel add tun1 mode gre local 10.10.10.1 remote 20.20.20.100 dev ens192
post-down iptunnel del tun1