Назад | Перейти на главную страницу

Виртуальный пул IP-адресов для NAT с StrongSwan VPN

Я пытаюсь обдумать конфигурацию VPN типа "сеть-сеть" с помощью StrongSwan, которая позволит удаленным сайтам подключаться к нашему AWS VPC. Загвоздка в том, что удаленные шлюзы потенциально будут использовать ту же подсеть, что и VPC, и они не смогут выполнять какие-либо преобразования NAT на своей стороне, поэтому все это придется делать на шлюзе AWS.

Я столкнулся с поддержкой «виртуального IP» IKEV2 и StrongSwan, и я думаю, что сочетание правил IPTable может быть решением этой проблемы. Хотя у меня есть несколько вопросов относительно этой архитектуры, которые вы можете увидеть на следующей диаграмме. Я определил специальную подсеть в нашем VPC для подключенных удаленных VPN-устройств, это необходимо для того, чтобы у нас было доступное пространство, поскольку в другом месте VPC будет происходить много автомасштабирования.

В конце концов, какая бы архитектура я ни выбрала, она должна будет поддерживать несколько удаленных сайтов, которые все подключаются к нашему VPC.

  1. Прежде всего, эта архитектура кажется разумной в данной ситуации или есть лучший способ добиться этого полностью?

Предполагая, что ответ на вопрос №1 - да,

  1. Будет достаточно легко определить виртуальную подсеть так, чтобы она не перекрывалась с моим VPC (10.0.0.0/16) или удаленным сайтом (10.0.0.0/16), скажем, я вручную выбираю 11.0.0.0/24. Как мне отслеживать, кто есть кто в виртуальном пуле? Адреса просто отображаются 1-к-1, например, 10.0.0.15 -> 11.0.0.15? Как лучше всего отслеживать это отображение?

  2. Мне нравится идея специальной подсети «Mapped VPN Subnet», потому что я могу отслеживать доступное мне пространство. Однако, по вашему мнению, не делает ли такой подход слишком сложную топологию? Другой вариант - отказаться от этой подсети и просто использовать пулы виртуальных IP-адресов.

Предполагая, что ответ на вопрос № 3 - да,

  1. Каков наилучший способ реализации правил NAT IPTable, которые адресованы в виртуальном пуле, PRE / POST маршрутизируются в «подключенную подсеть VPN». Что-то вроде этого?

Правила,

iptables -t nat -A PREROUTING -d <virtual address> -j DNAT --to-destination <mapped vpc address>

iptables -t nat -A POSTROUTING -d <mapped vpc address> -j SNAT --to-source <virtual address>

После некоторого базового тестирования, похоже, что отображение удаленной подсети на виртуальную подсеть не однозначно. Я также не могу отобразить всю подсеть, вместо этого отображается только удаленный шлюз.

Конфигурация локального шлюза

config setup
        charonstart=yes
        plutostart=no

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev2
        authby=secret

conn testConn
        leftid=%any
        left=10.0.0.11
        leftsubnet=10.0.0.0/16
        leftfirewall=yes
        right=%any
        rightsourceip=16.16.0.0/16
        rightsubnet=10.0.0.0/16
        auto=add

Конфигурация удаленного клиента

config setup
        charonstart=yes
        plutostart=no

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        keyexchange=ikev2
        authby=secret

conn testConn
        left=%any
        leftsourceip=%config
        leftsubnet=10.0.0.0/16
        leftid=%any
        leftfirewall=yes
        right=<Gateway Public IP>
        rightsubnet=10.0.0.0/16
        rightid=%any
        auto=start

Бревна Харона

charon: 04[IKE] peer requested virtual IP %any
charon: 04[CFG] assigning new lease to '10.0.0.10'
charon: 04[IKE] assigning virtual IP 16.16.0.1 to peer '10.0.0.10'

Как, черт возьми, мне подключить всю удаленную подсеть к виртуальному пулу IP-адресов!?!?