Вводная и условия задачи
У нас есть Amazon VPC с несколькими подсетями.
Внутри VPC разбита на несколько подсетей.
Возьмем две из них.
В первой (посеть 10.0.0.0/24), назовоем ее net1, маршрутизацию наружу осуществляет родной Амазоновский Internet Gateway, который для каждой подсети свой. К инстансам в этой сети можно привязывать Elastic IP и они будут работать.
Вторая (подсеть 10.0.1.0/24), пусть будет net2 — полностью закрытая подсеть, доступ из которой к внешним ресурсам возможен только посредством отдельного инстанса с настроенным на нем NATом (назовем его service). Прямого доступа к этой подсети извне, кроме как через какой-либо инстанс из net1, реализовать не получится. Сам service существует так же в net1.
Внутри VPC инстансы обоих подсетей видят друг друга.
Так же, есть офисная сеть, пусть она называется net0 (подсеть 192.168.5.0/24).
Появилась необходимость обеспечить защищенный доступ из офиса к инстансам в net1 и обратно. Это можно сделать нативным для Амазона способом — с помощью Virtual Private Gateway и сопустствующим ему сервисам. Но тут есть одна проблема — маршрутизация осуществляется посредством BGP, которого на пограничном маршрутизаторе офиса нет и не предвидится. На нем есть только чистый IPsec с авторизацией по паролю. В данной ситуации надо действовать через него.
Приходит в голову следующая схема реализации: на инстансе service, который имеет доступ Интернет и ко всем инстансам внутри net1, а так же обладает Elastic IP, развернуть клиента IPSec, соединиться с офисным маршрутизатором и настроить маршрутизацию между сетями.
Настройка инстанса
Родной инстанс, который поставляется Амазоном, в роли гейта я использовать не стал, уж больно он обрезанный, поэтому поставил Ubuntu.
Для того, чтобы сервер стал выполнять свою основную фунцию, надо, кроме настроек маршрутизации в панели управления VPC, настроить NAT на инстансе.
В данном случае — маскарадинг.
Делается это просто:
iptables -t nat -A POSTROUTING -o eth0 -s подсеть_vpc -j MASQUERADE
Теперь нам надо установить утилиты ipsec:
sudo aptitude install ipsec-tools
После окончания установки можно начинать настраивать.
sudo nano /etc/ipsec.conf
Для авторизации по ключу конфигурация выглядит следующим образом:
config setup
nat_traversal=yes
plutodebug="all"
protostack=netkey
conn home
left=%defaultroute # так и должно быть, это не сноска
leftsubnet=%net1_network%
leftid=%instance_ip%
leftnexthop=%vpc_gateway%
right=%dst_ip%
rightid=%dst_ip%
rightsubnet=%dst_net%
authby=secret
ike=3des-sha1-modp1024 # у вас может быть другой тип
esp=3des-sha1-96 # может быть другой тип
pfs=yes
forceencaps=yes
auto=start
В файле /etc/ipsec.secret пишем:
%instance_ip% %dst_ip%: PSK "YOUR_AUTH_KEY"
Где:
1. %net1_network% — подсеть, которую вы анонсируете для доступа из net0. В моем случае это 10.0.1.0/24.
2. %instance_ip% — ip инсанса service, на котором вы все это настраиваете.
3. %vpc_gateway% — роутер по умолчанию для вашего VPC. Указан как дефолтный маршрут в таблице маршрутизации инстанса service.
4. %dst_ip% — ip роутера net0, на который вы будете соединяться.
5. %dst_net% — анонсируемая для net1 офисная сеть. В данном случае — 192.168.5.0/24.
Алгоритмы шифрования выставляем по вкусу, как Вам угодно.
Не забудте изменить настройки NAT на следующие, дабы исключить нат на ненужном нам направлении:
iptables -t nat -A POSTROUTING -o eth0 -s подсеть_vpc ! -d %dst_net% -j MASQUERADE
Настройку второй стороны я опущу, так как там все специфично в зависимости от железки. У меня на Asus делается достаточно просто в полностью визуальном режиме за 2 минуты.
После этого
sudo /etc/init.d/ipsec restart
Все должно завестись.
Если нет — по ситуации. Частая проблема — несовпадение шифрования.
В общем то это все, что я хотел рассказать.
Удачной настройки!
Автор: onlinehead