Я пытаюсь обдумать конфигурацию VPN типа "сеть-сеть" с помощью StrongSwan, которая позволит удаленным сайтам подключаться к нашему AWS VPC. Загвоздка в том, что удаленные шлюзы потенциально будут использовать ту же подсеть, что и VPC, и они не смогут выполнять какие-либо преобразования NAT на своей стороне, поэтому все это придется делать на шлюзе AWS.
Я столкнулся с поддержкой «виртуального IP» IKEV2 и StrongSwan, и я думаю, что сочетание правил IPTable может быть решением этой проблемы. Хотя у меня есть несколько вопросов относительно этой архитектуры, которые вы можете увидеть на следующей диаграмме. Я определил специальную подсеть в нашем VPC для подключенных удаленных VPN-устройств, это необходимо для того, чтобы у нас было доступное пространство, поскольку в другом месте VPC будет происходить много автомасштабирования.
В конце концов, какая бы архитектура я ни выбрала, она должна будет поддерживать несколько удаленных сайтов, которые все подключаются к нашему VPC.
Предполагая, что ответ на вопрос №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? Как лучше всего отслеживать это отображение?
Мне нравится идея специальной подсети «Mapped VPN Subnet», потому что я могу отслеживать доступное мне пространство. Однако, по вашему мнению, не делает ли такой подход слишком сложную топологию? Другой вариант - отказаться от этой подсети и просто использовать пулы виртуальных IP-адресов.
Предполагая, что ответ на вопрос № 3 - да,
Правила,
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-адресов!?!?