Привет, читатели!
Сегодня я, наконец, набрался смелости и имею время рассказать вам о замечательном сервисе, который предоставляет Amazon Web Services: Virtual Private Cloud — VPC.
VPC — это сервис, позволяющий создавать приватные изолированные сети в публичном облаке Amazon. Что же предоставляет VPC?
- Подсети серых адресов
- Полный контроль над адресами
- Динамическое и удобное управление сетевыми устройствами и маршрутизацией
- Поддерживает EC2, RDS, SQS, ElastiCache и другие сервисы
- Многое другое..
У VPC есть много внутренних понятий и терминов, давайте я буду их описывать по мере настройки. И сегодня я вместе с вами настрою кроссзонную сеть для VPC для большей отказоустойчивости.
VPC
Итак, в консоли перейдём в VPC и создадим новое приватное облако:
Для примера я выбрал шестнадцатую подсеть 10.50.0.0, которая включает в себя 256*256 = 65536 адресов. Кстати, мы можем выбрать параметр Tenancy:
- по умолчанию
- отдельно
По умолчанию это как обычно — ваши инстансы поднимаются где-попало. А вот отдельная «квартирка» даёт возможность запускать инстансы близко, но за отдельную плату.
Subnetworks
Создали облако, теперь нужно создать подсети. Наше облако привязано к региону и может иметь множество подсетей (куда ж распихать 65к адресов-то?), а сами подсети уже привязаны к регионам.
Так же подсети бывают:
- приватные — не имеют прямого доступа в Интернет, только через публичные сети и NAT
- публичные — могут иметь доступ в Интернет через Elastic IP и Internet Gateway
Итак, давайте создадим в одной зоне 2 подсети: приватную и публичную, а в другом только приватную, чтоб получилось так:
Приватной и публичной подсеть станет впоследствии, посему создём 3 простых подсети:
И в последствии имеем то, что хотели:
Internet Gateway
Как я упоминал ранее, публичная сеть может иметь прямой выход в Интернет через шлюз.
Интернет Шлюз представляет из себя виртуальный девайс, который пускает в интернет хосты, у которых есть Elastic IP (EIP). Давайте создадим шлюз и прицепим его к нашему облаку, чтоб было так:
Собственно, создаём шлюз:
Цепляем шлюз к облаку:
Route Tables
Как же теперь направить нашу публичную сеть на только что созданный шлюз? Для этого существуют маршруты.
Маршруты — это виртуальные маршруты, которые распространяются на одну или несколько подсетей, и дающие информацию, как должен распределяться трафик. Со стороны хостов, это никак не отображается. У них простой основной маршрут на первый (например 10.50.1.1) хост в подсети. VPC сама разруливает через Маршруты, куда пойдёт трафик.
По умолчанию при создании подсети создётся таблица маршрутизации, оставим её для приватных сетей и создадим новую:
Выделив новую таблицу, внизу страницы мы можем увидеть её составляющие. Давайте создадим роут на Интернет 0.0.0.0/24, который будет идти через наш Интернет Шлюз:
Ну и ассоциируем нашу публичную подсеть с этой таблицей:
Итак, давайте поднимем в нашей публичной подсети EC2 инстанс и дадим ему EIP, а приватный адрес поставим 10.50.3.254 (мы же можем их контролировать!!!), чтоб было так:
Начнём с создания инстанса в EC2. Собственно говоря, нужно поставить галку VPC и выбрать нужную подсеть:
Пока запускается инстанс, получим EIP для VPC.Там же где и обычно, только выбираем не EC2:
Network Interfaces
При создании нового инстанса в VPC автоматически создаётся сетевой интерфейс.
Сетевой интерфейс — это виртуальное устройства, с помощью которого можно управлять физическими интерфейсами инстанса. Управление сетевыми интерфесами проводится из консоли EC2.
Итак, посмотрим, что же у нас там появилось:
Теперь попробуем приассайнить интерфейсу новый приватный адрес:
Теперь у интерфейса виртуально есть 2 адреса. Ну и давайте приассайним к интерфейсу EIP:
Вот и всё, наш инстанс доступен снаружи:
$ telnet 107.23.210.139 22
Trying 107.23.210.139...
Connected to 107.23.210.139.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
NAT Instance
Как говорилось ранее, приватные подсети должны иметь доступ в интернет только через NAT. Так давайте наш новый инстанс сделаем таковым. Так же, я ставлю обычно OpenVP на этот инстанс, чтоб иметь доступ в VPC.
1. Разрешим форвардинг в /etc/sysctl.conf:
net.ipv4.ip_forward = 1
2. Разрешим форвардинг в iptables:
iptables -t filter -A FORWARD -s 10.50.0.0/16 -j ACCEPT
iptables -t filter -A FORWARD -d 10.50.0.0/16 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.50.0.0/16 -o eth0 -j MASQUERADE
Далее установим и настроим OpenVPN server. Итак, предположим, что мы всё сделали и можем законнектиться в сеть.
Private Networks
Как же приватные подсети смогут понять как им идти в интернет. Да легко! Всё те же маршруты. Возьмём оставшуюся таблицу и сделаем в ней изменения: выберем шлюзом наш NAT инстанс для Интернета 0.0.0.0/0:
Ну и проассоциируем эту таблицу с двумя оставшимися подсетями:
Закоючение
Вот и всё, теперь мы можем создавать инстансы в наших приватных подсетях, которые будут доступны только через OpenVPN. Напрямую к ним доступ можно открыть через Elastic Load Balancer, который выставлен наружу. Подсеть в последствии может принять вот такой вот простенький, но интересный вид:
В VPC есть ещё много нюансов, например VPN до вашего датацентра, который ментейнит сам AWS и ещё куча мелких деталей, но в общем вывод очевиден. С помощью VPC вы можете создать отказоустойчивое приватное облако на базе AWS.
Вопросы?
Автор: korjik