GRE
GRE (Generic Routing Encapsulation, RFC 2784, изначально Cisco) — простой протокол инкапсуляции произвольного L3-payload внутрь IP-пакета. Не шифрует. Тупо оборачивает.
Занимает IP protocol 47. Никаких портов у него нет — это не UDP и не TCP, а отдельный L4-протокол над IP.
Что можно туннелировать
- IPv4 внутри IPv4 (site-to-site VPN без шифрования).
- IPv6 внутри IPv4 (переходные технологии).
- IPX, AppleTalk, всё старьё (в 90-х это была основная фича).
- Multicast (у vanilla IPsec с multicast проблемы, у GRE — нет).
- MPLS.
Формат заголовка
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 туннель) |
| NVGRE | Network Virtualization GRE — Microsoft-стандарт, конкурент VXLAN |
| GRE-in-UDP (RFC 8086) | GRE обёрнут в UDP, лучше для NAT/ECMP |
Использование
- Site-to-site без шифрования (внутри доверенной сети).
- GRE-over-IPsec — оборачивают в IPsec-tunnel для добавления шифрования. Стандартный корпоративный подход.
- DMVPN (Cisco Dynamic Multipoint VPN) — mGRE + NHRP + IPsec.
- PPTP — использует GRE для data-channel (Enhanced GRE с sequence).
- DDoS-скрабберы — часто раздают клиентам через GRE-туннель.
- Мост между филиалами с multicast/IPX — если что-то экзотическое надо провести через IP.
Проблемы
- MTU. GRE-обёртка съедает 24 байта (или больше с опциями). MSS clamping обязательно.
- NAT. GRE плохо через классический NAT, нужен GRE-helper в conntrack (Linux) или NAT-PT. Часто просто не работает через consumer-роутеры.
- Файрволы. IP protocol 47 часто блокируется провайдерами (не UDP/TCP — «странный»).
- Нет шифрования. Кто перехватил провод — читает все данные.
Знаменитое: DMVPN
Cisco Dynamic Multipoint VPN — топология «hub-and-spoke, но со spoke-to-spoke коротким путём»:
- Все spokes держат mGRE-туннель к hub.
- Когда spoke1 хочет говорить со spoke2 — спрашивает у hub через NHRP IP spoke2 и открывает прямой mGRE между ними.
- Всё это внутри IPsec для шифрования.