GRE

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

Для отправки в GRE туннель IP-пакет при прохождении через интерфейс туннеля получает сверху дополнительный заголовок GRE, в котором в качестве адреса источника и адреса назначения будут указаны ip адреса начальной и конечной точки туннеля. После прибытия пакета на интерфейс с адресом назначения туннеля служебный заголовок GRE будет отброшен и далее пакет будет обрабатываться в соответствии со своим «родным» IP заголовком.

Рисунок

MTU в протоколах туннелирования

Типичная размерность MTU для L3 интерфейса 1500 байт. В связи с добавлением служебного заголовка появляются новые требования к допустимому значению MTU при передаче пакета. Заголовок GRE имеет размерность 4 байта, 20 байт транспортный IP заголовок, заголовок IP пакета 20 байт, таким образом возникает необходимость задавать размер допустимого MTU на интерфейсах туннеля меньше стандартного значения.

Флаги в GRE

Реализация EcoRouterOS при инкапсулировании во внешнем заголовке устанавливает DF бит равным единице (не фрагментировать). Если приходящий кадр в заголовке IP содержит MF бит равный 1 (была фрагментация) или fragment offset бит равный 1 (последний фрагмент первоначального кадра), то кадр будет отброшен. При GRE инкапсуляции приходящие кадры, содержащие в заголовке GRE флаги checksum, routing, key, seq number, strict source route или recursion, отличные от нуля, будут отброшены.

Таблица — Флаги в GRE, команды настройки

КомандаОписание
interface tunnel.<номер>Создание интерфейса туннеля, где номер произвольное число
ip mtu <значение>Задание значения mtu для интерфейса
ip tunnel <source IP> <destination IP> mode <gre │ ipip>Задание IP-адресов начала и конца туннеля и типа туннеля

Пример базовой настройки туннеля GRE

Рисунок


Настроим туннель GRE между устройствами ER1 и ER2.

Шаг 1. Настроим интерфейсы и порты на маршрутизаторах EcoRouter.

ER1>enable
ER1#configure
ER1(config)#interface 2ge1
ER1(config-if)ip address 11.0.0.1/16
ER1(config)#interface 2ge2
ER1(config-if)ip address 192.168.0.1/24
ER1(config)#port ge1
ER1(config-port)#service-instance 4ge1
ER1(config-service-instance)#encapsulation untagged
ER1(config-service-instance)#connect ip interface 2ge1
ER1(config)#port ge2
ER1(config-port)#service-instance 4ge2
ER1(config-service-instance)#encapsulation untagged
ER1(config-service-instance)#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.

ER2>enable
ER2#configure
ER2(config)#interface 2ge1
ER2(config-if)ip address 12.0.0.1/8
ER2(config)#interface 2ge2
ER2(config-if)ip address 192.168.200.1/24
ER2(config)#port ge1
ER2(config-port)#service-instance 4ge1
ER2(config-service-instance)#encapsulation untagged
ER2(config-service-instance)#connect ip interface 2ge1
ER2(config)#port ge2
ER2(config-port)#service-instance 4ge2
ER2(config-service-instance)#encapsulation untagged
ER2(config-service-instance)#connect ip interface 2ge2
ER2(config)#interface tunnel.0
ER2(config-if)#ip add 172.16.0.2/16
ER2(config-if)#ip mtu 1400
ER2(config-if)#ip tunnel 12.0.0.1 11.0.0.1 mode gre
ER2(config)#ip route 11.0.0.0/16 12.0.0.2
ER2(config)#ip route 192.168.0.0/24 172.16.0.1

Шаг 7. Настроим интерфейсы и порты на маршрутизаторе R1.

R1(config)#interface 2ge0
R1(config-if)#ip address 11.0.0.2/16
R1(config-service-instance)#interface 2ge1
R1(config-if)#ip address 12.0.0.2/8
R1(config-if)#port ge0
R1(config-port)#service-instance 4ge0
R1(config-service-instance)#encapsulation untagged
R1(config-service-instance)#connect ip interface 2ge0
R1(config-if)#port ge1
R1(config-port)#service-instance 4ge1
R1(config-service-instance)#encapsulation untagged
R1(config-service-instance)#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