← Back to blog

GRE, IPsec и WireGuard: когда использовать каждый вариант

⚙️ Теория

🧭 Туннелирование и VPN это не одно и то же

Туннель инкапсулирует один трафик в другой.
VPN обычно добавляет к туннелю криптографическую защиту (конфиденциальность, целостность, аутентификацию).


1) GRE (RFC 2784)

GRE это простой туннельный протокол:

  • хорошо переносит различные L3-протоколы;
  • не дает шифрования и аутентификации сам по себе.

Вывод: GRE удобно для инкапсуляции, но для защищенного канала его обычно комбинируют с IPsec.


2) IPsec (RFC 4301 + IKEv2 RFC 7296)

IPsec это набор протоколов сетевой защиты на L3:

  • ESP обеспечивает конфиденциальность/целостность (RFC 4303);
  • ключи и SA согласуются через IKEv2 (RFC 7296).

Основные режимы:

  • tunnel mode (типично site-to-site);
  • transport mode (реже для endpoint-to-endpoint).

Сильные стороны:

  • зрелый стандарт;
  • межвендорная совместимость;
  • гибкая policy-модель.

Сложности:

  • выше операционная сложность;
  • больше параметров для согласования и troubleshooting.

3) WireGuard

WireGuard это современный VPN-протокол с минималистичной моделью:

  • Noise-based handshake;
  • фиксированный набор современных криптопримитивов;
  • меньше конфигурационных вариантов, чем у IPsec.

Обычно это упрощает эксплуатацию и снижает класс ошибок "неправильная криптоконфигурация".


⚖️ Практический выбор

  • нужен чистый туннель без крипты: GRE;
  • нужна корпоративная межвендорная L3-защита и строгая policy: IPsec;
  • нужен более простой и быстрый операционно VPN в Linux-экосистеме: WireGuard.

Что нужно уметь объяснить

Почему GRE нельзя считать "безопасным VPN"?

Потому что RFC 2784 не определяет встроенное шифрование/аутентификацию полезной нагрузки.

Почему IPsec часто считают сложным?

Из-за количества параметров (IKE proposals, lifetimes, PFS, selectors, NAT-T), которые должны совпасть на обеих сторонах.

Почему WireGuard часто проще в эксплуатации?

Меньше вариативности конфигурации и современный криптонабор по умолчанию уменьшают пространство ошибок.


🧪 Практика

1. GRE в Linux (инкапсуляция без шифрования)

sudo ip tunnel add gre1 mode gre local 203.0.113.10 remote 198.51.100.20 ttl 255
sudo ip addr add 10.10.10.1/30 dev gre1
sudo ip link set gre1 up

2. IPsec: базовый чеклист до запуска

  • синхронизировать IKE/ESP proposals;
  • согласовать traffic selectors;
  • проверить NAT-T;
  • задать ротацию ключей и lifetime SA;
  • включить мониторинг rekey/failures.

3. WireGuard: минимальный запуск через wg-quick

sudo wg-quick up wg0
sudo wg show

Проверьте:

  • handshake timestamp;
  • transfer counters;
  • корректность allowed-ips.

4. Операционные guardrails

  • явно фиксировать MTU/MSS и тестировать path MTU;
  • контролировать маршруты в обе стороны;
  • не смешивать "доверяемый туннель" и "открытый доступ" без ACL.

🧾 Вывод

GRE, IPsec и WireGuard закрывают разные задачи.
Лучший выбор не "самый модный", а тот, который соответствует требованиям:

  • к безопасности,
  • к совместимости,
  • к операционной сложности команды.

📚 Ссылки


Проверка источников

GRE, IPsec и WireGuard: когда использовать каждый вариант | Aleksandr Suprun