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

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

Комментарии 20

    +2
    Зачем «OpenVPN Legacy Service», если есть «OpenVPNService», без всякого Legacy?
    Ну и скачивать Chrome только для того, чтобы узнать IP это как-то странно.
      0
      По дефолту стоит IE. Мне с ним неудобно.
      +2
      Если уж на винде поднимать, то лучше IKEv2, чем городить огород с OpenVPN.
        0
        OpenVPN позволяет подключить любые устройства. Я делал для android.
        +7
        Самое главное чего не хватает данной статье это хоть какого-то ответа на вопрос — зачем поднимать OpenVPN на Windows Server?
          +1
          Думаю человек просто не знаком с *nix и не хочет разбираться, хотя в эпоху докера вся установка и настройка сводится к паре команд. А вот зачем OpenVPN, если все равно используется Routing and Remote Access и правда не ясно.
            0
            Неправильно думаете. Знаком, поднял много на *unix. Захотелось на Windows в качестве эксперимента.
            Плюс нет заморочек с iptables
          +2
          В чем же дело? Дело в NAT.

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

          вы путаете банальный NАТ средствами ОС, в Linux например, это одно правило iptables с NAT решением для private subnet в контексте Amazon.

          P.S.
          из статьи я так и не понял, зачем поднимать openvpn на Windows? У этого решения есть какие то преимущества по сравнению с Linux вариантом? Кроме того, за Windows надо будет платить
            0
            Преимуществ? Думаю нет, просто мне удобно на Windows. На амазоне Windows так же бесплатен, как ли ubuntu
              0
              Делал в качестве эксперимента. Хотелось сделать чтобы было удобно. На unix мне «некомфортно», когда вся инфраструктура на Windows, от терминалов до серверов БД.
              p.s. все упёрлись в unix, windows тоже хорошая платформа.
            +1
            Мда, картинка про буханку и троллейбус, похоже, имеет шанс обрести новый смысл…
              0

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


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

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

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


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

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

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

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

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

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

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое