GRE
GRE (Generic Routing Encapsulation) — протокольный механизм, использующий IP (UDP) как транспортный протокол. GRE может быть использован для переноса различных протоколов внутри себя.
Возможности:
- GRE-туннели предоставляют возможность создавать многопротокольные локальные сети поверх однопротокольной магистральной сети.
- GRE-туннели предоставляют обходные пути для реализации сетей содержащих протоколы с ограниченным количеством переходов (hops).
- GRE-туннели объединяют разрозненные подсети.
- GRE-туннели позволяют реализовать соединения VPN поверх WAN-сетей.
Для отправки в GRE туннель IP-пакет при прохождении через интерфейс туннеля получает сверху дополнительный заголовок GRE, в котором в качестве адреса источника и адреса назначения будут указаны ip адреса начальной и конечной точки туннеля. После прибытия пакета на интерфейс с адресом назначения туннеля служебный заголовок GRE будет отброшен, и далее пакет будет обрабатываться в соответствии со своим «родным» IP заголовком.

Рисунок
MTU в протоколах туннелирования
Типичная размерность MTU для L3 интерфейса 1500 байт. В связи с добавлением служебного заголовка появляются новые требования к допустимому значению MTU при передаче пакета. Заголовок GRE имеет размерность 4 байта, 20 байт транспортный IP заголовок, заголовок IP пакета 20 байт, таким образом возникает необходимость задавать размер допустимого MTU на интерфейсах туннеля меньше стандартного значения.
Таблица — команды настройки
| Команда | Описание |
|---|---|
interface tunnel.<номер> | Создание интерфейса туннеля, где номер произвольное число |
ip mtu <значение> | Задание значения mtu для интерфейса |
ip tunnel <source IP> <destination IP> mode <eoip │ gre │ ipip> | Задание IP-адресов начала и конца туннеля и типа туннеля |
Keepalive в GRE
GRE-туннель не может автоматически отключиться, когда удалённая сторона недоступна. Туннельный интерфейс остаётся включённым, маршруты остаются в таблице, трафик идёт в никуда. Механизм keepalive — решает эту проблему, добавляя туннелям способность отслеживать состояние удалённой стороны.
Туннельный keepalive механизм работает даже если удалённая сторона не поддерживает keepalive. Сообщение keepalive отправляется удалённой стороне. При получении keepalive маршрутизатор декапсулирует GRE-пакет, в котором находится ещё один GRE-пакет с IP-заголовком и keepalive внутри, после чего маршрутизатор пересылает этот пакет по новому заголовку обратно отправителю keepalive.
Механизм keepalive включается в, режиме конфигурации туннельного интерфейса командой ip tunnel keepalive <0-65535> <1-255>:
<0-65535>— периодичность отправки сообщения keepalive в секундах. Значение по умолчанию — 10 секунд. Значение равное нулю отключает функцию keepalive.<1-255>— допустимое количество не вернувшихся keepalive сообщений. Значение по умолчанию равно трём. Система ожидает ответное keepalive в течении одной секунды; если сообщение не получено, счётчик попыток увеличивается на единицу. При достижении установленного значения туннель отключается.- После отключения туннеля отправка сообщений keepalive продолжается с заданной периодичностью. При получении ответного keepalive туннель восстанавливается.
В EcoRouterOS существует возможность статически задать входящий и исходящий IP адреса внутреннего заголовка GRE пакетов keepalive. Это делается для того чтобы механизм keepalive проверял не только доступность конца туннеля, но и статус удалённого туннельного интерфейса:
ip tunnel keepalive nat-avoidance source <A.B.C.D>
`ip tunnel keepalive nat-avoidance destination <A.B.C.D>
Пример базовой настройки туннеля GRE

Рисунок
Настройте туннель GRE между устройствами ER1 и ER2.
Шаг 1. Настройте интерфейсы и порты на маршрутизаторах EcoRouter.
enable
configure
interface 2ge1
ip address 11.0.0.1/16
interface 2ge2
ip address 192.168.0.1/24
port ge1
service-instance 4ge1
encapsulation untagged
connect ip interface 2ge1
port ge2
service-instance 4ge2
encapsulation untagged
connect ip interface 2ge2Шаг 2. Создайте интерфейс туннеля c именем tunnel.0
ER1(config)#interface tunnel.0Шаг 3. Назначьте ip адрес
ER1(config-if)#ip add 172.16.0.1/16Шаг 4. Установите параметр MTU
ER1(config-if)#ip mtu 1400Шаг 5. Задайте режим работы туннеля GRE и адресов начала и конца туннеля
ER1(config-if)#ip tunnel 11.0.0.1 12.0.0.1 mode greШаг 6. Настройте маршрутизацию трафика в туннель
ER1(config)#ip route 12.0.0.0/8 11.0.0.2
ER1(config)#ip route 192.168.200.0/24 172.16.0.2Произведите аналогичную настройку на ER2.
enable
configure
interface 2ge1
ip address 12.0.0.1/8
interface 2ge2
ip address 192.168.200.1/24
port ge1
service-instance 4ge1
encapsulation untagged
connect ip interface 2ge1
port ge2
service-instance 4ge2
encapsulation untagged
connect ip interface 2ge2
interface tunnel.0
ip add 172.16.0.2/16
ip mtu 1400
ip tunnel 12.0.0.1 11.0.0.1 mode gre
ip route 11.0.0.0/16 12.0.0.2
ip route 192.168.0.0/24 172.16.0.1Шаг 7. Настройте интерфейсы и порты на маршрутизаторе R1.
interface 2ge0
ip address 11.0.0.2/16
interface 2ge1
ip address 12.0.0.2/8
port ge0
service-instance 4ge0
encapsulation untagged
connect ip interface 2ge0
port ge1
service-instance 4ge1
encapsulation untagged
connect ip interface 2ge1Шаг 8. Установите адрес и шлюз для PC1 и PC2.
PC1> ip 192.168.0.10/24 192.168.0.1
PC2> ip 192.168.200.10/24 192.168.200.1Команды просмотра
Для просмотра состояния туннеля используется команда show interface tunnel.<номер туннеля>.
Для созданной выше конфигурации команда будет отображать следующий результат:
ecorouter#sh int tunnel.0
Interface tunnel.0 is up, line protocol is up
Ethernet address: 0000.ab27.8404
MTU: 1400
Tunnel source: 11.0.0.1
Tunnel destination: 12.0.0.2
Tunnel mode: GRE
ICMP redirection is on
<UP,BROADCAST,RUNNING,NOARP,MULTICAST>
inet 172.16.0.1/16 broadcast 172.16.255.255/16
total input packets 0, bytes 0
total output packets 0, bytes 0