GRE

GRE (Generic Routing Encapsulation, RFC 2784, изначально Cisco) — простой протокол инкапсуляции произвольного L3-payload внутрь IP-пакета. Не шифрует. Тупо оборачивает.

Занимает IP protocol 47. Никаких портов у него нет — это не UDP и не TCP, а отдельный L4-протокол над IP.

Что можно туннелировать

Формат заголовка

0                   1                   2                   3
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|C| |K|S| Reserved0       | Ver |     Protocol Type            |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|      Checksum (optional)      |    Reserved1 (Optional)       |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|                         Key (optional)                        |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|                    Sequence Number (Optional)                 |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Минимальный GRE-заголовок — 4 байта. С флагами — 8-16 байт.

Настройка на Linux

ip tunnel add gre0 mode gre remote 1.2.3.4 local 5.6.7.8 ttl 255
ip addr add 10.0.0.1/30 dev gre0
ip link set gre0 up
ip route add 172.16.0.0/16 via 10.0.0.2

На Cisco

interface Tunnel0
 ip address 10.0.0.1 255.255.255.252
 tunnel source 1.1.1.1
 tunnel destination 2.2.2.2
 tunnel mode gre ip

Модификации

ТипЧто даёт
GRE (базовый)Инкапсуляция + опциональный ключ/sequence
mGRE (multipoint)Один интерфейс, много peers (для DMVPN на Cisco)
GRETAPИнкапсуляция целых Ethernet-фреймов (L2 туннель)
NVGRENetwork Virtualization GRE — Microsoft-стандарт, конкурент VXLAN
GRE-in-UDP (RFC 8086)GRE обёрнут в UDP, лучше для NAT/ECMP

Использование

Проблемы

Знаменитое: DMVPN

Cisco Dynamic Multipoint VPN — топология «hub-and-spoke, но со spoke-to-spoke коротким путём»:

См. также