GRE-туннель — это простой способ «упаковать» один пакет в другой и протянуть связь между сетями поверх любой IP-сети. Внутри может ехать IPv4 или IPv6 (а у многих вендоров — и L2-кадры), снаружи — обычный IP. Получается прозрачный коридор: маршрутизаторы думают, что сосед рядом, хотя между ними Интернет.
Зачем используют.
Соединить филиалы, пустить динамическую маршрутизацию (OSPF/BGP/EIGRP) через внешнюю сеть, перенести мультикаст, построить «IPv6 поверх IPv4» (или наоборот), часть DMVPN-схем (mGRE+NHRP), быстро связать VM/облака без завязки на провайдера.
Как это работает (коротко).
Две конечные точки (туннельные интерфейсы) инкапсулируют/деинкапсулируют трафик. Снаружи это IP-пакет с Protocol=47 (GRE) — не TCP/UDP и без портов. На полезную нагрузку накладывается «шапка» GRE и внешний IP-заголовок, поэтому полезное MTU уменьшается: обычно +~24–36 байт при внешнем IPv4 и +~44–52 байт при внешнем IPv6 (больше, если включены ключ/номер последовательности). Закладывайте это в расчётах MTU/MSS.
Что важно помнить.
- Нет шифрования и проверки подлинности. GRE — «труба без замка». Если нужно безопасно — оборачивают в IPsec (GRE-over-IPsec) или используют IPsec VTI.
- NAT и фаерволы. Это протокол 47, а не «порт 47»: некоторые NAT/ACL по умолчанию его режут. Нужны явные правила/ALG с поддержкой GRE.
- PMTU/фрагментация. Блокировка ICMP ломает Path MTU Discovery и вызывает подвисания. Часто помогает MSS-clamp и ручная настройка MTU на туннеле.
- Маршрутизация. Избегайте «рекурсивных» маршрутов (когда next-hop туннеля уходит… в этот же туннель). Держите корректный маршрут до внешних адресов.
Мини-пример (Linux/iproute2).
# локальный и удалённый внешние IP ip tunnel add gre1 mode gre local 203.0.113.10 remote 198.51.100.20 ttl 255 ip link set gre1 mtu 1476 up # пример: 1500 - ~24 байта накладных ip addr add 10.10.10.1/30 dev gre1 # адреса внутри туннеля # дальше — обычная маршрутизация: ip route add 10.20.0.0/16 via 10.10.10.2 dev gre1
Когда это «в десятку».
Нужно быстро и предсказуемо связать две сети «как будто L3-соседи», не привязываясь к железу/провайдеру, и не требуется встроенное шифрование. Для всего остального — добавляйте IPsec, правильно подбирайте MTU/MSS и проверяйте, что фаервол пропускает протокол 47.