company_banner

Гайд: Свой собственный L2TP VPN

  • Tutorial
Покопавшись по просторам интернета в поисках софта для построения своего собственного VPN, постоянно натываешься на кучу гайдов связанных с неудобным в настройке и использовании OpenVPN, требующим проприетарного клиента Wireguard, только один SoftEther из всего этого цирка отличается адекватной реализацией. Но мы расскажем, так сказать, о нативной для Windows реализации VPN – Routing And Remote Access (RRAS).

По странной причине, никто ни в одном гайде не написал про то, как это все развернуть и как включить на нем NAT,  поэтому мы сейчас все исправим и расскажем, как сделать свой собственный VPN на Windows Server.

Ну а уже готовый и преднастроенный VPN можно заказать из нашего маркетплейса, он кстати работает из коробки.



1. Устанавливаем службы


Сначала, нам понадобится Windows Server Desktop Experience. Установка Core нам не подойдет, ибо отсутствует компонент NPA. Если компьютер будет членом домена, можно остановиться и на Server Core, в таком случае все это дело можно уложить в гигабайт ОЗУ.

Нам нужно установить RRAS и NPA (Network Policy Server). Первый нам понадобится для создания туннеля, а второй нужен в случае если сервер не является членом домена.



В выборе компонентов RRAS выбираем Direct access and VPN и Routing.



2. Настраиваем RRAS


После того, как мы установили все компоненты и перезагрузили машину, нужно приступить к настройке. Как на картинке, в пуске, находим диспетчер RRAS.



Через эту оснастку мы можем управлять серверами с установленным RRAS. Жмем правой кнопкой мыши, выбираем настройку и переходим.



Пропустив первую страницу переходим к выбору конфигурации, выбираем свою.



На следующей странице нам предлагается выбрать компоненты, выбираем VPN и NAT.



Далее, далее. Готово.

Теперь нужно включить ipsec и назначить пул адресов, который будет использовать наш NAT. Жмем правой кнопкой мыши по серверу и переходим в свойства.



Первым делом вводим свой пароль для l2TP ipsec.



На вкладке IPv4 обязательно нужно установить выдаваемый клиентам диапазон ip адресов. Без этого NAT не заработает.





Теперь осталось добавить интерфейс за NAT. Переходим в подпункт IPv4, жмем правой кнопкой мыши по пустому месту и добавляем новый интерфейс.





На интерфейсе (тот который не Internal) включаем NAT.



3. Разрешаем правила в брандмауэре


Тут все просто. Нужно найти группу правил Routing and Remote Access и включить их всех.



4. Настраиваем NPS


Ищем в пуске Network Policy Server.



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



5. Подключаемся по VPN


Для демонстрационных целей выберем Windows 10. В меню пуск ищем VPN.



Жмем на кнопку добавления подключения и переходим в настройки.



Имя подключения задавайте какое вам хочется.
IP адрес – это адрес вашего VPN сервера.
Тип VPN – l2TP с предварительным ключом.
Общий ключ – vpn (для нашего образа в маркетплейсе.)
А логин и пароль — это логин и пароль от локального пользователя, то есть от администратора.



Жмем на подключение и готово. Вот и ваш собственный VPN готов.



Надеемся, наш гайд даст еще одну опцию тем, кто хочет сделать свой собственный VPN не связываясь с Linux или просто хочет добавить шлюз в свою AD.



RUVDS.com
RUVDS – хостинг VDS/VPS серверов

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

    +8

    Зачем вы везде win server запихиваете? L2TP вроде как и на линукс без особых бубнов поднимается. И памяти 512 вполне хватит.


    А делать vpn сеть в диапазоне 192.168.0.0 — нормально? Я всегда для впн выбираю адреса поэкзотичнее. Клиент сможет разрулить свою наиболее вероятную 192.168.0.0/24 и такую же у vpn?

      0
      вот да, тем кто для ВПН использует дефолтные диапазоны типа 192.168.0.0 в аду уже давно приготовлен специальный котел!
      +5
      Блеать, еще в универе было системное администрирование винды на целый семестр.

      Лекции препода представляли собой такую же гору скриншотов без какого-либо понимания происходящего.

      Самое топовое было Windows Deployment Services настраивать — препод считал высшим искусством администрирования окон установку винд на внешние клиенты по сети.

      Слыхал, что всякие официально (с) принятые администраторы по таким скриншотам свои экзамены сдают, но это не точно.

      Это рак.
        –4

        Выражаясь и опускаясь на ваш уровень дискуссии ->
        Потушите задницу, ничего зашкварного в серверах на Windows нет, кроме автоматического butthurt от слепо фанатеющих «правильной» ОС, которых еще больше разрывает при конкретных вопросах.
        Только вот не нужно начинать «каждый программист должен уметь админить Linux» и прочее «на хабре сидишь, а осилил только винду мышкой настраивать».
        Ну и проблемы вашего препода — это лишь проблемы вашего препода.

          +6
          Я ни разу в своем сообщении не указал, что админить Винды — плохо. Я сказал, что подход, подразумевающий бездумную расстановку галочек в диалогах с нажатием «далее» — некорректный и вредный для тех, кто его использует.

          Как пример из этой же статьи — гайд поможет настроить VPN, но при этом не имеет ни капли информации о том, что же происходит под капотом. Что такое NAT, что такое эти серверные роли, что за компонент NPA, зачем он нужен и что он делает? Какие ошибки могут возникнуть в процессе выполнения этого гайда, и что делать в случае их возникновения?

          Ни ссылок, ни объяснений подобный формат не имеет. На выходе получаются «администраторы», которые умеют быстрее всех прокликать десяток окон, но понятия не имеют, что делать, если в пункте 2.31 очередной инструкции вдруг вывалилось текстовое сообщение с ошибкой, да еще и на английском, который они читать толком не умеют.
            0
            Кек. Похоже, виндосисадмины в карму заехали =3

            А аргументированного ответа на претензии я чет не вижу. Буду считать, что слито =3
              0
              На выходе получаются «администраторы», которые умеют быстрее всех прокликать десяток окон, но понятия не имеют, что делать, если в пункте 2.31 очередной инструкции вдруг вывалилось текстовое сообщение с ошибкой, да еще и на английском, который они читать толком не умеют.

              Как по мне — это замечательно. Адекватной конкуренции меньше.
              Ещё есть такой момент, что попытки объяснять каждый существенный шаг требуют очень объемных пояснений, и статья или гайд получают риск перерости в книгу. Это вообще частая проблема далеко не только в айтишной сфере.

            +4
            Это частое явление: даже про Linux, Cisco — задача и набор команд без объяснения.
            0
            С L2TP-сервером не игрался, но имел негативный опыт с нативным L2TP-IPSec клиентом в Windows 10. Подключение где-то раз в сутки «зависало», невозможно было переподключиться, не помогал перезапуск служб. Приходилось перезагружать машину. Долго рылся в интернете, решения так и не нашёл. В итоге плюнул, и настроил клиента в линуксе, с тех порт работает нормально.
              +1
              Поделитесь, пожалуйста, ссылкой на внятный туториал, как из Linux без особых танцев с бубном подключиться к L2TP-IPSec серверу, пользуясь данными, ориентированными на подключение Windows клиентов. Информация для подключения представлена виндовым админом в следующем виде:
              Конфигурация для подключения VPN:
              Адрес: XXX.XXX.XXX.XXX
              Протокол: L2Tp Ipsec
              Ключ IPsec: XXXXXXXX
              Логин: XXXXXXXXXXXX
              Пароль: XXXXXXXXXXXX

              В windows действительно этого достаточно для подключения, в Linux же уже несколько раз делал попытки настроить подключение, но в итоге бросал, потратив кучу времени и так и не добившись желаемого. Спасите, осточертело уже запускать виртуалку только для того, чтобы на минуту заглянуть в сеть заказчика.

                  0
                  Завтра попробую сделать очередную попытку. Правда, в предыдущие безуспешные попытки делал, насколько помню, очень похоже на материал по первой ссылке. Но в любом случае — спасибо!
                    0
                    Вы бы ещё дистрибутив свой уточнили и версию. Есть инструкция по настройке через gui: www.tecmint.com/setup-l2tp-ipsec-vpn-client-in-linux
                      0
                      Дистрибутив — Debian:
                      serge78rus@pcdeb:~$ lsb_release -a
                      No LSB modules are available.
                      Distributor ID: Debian
                      Description:    Debian GNU/Linux 10 (buster)
                      Release:        10
                      Codename:       buster
                  0

                  Утилита для поднятия l2tp ipsec vpn из-под Линукса, причем с поддержкой смарт-карт.


                  https://github.com/Sander80/l2tp-ipsec-vpn


                  Статья для Хабра в процессе подготовки.

                    0
                    Спасибо обоим авторам, и по WinServ, и по Linux. Приятно видеть пошаговые инструкции с скриншотами по настройке актуальных ОС, а не тех что прадеды использовали.
                      0
                      Собрал, запустил, но в итоге получил то же самое, что и при прошлых попытках ручного конфигурирования strongswan.
                      В приводимом под катом логе адрес шлюза заменен на XXX.XXX.XXX.XXX, 192.168.2.160 - адрес моей машины.
                      июн. 09 14:16:39.708 Starting strongSwan 5.7.2 IPsec [starter]...
                      июн. 09 14:16:43.159 Security Associations (0 up, 0 connecting):
                      июн. 09 14:16:43.160   none
                      июн. 09 14:16:43.215 initiating Main Mode IKE_SA gaz_vpn[1] to XXX.XXX.XXX.XXX
                      июн. 09 14:16:43.215 generating ID_PROT request 0 [ SA V V V V V ]
                      июн. 09 14:16:43.215 sending packet: from 192.168.2.160[500] to XXX.XXX.XXX.XXX[500] (212 bytes)
                      июн. 09 14:16:43.215 received packet: from XXX.XXX.XXX.XXX[500] to 192.168.2.160[500] (208 bytes)
                      июн. 09 14:16:43.215 parsed ID_PROT response 0 [ SA V V V V V V ]
                      июн. 09 14:16:43.216 received MS NT5 ISAKMPOAKLEY vendor ID
                      июн. 09 14:16:43.216 received NAT-T (RFC 3947) vendor ID
                      июн. 09 14:16:43.216 received draft-ietf-ipsec-nat-t-ike-02\n vendor ID
                      июн. 09 14:16:43.216 received FRAGMENTATION vendor ID
                      июн. 09 14:16:43.216 received unknown vendor ID: fb:1d:e3:cd:f3:41:b7:ea:16:b7:e5:be:08:55:f1:20
                      июн. 09 14:16:43.216 received unknown vendor ID: e3:a5:96:6a:76:37:9f:e7:07:22:82:31:e5:ce:86:52
                      июн. 09 14:16:43.216 selected proposal: IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
                      июн. 09 14:16:43.216 generating ID_PROT request 0 [ KE No NAT-D NAT-D ]
                      июн. 09 14:16:43.217 sending packet: from 192.168.2.160[500] to XXX.XXX.XXX.XXX[500] (244 bytes)
                      июн. 09 14:16:43.217 received packet: from XXX.XXX.XXX.XXX[500] to 192.168.2.160[500] (260 bytes)
                      июн. 09 14:16:43.217 parsed ID_PROT response 0 [ KE No NAT-D NAT-D ]
                      июн. 09 14:16:43.217 local host is behind NAT, sending keep alives
                      июн. 09 14:16:43.217 generating ID_PROT request 0 [ ID HASH ]
                      июн. 09 14:16:43.217 sending packet: from 192.168.2.160[4500] to XXX.XXX.XXX.XXX[4500] (68 bytes)
                      июн. 09 14:16:43.218 received packet: from XXX.XXX.XXX.XXX[4500] to 192.168.2.160[4500] (68 bytes)
                      июн. 09 14:16:43.218 parsed ID_PROT response 0 [ ID HASH ]
                      июн. 09 14:16:43.218 IKE_SA gaz_vpn[1] established between 192.168.2.160[192.168.2.160]...XXX.XXX.XXX.XXX[XXX.XXX.XXX.XXX]
                      июн. 09 14:16:43.219 scheduling reauthentication in 3288s
                      июн. 09 14:16:43.220 maximum IKE_SA lifetime 3468s
                      июн. 09 14:16:43.220 generating QUICK_MODE request 2599120992 [ HASH SA No KE ID ID NAT-OA NAT-OA ]
                      июн. 09 14:16:43.220 sending packet: from 192.168.2.160[4500] to XXX.XXX.XXX.XXX[4500] (356 bytes)
                      июн. 09 14:16:43.220 received packet: from XXX.XXX.XXX.XXX[4500] to 192.168.2.160[4500] (76 bytes)
                      июн. 09 14:16:43.220 parsed INFORMATIONAL_V1 request 2823245258 [ HASH N(NO_PROP) ]
                      июн. 09 14:16:43.220 received NO_PROPOSAL_CHOSEN error notify
                      июн. 09 14:16:43.220 establishing connection 'gaz_vpn' failed
                      июн. 09 14:16:43.220 [ERROR  300]   'IPsec' failed to negotiate or establish security associations
                      


                      Если бы не уверенное подключение из Windows, то давно бы уже подумывал о проблемах на стороне шлюза, но ведь Windows подключается — прямо проклятие какое-то.

                      Кстати, заметил интересный баг у Вас: если в момент запуска l2tp-ipsec-vpn было установлено OpenVPN соединение (к совершенно другой сети, маршрутизация настроена на заворачивание туда только пакетов к определенной подсети и не влияет на интернет трафик), то l2tp-ipsec-vpn воспринимает это соединение за успешно установленное свое — выводит адрес своего шлюза вместе с информацией tun OpenVPN.
                        0
                        Интересно, спасибо за информацию, запишу в список моментов на изучение. Мелкий баг можно легко приструнить, а вот почему коннект не идет, это сложнее.
                        Вообще меня тоже поразило то, насколько это все сложно под Linux, когда под Windows настраивается прокликиванием пунктов меню. И сколько пришлось проделать танцев, чтобы привести найденную утилиту в современный вид.
                        Думаю, можно будет еще продолжить обсуждение, когда человек, который настраивал сервер, допишет инструкцию, я только на стороне клиента ковырялся до тех пор, пока на всех известных мне машинах и сетях оно не стало работать без шаманства.
                          0
                          Так ничего удивительного, если посмотреть сколько опций предусматривает конфигурация strongswan. А как у microsoft захардкожена эта куча параметров IPSec одному черту известно.
                  +2
                  Это экономически оправданно, на винде впн поднимать?
                    0
                    вдруг у них датцентр эдишен :) а там бесконечные патроны на виртуалках :)
                      0

                      я плачу за свой VPS $2.99 в месяц)

                      –4

                      Заглавная картинка в статье крайне нетолерантная !


                      1. Она олицетворяет сексизм — женщины унижаются перед мужчиной


                      2. Она насмехается над происходящими сейчас протестами по всему миру — BLM, когда вот так на одно колено встают wasp-ы перед афроамериканцами !



                      P.S. в предыдущем тексте пропущена обёртка тегом "юмор".

                        +5
                        > требующим проприетарного клиента Wireguard
                        Так ладно, читаем дальше и
                        > VPN на Windows Server.
                        Что-то не сходится. Как минимум ожидал увидеть какой-нибудь Linux, а лучше BSD, если есть запрос на отсутствие проприетарщины.

                        А что там за проприетарный клиент для wireguard? Есть же официальный и он норм работает.
                        Его можно найти вот здесь.
                        Если нужно, вот его исходный код github.com/WireGuard/wireguard-windows
                          0
                          неудобным в настройке и использовании OpenVPN, требующим проприетарного клиента Wireguard

                          Что-то я не понял мысль…
                          Для настройки OpenVPN есть куча подробных гайдов со скриншотами. И клиент есть у самого OpenVPN. Мне кажется он вполне прост в использовании.
                            0
                            Для настройки OpenVPN достаточно скачать скрипт и запустить его.
                              0

                              Вот именно!

                            +3
                            Виндовозный гайд с мышкокликаньем, серьезно? В 2020 это должны быть как минимум ansible-скрипты, да и вообще не винда.
                            А тем временем wireguard-клиенты сейчас есть вообще для всего, но нет, давайте использовать морально устаревший L2TP.
                              0
                              Как дела с распространением маршрутов?
                              или это для организаций с одним l2 сегментом?
                                0
                                Можно поднять DHCP на том же сервере и пушить маршруты через него.
                                0
                                Вот только не понял зачем NAT. У меня всё работает без него. Адреса удаленные клиенты получают от локального DHCP сервера, также как локальные машины. В настройках Ipv4 свойствах RRAS (что на картинке) указан протокол DHCP и интерфейс в локальную сеть.
                                  0

                                  За скриншоты — зачёт. Теперь могу по телефону консультировать страждущих, не имея W10 под рукой.

                                    0
                                    Хорошая статья, картинки класс. Юзер френдли, без powershell. Однако, возможно я параноик, не могу себе представить кейса, когда можно использовать l2tp без шифрования…
                                      0
                                      Некрасиво делать картинки ссылками на «левые» статьи, пусть и свои собственные (первая картинка в статье ссылается на статью о фондовом рынке).
                                        0
                                        Я собственный VPN (ipsec/l2tp) поднял на роутере Mikrotik. Плюсы в том, что можно разрулить разграничения по доступу еще на уровне сети. Можно даже порт l2tp сделать доступным только через тоннель ipsec. Сервера с windows лично мне очень стремно пускать напрямую во внешнюю сеть. Через VPN с контролем доступа на уровне сети как-то спокойнее.
                                        0

                                        Спасибо за статью!
                                        Всё доступно и без Powershell ))
                                        У меня VPN так настроен на VPS на Windows Server 2012 R2 (1CPU 1GbRAM 20GbSSD).
                                        Работает стабильно вот уже больше двух лет. Клиенты на Windows и Android довольны. Ничего не отваливается)


                                        Вот только на Mikrotik-е домашнем никак не могу L2TP/IPSec клиент настроить ((

                                          0
                                          Вы серьёзно?
                                          Ради роли, которая официально заброшена мс, ставить целый инстанс, причем ещё и с UI?
                                          Причем файрвола в этой службе нет, маршрутизации нормальной тоже толком нет.
                                          И это притом, что кроме голых *nix можно использовать готовые решения от pfSense до RouterOS CHR, которые в разы легче и функциональнее.
                                          Это стыдно должно быть такие статьи писать.

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

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