В сети много мануалов как поднять свой 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

Топаем в меню 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)


  1. Taciturn
    01.05.2017 11:53
    +2

    Зачем «OpenVPN Legacy Service», если есть «OpenVPNService», без всякого Legacy?
    Ну и скачивать Chrome только для того, чтобы узнать IP это как-то странно.


    1. BlackJackBander
      06.05.2017 04:25

      По дефолту стоит IE. Мне с ним неудобно.


  1. dmitry_dvm
    01.05.2017 11:55
    +2

    Если уж на винде поднимать, то лучше IKEv2, чем городить огород с OpenVPN.


    1. BlackJackBander
      06.05.2017 04:26

      OpenVPN позволяет подключить любые устройства. Я делал для android.


  1. Taciturn
    01.05.2017 11:59
    +7

    Самое главное чего не хватает данной статье это хоть какого-то ответа на вопрос — зачем поднимать OpenVPN на Windows Server?


    1. FeNUMe
      01.05.2017 14:16
      +1

      Думаю человек просто не знаком с *nix и не хочет разбираться, хотя в эпоху докера вся установка и настройка сводится к паре команд. А вот зачем OpenVPN, если все равно используется Routing and Remote Access и правда не ясно.


      1. BlackJackBander
        06.05.2017 04:27

        Неправильно думаете. Знаком, поднял много на *unix. Захотелось на Windows в качестве эксперимента.
        Плюс нет заморочек с iptables


  1. 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 надо будет платить


    1. BlackJackBander
      06.05.2017 04:28

      Преимуществ? Думаю нет, просто мне удобно на Windows. На амазоне Windows так же бесплатен, как ли ubuntu


      1. BlackJackBander
        06.05.2017 04:34

        Делал в качестве эксперимента. Хотелось сделать чтобы было удобно. На unix мне «некомфортно», когда вся инфраструктура на Windows, от терминалов до серверов БД.
        p.s. все упёрлись в unix, windows тоже хорошая платформа.


  1. Shaltay
    01.05.2017 18:11
    +1

    Мда, картинка про буханку и троллейбус, похоже, имеет шанс обрести новый смысл…


  1. immaculate
    01.05.2017 18:46

    Я вообще зарегистрировался на AirVPN. Все равно платить и там, и там, только у AirVPN огромное количество серверов по миру, и прочие плюшки.


    Раньше тоже свой OpenVPN сервер поднимал, но надоело заморачиваться.


    1. ice2heart
      02.05.2017 09:37

      Цены у них не гуманные и смотря зачем VPN, мне для защиты в публичных wifi хватает контейнера в облачной машинке, которая за 5$ в месяц делает ещё много всякого полезного.


      1. immaculate
        02.05.2017 10:14

        При покупке на несколько месяцев сразу, цены невысокие. Я для начала купил на полгода, кажется.
        При этом для меня следующие преимущества:


        • не надо ничего настраивать (да, я уже настраивал VPN на DigitalOcean и Linode, ничего сложного, но все равно напрягает)
        • opensource клиент для подключения, выглядит страшненько, но работает, и не надо возиться с дурацким интерфейсом NetworkManager для настройки и подключения к VPN, при этом нет пикантной особенности NM, когда VPN может отвалиться незаметно, и будешь часами работать по открытому соединению, если не заметил, что замочек в трее исчез
        • поддержка массы различных платформ, чтобы настроить VPN на Windows-ноутбуке подруги мне не надо изучать администрирование Windows, то же самое с настройкой VPN под Android
        • поддержка массы различных серверов в куче различных стран
        • поддержка всех возможных протоколов: OpenVPN, IKEv2, socks, и черт знает что еще
        • дружное грамотное коммьюнити, где помогают друг-другу с решением проблем и обходом блокировок

        Все это в совокупности мне кажется стоит тех небольших денег, что я за него плачу.


        1. ice2heart
          02.05.2017 10:20

          • Установка в докер контейнера это 2 команды, один раз выполнил и забыл
          • Под виндой и линуксом запускается одной командой openvpn --config=<путь до конфига, который получаем на предыдущем этапе>
          • Многопротокольность это хорошо, но зачем?

          Все становится лучше с блюту Докером
          А так да различные опции каждому по требованию.


  1. novoxudonoser
    01.05.2017 23:02

    когда не осилил linux


  1. Duss
    06.05.2017 04:29

    В свое время поднимал VPN на Winwows без всяких OpenVPN.
    И инструкция получилась бы попроще и подключение клиентов тоже без всяких OpenVPN (хотя, можно и им), штатными средствами Windows


    1. BlackJackBander
      06.05.2017 04:30

      Да это понятно. Я на микротике, к слову, поднимал все виды VPN. Но OpenVPN мне больше понравился.


  1. Leshark2
    06.05.2017 04:30

    Хотелось бы картиночек, просто текст очень сухо.


    1. BlackJackBander
      06.05.2017 04:32

      Как поднять сервер на амазон на Хабре много статей с картинками, да и там ничего сложного.
      Сам OpenVPN поднимается так же без заморочек, очень просто и быстро.
      Картинки, как поставить NAT, по сути и не нужны. С win2003 ничего не изменилось.