Pull to refresh

Поднимаем свой VPN-сервер на Amazon EC2 под Windows Server 2008 r2

Reading time 5 min
Views 26K
В сети много мануалов как поднять свой VPN-сервер на облаке Amazon AWS, но под unix-подобные системы, а вот как поднять его на Windows не рассматривается вовсе.

Поскольку мануалов я не нашел, захотелось разобраться самому и сделать связку Amazon EC2 based on Windows Server + OpenVPN + Android OpenVPN Client.

Поехали!

Статья не рассчитана на новичков, поэтому какие-то общие вопросы пропущены.

Описывать процесс регистрации на Amazon AWS не буду — это просто. Я раньше не регистрировался, поэтому был удивлен, что подтверждение приходит на номер телефона. Пишите рабочий номер. После прохождения регистрации идем в Dashboard https://console.aws.amazon.com/console/home

Топаем в меню ServicesComputeEC2Instances. Нажимаем Launch Instance чтобы открылся Wizard. В списке доступных AMI выбираем Microsoft Windows Server 2008 R2 Base — ami-59fc7439

На втором шаге выбираем доступный вариант t2.micro (Free tier) — его возможностей нам хватит с лихвой. Не спешим нажимать Launch — нажимаем Next:Configure Instance Details (предполагаю, что у вас по дефолту настроен VPC, есть дефолтные подсети и создан KeyPairs. Если ключи не созданы, то идём сначала в DashboardKey PairsCreate. Ключ сохраняем себе куда-нибудь. К слову, я пересобрал с нуля VPC, оставив в нем только одну сеть 10.100.11.0/24).

Настройки оставляем по-умолчанию, а вот Auto-assign Public IP ставим Enable. Затем нажимаем на Preview and Launch. Ждем несколько минут, пока инстанст создается.

В Dashboard слева выбираем раздел Network & SecuritySecurity Groups. Выбираем группу, которая ассоциирована с нашим инстансом. Снизу на вкладках Inbound,Outbound добавляем временно разрешения на пропуск всего трафика (alltraff).

На текущий момент там разрешен только RDP. Те, кто спешат, могут на обоих вкладках разрешить порт 1194 для OpenVPN и ICMP. Теперь, когда инстанс создан и работает, нам необходимо подключится к нему. Выбираем наш инстанс, нажимаем Connect.

Появляется окошко с предложением скачать RDP-файл и получить пароль. Скачиваем. Нажимаем Get Password, указываем наш файл ключа, дешифруем, получаем пароль. Первая половина дела завершена. Открываем RDP, соединяемся с хостом.

Перед нами — чистая ОС. Что нам нужно дальше?

1. Скачать Google Chrome, чтобы было удобнее проверять.
2. Скачать OpenVPN.
3. Поднять сервер с дефолтной конфигурацией.
4. Поднять NAT.

С первыми двумя пунктами проблем возникнуть не должно, разве что скачивать придется через IE. OpenVPN качаем с официального сайта (MSI), ставим с дефолтными настройками, ничего не меняем.

Через Chrome заходим на ipleak.net и проверяем свой IP. Он будет где-то в регионе США/Орегон. Как сделать сертификаты сервера и клиента для OpenVPN расписывать не буду, материалов достаточно по этой теме. Обязательно создаем PAM-файл (Диффи-Хеллман), без него сервер не запустится.

Ок, всё скачали, установили. На нашем сервере открываем Server Manager, идем в раздел Services. Находим службу OpenVPN Legacy Service, открываем её свойства — указываем Startup type: Automaticи запускаем службу. Это нужно, чтобы после рестарта нашего инстанса OpenVPN-сервер запускался сам.

Теперь открываем C:\Program Files\OpenVPN\config — туда скидываем ключи CA.key, server.key,ta.key и dh2048.pem и сертификаты CA и server. Открываем C:\Program Files\OpenVPN\sample-config и оттуда копируем файл server.ovpn в C:\Program Files\OpenVPN\config.

Перезаписываем содержимое like this:
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
# виртуальная сеть нашего VPN
server 172.10.10.0 255.255.255.0

ifconfig-pool-persist ipp.txt
keepalive 10 120

tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC

max-clients 100

persist-key
persist-tun

dev-node «HomeVPN»

#HomeVPN — это TAP, созданный при установке OpenVPN. Я его переименовал для удобства

#это нужно чтобы все клиенты могли маршрутизироваться без напрягов
push «route 0.0.0.0 0.0.0.0»

#указываем свои DNS, но это не обязательно
push «dhcp-option DNS 8.8.8.8»
push «dhcp-option DNS 8.8.4.4»

verb 3
explicit-exit-notify 1

Сохраняем.

Настройка сервера завершена. Выбираем server.ovpn, открываем контекстное меню, выбираем пункт Start OpenVPN on this config file.

После этого откроется терминал и пойдет процесс загрузки. Если все сделано правильно, то увидите в конце надпись Initialization Sequence Complete.

Теперь чтобы не было проблем с подключениями клиентов нужно сделать одну вещь (на выбор), либо в Windows Firewall пишем правила для пропуска трафика OpenVPN и разрешаем порт 1194, либо просто выключаем Firewall. Я выбрал второй пункт.

Теперь нужно создать конфигурацию клиента. Предполагается что на вашем клиенте (Android) установлен OpenVPN Client и в наличии все нужные сертификаты и ключи, в том числе клиентский.

Конфигурация клиента такая:
client
dev tun
proto udp
remote ххх-хх-ххх-ххх-ххх.us-west-2.compute.amazonaws.com 1194
resolv-retry infinite
route-method exe
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA1
verb 3
route 0.0.0.0 0.0.0.0 vpn_gateway

В OpenVPN для андройд импортируем конфигурацию. На вкладке Основные ставим тип аутентификации Сертификаты, т.к. пароля у нас в принципе нет. Проверяем вкладку Список серверов, должен быть указан ваш сервер Amazon, порт 1194 и тип UDP. На вкладке IP-адрес и DNS должна быть установлена опция Запрашивать параметры.

На вкладке Маршрутизация для IPv4 должна быть установлена опция Использовать маршрут по-умолчанию.

Сохраняем конфигурацию.

Пробуем подключиться к своему серверу. Если соединение не устанавливается, проверяем Network & SecuritySecurity Groups и фаерволл. Если всё ОК, то появится надпись SUCCESS и вы получите какой-либо из IP сети VPN. В моем случае это 172.10.10.6/30.

На клиенте пробуем открыть какой-нибудь сайт… Соединение вроде есть, а сайты не открываются.

В чем же дело? Дело в NAT.

В сети есть мануалы, как настроить NAT на Amazon, с созданием дополнительного AMI, Internet Gate, IP Elastic и прочим фуфлом. Ничего этого делать не нужно.

Всё гораздо проще.

Возвращаемся на наш сервер, создаем роль Network Police and Access Services. В нее входит роль Routing and Remote Access. Открываем контекстное меню, выбираем Configure and Enable.

Выбираем последний пункт, чтобы создать свою конфигурацию. На следующем шаге выбираем два последних пункта, NAT и LAN routing.

После раскрываем роль Routing and Remote AccessIPv4NAT. Создаем интерфейс: LAN1 — тот, что смотрит в интернет. В свойствах ставим Public interface и Enable NAT on this interface. Открываем вкладку Address Pool. Нажимаем Add.

Тут нам нужно добавить IP-адрес нашей машины, не своей сети, а именно машины (ipconfig /all)
Напоминаю, что моя сеть 10.100.11.0/24, сеть VPN 172.10.10.0/24, адрес машины 10.100.11.20. Start address указываем 10.100.11.20 и End address указываем его же. Маска 255.255.255.0

Сохраняем.

Теперь в этом же режиме нажимаем кнопку Reserve Addresses. Нам нужно «соединить» адрес клиента VPN (он при подключении был 172.10.10.6/30) с адресом машины.
Нажимаем Add

Reserve this public IP ставим 10.100.11.20, а графой ниже пишем 172.10.10.6
Опцию Allow incoming не ставим.

Сохраняем.

Теперь остался последний шаг — в NAT добавляем еще один интерфейс — TAP. Я его назвал у себя HomeVPN. Для него настроек нет, он Private Interface. NAT для него не ставим.

Таким образом получилась «переадресация» из VPN в LAN: 172.10.10.6 → 10.100.11.20.

На клиенте делаем реконнект, ждем когда VPN-поднимется, открываем ipleak.net и смотрим.

IP-адрес на клиенте будет в регионе USA/Oregon, а IP-адрес WebRTC должен будет показать IP адрес нашего VPN-сервера, т.е. 172.10.10.6.

Если всё так, значит у вас получилось. Если не так, значит на каком-то шаге вы ошиблись, либо поспешили.

В заключении, идем в Dashboard → раздел Network & Security → Security Groups. Выбираем группу, которая ассоциирована с нашим инстансом. На вкладках Inbound,Outbound убираем разрешения на пропуск всего трафика. Оставляем RDP, и кто не сделал ранее, добавляем правила для порта 1194 и разрешаем ICMP.

За сим — всё. Благодарю.

P.S. На Windows-клиентах не тестировал, но думаю, всё должно быть также, как на android.
Tags:
Hubs:
+2
Comments 21
Comments Comments 21

Articles