IPsec с AmazonVPC в обход стандартных средств

в 4:38, , рубрики: ipsec, Облачные вычисления, системное администрирование, метки:

Вводная и условия задачи

У нас есть 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

* - обязательные к заполнению поля