Поскольку мануалов я не нашел, захотелось разобраться самому и сделать связку Amazon EC2 based on Windows Server + OpenVPN + Android OpenVPN Client.
Поехали!
Статья не рассчитана на новичков, поэтому какие-то общие вопросы пропущены.
Описывать процесс регистрации на Amazon AWS не буду — это просто. Я раньше не регистрировался, поэтому был удивлен, что подтверждение приходит на номер телефона. Пишите рабочий номер. После прохождения регистрации идем в Dashboard https://console.aws.amazon.com/console/home
Топаем в меню Services > Compute > EC2 > Instances. Нажимаем Launch Instance чтобы открылся Wizard. В списке доступных AMI выбираем Microsoft Windows Server 2008 R2 Base — ami-59fc7439
На втором шаге выбираем доступный вариант t2.micro (Free tier) — его возможностей нам хватит с лихвой. Не спешим нажимать Launch — нажимаем Next:Configure Instance Details (предполагаю, что у вас по дефолту настроен VPC, есть дефолтные подсети и создан KeyPairs. Если ключи не созданы, то идём сначала в Dashboard > Key Pairs > Create. Ключ сохраняем себе куда-нибудь. К слову, я пересобрал с нуля VPC, оставив в нем только одну сеть 10.100.11.0/24).
Настройки оставляем по-умолчанию, а вот Auto-assign Public IP ставим Enable. Затем нажимаем на Preview and Launch. Ждем несколько минут, пока инстанст создается.
В Dashboard слева выбираем раздел Network & Security > Security 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 & Security > Security 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 Access > IPv4 > NAT. Создаем интерфейс: 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.
Комментарии (20)
dmitry_dvm
01.05.2017 11:55+2Если уж на винде поднимать, то лучше IKEv2, чем городить огород с OpenVPN.
Taciturn
01.05.2017 11:59+7Самое главное чего не хватает данной статье это хоть какого-то ответа на вопрос — зачем поднимать OpenVPN на Windows Server?
FeNUMe
01.05.2017 14:16+1Думаю человек просто не знаком с *nix и не хочет разбираться, хотя в эпоху докера вся установка и настройка сводится к паре команд. А вот зачем OpenVPN, если все равно используется Routing and Remote Access и правда не ясно.
BlackJackBander
06.05.2017 04:27Неправильно думаете. Знаком, поднял много на *unix. Захотелось на Windows в качестве эксперимента.
Плюс нет заморочек с iptables
ALexhha
01.05.2017 15:13+2В чем же дело? Дело в NAT.
В сети есть мануалы, как настроить NAT на Amazon, с созданием дополнительного AMI, Internet Gate, IP Elastic и прочим фуфлом. Ничего этого делать не нужно
вы путаете банальный NАТ средствами ОС, в Linux например, это одно правило iptables с NAT решением для private subnet в контексте Amazon.
P.S.
из статьи я так и не понял, зачем поднимать openvpn на Windows? У этого решения есть какие то преимущества по сравнению с Linux вариантом? Кроме того, за Windows надо будет платитьBlackJackBander
06.05.2017 04:28Преимуществ? Думаю нет, просто мне удобно на Windows. На амазоне Windows так же бесплатен, как ли ubuntu
BlackJackBander
06.05.2017 04:34Делал в качестве эксперимента. Хотелось сделать чтобы было удобно. На unix мне «некомфортно», когда вся инфраструктура на Windows, от терминалов до серверов БД.
p.s. все упёрлись в unix, windows тоже хорошая платформа.
Shaltay
01.05.2017 18:11+1Мда, картинка про буханку и троллейбус, похоже, имеет шанс обрести новый смысл…
immaculate
01.05.2017 18:46Я вообще зарегистрировался на AirVPN. Все равно платить и там, и там, только у AirVPN огромное количество серверов по миру, и прочие плюшки.
Раньше тоже свой OpenVPN сервер поднимал, но надоело заморачиваться.
ice2heart
02.05.2017 09:37Цены у них не гуманные и смотря зачем VPN, мне для защиты в публичных wifi хватает контейнера в облачной машинке, которая за 5$ в месяц делает ещё много всякого полезного.
immaculate
02.05.2017 10:14При покупке на несколько месяцев сразу, цены невысокие. Я для начала купил на полгода, кажется.
При этом для меня следующие преимущества:
- не надо ничего настраивать (да, я уже настраивал VPN на DigitalOcean и Linode, ничего сложного, но все равно напрягает)
- opensource клиент для подключения, выглядит страшненько, но работает, и не надо возиться с дурацким интерфейсом NetworkManager для настройки и подключения к VPN, при этом нет пикантной особенности NM, когда VPN может отвалиться незаметно, и будешь часами работать по открытому соединению, если не заметил, что замочек в трее исчез
- поддержка массы различных платформ, чтобы настроить VPN на Windows-ноутбуке подруги мне не надо изучать администрирование Windows, то же самое с настройкой VPN под Android
- поддержка массы различных серверов в куче различных стран
- поддержка всех возможных протоколов: OpenVPN, IKEv2, socks, и черт знает что еще
- дружное грамотное коммьюнити, где помогают друг-другу с решением проблем и обходом блокировок
Все это в совокупности мне кажется стоит тех небольших денег, что я за него плачу.
ice2heart
02.05.2017 10:20- Установка в докер контейнера это 2 команды, один раз выполнил и забыл
- Под виндой и линуксом запускается одной командой openvpn --config=<путь до конфига, который получаем на предыдущем этапе>
- Многопротокольность это хорошо, но зачем?
Все становится лучше сблютуДокером
А так да различные опции каждому по требованию.
Duss
06.05.2017 04:29В свое время поднимал VPN на Winwows без всяких OpenVPN.
И инструкция получилась бы попроще и подключение клиентов тоже без всяких OpenVPN (хотя, можно и им), штатными средствами WindowsBlackJackBander
06.05.2017 04:30Да это понятно. Я на микротике, к слову, поднимал все виды VPN. Но OpenVPN мне больше понравился.
Leshark2
06.05.2017 04:30Хотелось бы картиночек, просто текст очень сухо.
BlackJackBander
06.05.2017 04:32Как поднять сервер на амазон на Хабре много статей с картинками, да и там ничего сложного.
Сам OpenVPN поднимается так же без заморочек, очень просто и быстро.
Картинки, как поставить NAT, по сути и не нужны. С win2003 ничего не изменилось.
Taciturn
Зачем «OpenVPN Legacy Service», если есть «OpenVPNService», без всякого Legacy?
Ну и скачивать Chrome только для того, чтобы узнать IP это как-то странно.
BlackJackBander
По дефолту стоит IE. Мне с ним неудобно.