Как соединить две приватные сети, чтобы хосты из них могли общаться?

«Как соединить две приватные сети, чтобы хосты из них могли общаться?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для соединения двух изолированных приватных сетей в DevOps-практике я обычно выбираю решение в зависимости от среды: облако или on-premise.

В облачных средах (AWS, GCP, Azure):

  • VPC Peering / VNet Peering: Настраиваю прямое соединение между виртуальными сетями в рамках одного облачного провайдера. Это наиболее производительный и управляемый вариант. В AWS, например, это выглядит как создание пирингового соединения между двумя VPC с последующей настройкой таблиц маршрутизации (Route Tables).
  • Transit Gateway / Hub-and-Spoke: Для более сложных архитектур с множеством сетей использую централизованный шлюз.
  • Cloud VPN: Если сети находятся в разных регионах или у разных провайдеров, настраиваю IPSec VPN-туннель через шлюзы облачного провайдера.

В гибридных или on-premise средах:

  • Site-to-Site VPN (IPSec): Разворачиваю VPN-шлюзы (например, на базе pfSense, strongSwan) на границе каждой сети. Настройка включает обмен ключами IKE, настройку политик безопасности (Security Associations) и маршрутизацию.
  • WireGuard: Для более современных и высокопроизводительных решений использую WireGuard. Его легче конфигурировать, и он работает на уровне ядра. На шлюзах каждой сети запускаю демон WireGuard, настраиваю туннельный интерфейс и прописываю маршруты до удаленной подсети.
    
    # Пример фрагмента конфига WireGuard на шлюзе сети A (10.10.1.0/24)
    [Interface]
    Address = 172.16.0.1/30
    PrivateKey = <local_private_key>
    ListenPort = 51820

[Peer] PublicKey = AllowedIPs = 10.10.2.0/24 Endpoint = :51820


- **Overlay-сети (VXLAN):** В инфраструктуре с SDN или контейнерами (Kubernetes) могу использовать overlay-сети, которые инкапсулируют L2-трафик поверх L3, создавая виртуальный плоский сетевой слой.

**Ключевые шаги после установки соединения:**
1.  Настроить форвардинг пакетов (`net.ipv4.ip_forward = 1`) на шлюзах.
2.  Обновить правила межсетевого экрана (iptables/nftables), чтобы разрешить трафик между подсетями и через туннельные интерфейсы.
3.  Прописать статические маршруты на хостах или через DHCP, чтобы трафик до удаленной сети шел через соответствующий шлюз.
4.  Настроить мониторинг доступности туннеля (например, через ICMP-проверки или специфичные для решения метрики).