GRE (Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный компанией CISCO Systems. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP пакеты. Номер протокола в IP — 47.
GRE туннель представляет собой соединение точка - точка, его можно считать одной из разновидностей VPN туннеля, без шифрования. Основное достоинство GRE это возможность передавать широковещательный трафик, что позволяет пропускать через такой туннель протоколы маршрутизации использующие его, IPSec — протокол защиты сетевого трафика на IP-уровне туннели в чистом виде этого не могут. Причин для организации GRE туннеля может быть множество от банальной необходимости пробросить свою сеть через чужое IP пространство до использования протоколов OSPF, RIPv2, EGRP совместно с IPSec. Так же GRE, в отличии от IPIP, может помочь пробросить немаршрутизируюмые протоколы, такие как NetBios, IPX, AppleTalk.
Различия между туннель GRE или IPIP:
Туннелирование увеличивает нагрузку на систему и сеть, потому что добавляются дополнительные 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 в туннельном или в транспортном режиме.
Туннелирование подразумевает три протокола:
GRE-заголовок накладывается «поверх» стандартного IP-пакета. При этом в самом GRE-заголовке содержится так называемый Tunnel IP Header. Именно в нем содержится информация о tunnel source и tunnel destination.
Данные адреса вкладываются в основной пакет, когда он отправляется в публичную сеть. В поле Control Information оригинального IP-пакета содержатся исходные IP-адреса источника и назначения. Таким образом, локальные серые IP-адреса скрыты в пакете, а в маршрутизации участвуют только те адреса которые мы указали в tunnel source и tunnel destination. При передаче пакета в локальную сеть GRE-заголовок отбрасывается и остается «чистый» IP-пакет.
GRETap (GRE Tunneling and Packet Reassembly Tool): Это утилита, которая позволяет создавать GRE-туннели на уровне ядра Linux. GRE-туннель позволяет упаковывать сетевые пакеты в другие пакеты IP для передачи через сеть, обеспечивая тем самым возможность создания виртуальной частной сети (VPN) поверх существующей сети. GRETap также обеспечивает функциональность по повторному сбору пакетов в случае их потери или повреждения в процессе передачи через GRE-туннель.
Убедитесь, что у вас установлены необходимые пакеты, включая iproute2, который содержит утилиту ip, позволяющую работать с сетевыми интерфейсами в Linux.
Настройка GRE туннелей в Debian и Ubuntu одинаковы. Имеется 2 удаленных сервера Debian 7.8 Wheezy с реальными статическими IP адресами.
ip tunnel list
$IPT -A INPUT -p gre -j ACCEPT or $IPT -A INPUT -p gre -s x.x.x.x -j ACCEPT
#!/bin/sh -e #ip tunnel del tun1 ip tunnel add tun1 mode gre remote 91.196.98.162 local 188.230.123.238 dev eth3 ifconfig tun1 10.26.95.254 pointopoint 192.168.35.254 #ifconfig tun1 mtu 1400 #ifconfig tun1 up route add -net 192.168.35.0 netmask 255.255.255.0 gw 192.168.35.254 # Hotel route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.35.254 # Service Lan Vlan route add -net 10.90.91.0 netmask 255.255.255.0 gw 192.168.35.254
То же самое только через файл /etc/network/interfaces
auto tun1 iface tun1 inet static address 10.26.95.254 netmask 255.255.255.0 mtu 1400 up ifconfig tun1 multicast pre-up iptunnel add tun1 mode gre local 188.230.123.238 remote 91.196.98.162 dev eth3 post-up route add -net 192.168.35.0 netmask 255.255.255.0 gw 192.168.35.254 post-up route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.35.254 post-up route add -net 10.90.91.0 netmask 255.255.255.0 gw 192.168.35.254 pointopoint 192.168.35.254 post-down iptunnel del tun1
#!/bin/sh -e ip tunnel add tun1 mode gre remote 188.230.123.238 local 91.196.98.162 dev eth5 ifconfig tun1 192.168.35.254 pointopoint 10.26.95.254 route add -net 10.26.95.0 netmask 255.255.255.0 gw 10.26.95.254 route add -net 172.20.20.0 netmask 255.255.255.0 gw 10.26.95.254
В файл /etc/network/interfaces это будет выгладить так
auto tun1 iface tun1 inet static address 192.168.35.254 netmask 255.255.255.0 mtu 1400 up ifconfig tun1 multicast pre-up iptunnel add tun1 mode gre remote 188.230.123.238 local 91.196.98.162 dev eth5 post-up route add -net 10.26.95.0 netmask 255.255.255.0 gw 10.26.95.254 post-up route add -net 172.20.20.0 netmask 255.255.255.0 gw 10.26.95.254 pointopoint 10.26.95.254 post-down iptunnel del tun1
tcpdump -n -i eth3 proto 47
Ниже рабочий пример для ping из локальной сети
13:25:04.444375 IP 188.230.123.238 > 91.196.98.162: GREv0, length 88: IP 10.26.95.251 > 192.168.35.55: ICMP echo request, id 5341, seq 15, length 64 13:25:04.459864 IP 91.196.98.162 > 188.230.123.238: GREv0, length 88: IP 192.168.35.55 > 10.26.95.251: ICMP echo reply, id 5341, seq 15, length 64
GRETap обеспечивает гибкость и надежность в сетевых архитектурах, позволяя администраторам сетей и разработчикам создавать виртуальные сетевые соединения. Помните, что обычный GRE-туннель не обеспечивает шифрования данных по умолчанию. Он предоставляет механизм для упаковки сетевых пакетов и передачи их через сеть, но без дополнительного слоя безопасности.