Openvpn сервер windows или linux

OpenVPN: создание сервера на Windows

Openvpn — виртуальная частная сеть. С ее помощью мы можем:

  • Создать защищенный канал свзяи, в то время, когда мы сидим с бесплатного Wi-Fi в кафе.
  • Обмениваться файлами между участниками сети.
  • Раздавать интернет испульзуя общий шлюз.

Основные преимущества:

  • Простота настройки.
  • Безопасность.
  • Не требует дополнительного оборудования.
  • Высокая скорость и стабильность.

Как и автор статьи об установке OpenVPN на Linux, я не нашел нормальной статьи, да еще и такой, чтоб описывалось все до мелочей. В этой статье на Хабрахабре я постараюсь максимально доступно все объяснить. Итак, поехали!

Скачиваем дистрибутив.

На момент написания статьи доступная версия 2.3.2. Качаем отсюда Windows installer 32-х или 64-х битную версию под разрядность вашей операционной системы.

Установка.

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

Создание сертификатов и ключей.

Когда-то этот пункт меня останавливал, мол ну их эти ключи, пойду поищу что попроще. Но, увы, ничего лучшего не нашел. Итак, переходим в C:\Program files\OpenVPN\easy-rsa, запускаем init-config.bat, появится vars.bat, открываем его в блокноте. Нас интересуют строчки в самом низу, их нужно заполнить как угодно. Например:
set KEY_COUNTRY=RU
set KEY_PROVINCE=Baldur
set KEY_CITY=Piter
set KEY_ORG=OpenVPN
set KEY_EMAIL=my@sobaka.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=ouou

Там где написано server не трогаем. Сохранили.
Теперь открываем openssl-1.0.0.cnf и ищем строчку default_days 365, ставим 3650. Это продлит жизнь наших сертификатов на 10 лет. Сохраняем. Далее открываем командную строку в пуск-стандартные-командная строка (на Windows Vista/7/8 от имени администратора), пишем последовательно:

cd C:\OpenVPN\easy-rsa
vars
clean-all

В ответ должно написать два раза «Скопировано файлов: 1». Значит, все окей. В этом же окне набираем:
build-dh
Создаст ключ Диффи-Хельмана.
build-ca
Создаст основной сертификат.
Будут заданы вопросы, просто нажимаем Enter пока не увидите путь C:\Program files\OpenVPN\easy-rsa. Далее набираем:
build-key-server server
На вопросы также жмем Enter, только не торопитесь! В конце будут два вопроса: «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?», на оба вопроса отвечаем Y. Теперь создадим сертификат клиента:
build-key client
Тут нужно быть вниметельней, при вопросе Common Name (eg, your name or your server’s hostname) нужно ввести client. В конце также два раза Y. Для каждого клиента нужно создавать новый сертификат, только с другим именем, например, build-key client1 и также указывать его в common name. Если все сделали правильно, можете выдохнуть! Самое сложное позади. В папке C:\Program Files\OpenVPN\easy-rsa\keys забираем: ca.crt, dh1024.pem, server.crt, server.key и кладем их в C:\Program Files\OpenVPN\config.

Создаем конфиги.

Переходим в C:\Program Files\OpenVPN\config, создаем текстовой документ, вставляем:
# Поднимаем L3-туннель
dev tun
# Протокол
proto udp
# Порт который слушает впн
port 12345
# Ключи и сертификаты
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
# Грубо говоря экономим адреса
topology subnet
# Пул адресов
server 10.8.0.0 255.255.255.0
# Метод шифрования
cipher AES-128-CBC
# Сжатие
comp-lzo
# Немного улучшит пинг
mssfix
# Время жизни клиентов, если не откликнулся — отключает
keepalive 10 120
# Уровень отладки
verb 3

Сохраняем файл как server.ovpn. Это наш конфиг сервера. Теперь пробуем запустить сервер. На рабочем столе будет ярлык OpenVPN Gui. После запуска в трее появится красный значок. Кликаем по нему дважды, если загорелся зеленым, значит, все хорошо, если нет, тогда смотрим лог в папке log.

Теперь конфиг клиента:
client
dev tun
proto udp
# Адрес и порт сервера
remote адрес 12345
# Ключи должны лежать в папке с конфигом
ca ca.crt
cert client.crt
key client.key
cipher AES-128-CBC
nobind
comp-lzo
persist-key
persist-tun
verb 3

Сохраняем как client.ovpn. Создаем любую папку и кладем туда конфиг client.ovpn и сертификаты ca.crt, client.crt, client.key которые лежат в C:\Program files\OpenVPN\easy-rsa. Сам клиент для Windows качаем здесь. На клиентской машине устанавливаем, переносим папку с конфигом и сертификатом и запускаем client.ovpn. Если подключились, пробуем в командной строке набрать ping 10.8.0.1. Пакеты пошли? Поздравляю! Сервер готов! Теперь идем в панель управления-администрирование-службы, ищем там OpenVPN, дважды щелкаем и выставляем автоматически. Теперь сервер будет сам стартовать после перезагрузки.

Дорабатываем конфиг или каждому свое.

Теперь я расскажу как раздавать интернет и другие мелочи связанные с настройкой. Начнем с мелочей. Все манипуляции будем проводить с конфигом сервера.
Если хотите, чтобы клиенты «видели» друг друга т.е. могли обмениваться информацией, тогда в конфиг впишите
client-to-client.
Если нужно, чтобы клиентам выдавались статические адреса, тогда в папке config создайте файл ip.txt и впишите в конфиг
ifconfig-pool-persist ip.txt
Неохота создавать каждому сертификаты? Тогда пишем duplicate-cn, но учтите, с этой опцией не работает ifconfig-pool-persist.
Теперь о конфиге клиента. Можно не передавать файлы сертификатов, а вписать сразу в конфиг, только делать это лучше не с блокнота, а с AkelPad’а или Notepad++ например. Открываем ca.crt и выделяем от ——BEGIN CERTIFICATE—— до ——END CERTIFICATE——. В конфиге будет выглядеть так:


——BEGIN CERTIFICATE——
сертификат
——END CERTIFICATE——

——BEGIN CERTIFICATE——
сертификат
——END CERTIFICATE——

——BEGIN PRIVATE KEY——
ключ
——END PRIVATE KEY——

Установка и настройка OpenVPN на Windows или Linux

Доброго времени суток, дорогие читатели. Сегодня поговорим про такие вещи, как установка и настройка OpenVPN .

В прошлых статьях (раз, два) я рассказывал о том, что такое VPN и как его проверить в деле.

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

Мы хотим подключиться к нашей домашней сети и использовать домашние же ресурсы. Дома у нас Windows , на работе/отдыхе/где-то еще у нас тоже Windows .

Мы хотим весь свой трафик передавать через домашний VPN сервер. Дома у нас Windows , на котором крутится виртуальная машина на Debian 8 . Который и будет выступать в роли VPN сервера.

А теперь рассмотрим эти примеры более детально.
Приступим.

Схема сети для первого VPN-примера

У нас сеть домашний компьютер на Windows 10 x64 , на нем развернута виртуалка на Debian 8 , которая будет использоваться в качестве файлового хранилища, и рабочий ноутбук на Windows 10 . Мы хотим с рабочего ноутбука подключиться к домашнему компьютеру и иметь доступ ко всем локальным ресурсам домашней сети.

На маршрутизаторе мы имеем внешний адрес 87.215.46.32 , внутренний адрес 192.168.1.1 . на домашнем компе мы имеем внутренний адрес 192.168.1.2 , а также 192.168.94.2 для подсети VMWare . На виртуальном компе мы имеем адрес 192.168.94.110 и именно этот адрес нам понадобится для удаленного доступа к серверу. В качестве VPN подсети я выбрал 10.10.20.0 с префиксом /24 (маска 255.255.255.0 ):

Теперь давайте приступим к настройке.

Установка и настройка VPN cервера на основе OpenVPN для первого примера

Скачиваем клиент отсюда (выбираем Installer (32-bit), Windows Vista and later или Installer (64-bit), Windows Vista and later ).

На этапе выбора куда, собственно, все это ставить, я бы рекомендовал указать директорию, у которой путь идет без пробелов (например C:\ ), т.к. могут быть проблемы с работой некоторых скриптов. На этапе выбора компонент обязательно указываем OpenSSL Utilities и OpenVPN RSA Certificate Management Scripts :

Устанавливаем. В процессе установки адаптера может появиться сообщение о необходимости установить VPN драйвер. Соглашаемся и жмем » Установить «:

Как только все установили, можно приступить к настройке.

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

Для того, чтобы создать защищенное соединение, в OpenVPN используется аутентификация на цифровых сертификатах стандарта Х.509 .

  • Цифровой сертификат представляет собой специальный файл, при помощи которого, например, сайт показывает, что ему можно доверять, или вы можете подписать сертификатом почтовое сообщение/документ и отправить его другому человеку, который по этому сертификату поймет, что файл действительно пришел от вас, а не от кого-то другого, и при этом он не был изменен;
  • Цифровой сертификат невозможно подделать, но можно попытаться подменить (но это легко определить, посмотрев кем был выдан такой сертификат). Любой сертификат веб-сайта или организации подписывается вышестоящим по иерархии сертификатом (сертификатом удостоверяющего центра).

При этом, существуют специальные организации, которые выдают сертификаты конечным потребителям. Такой сертификат есть у любого сайта, поддерживающего протокол HTTPS . Например, открываете сайт gosuslugi.ru и видите, что напротив HTTPS висит замочек:

Тыкаете на него и видите свойства сертификата. Можете там же просмотреть сам сертификат и узнать кем он был выпущен:

У VPN ситуация похожая. Но здесь не только у сервера есть сертификат, но и у клиента. Они обмениваются этими сертификатами и проверяют сертификат партнера с помощью сертификата УЦ (Удостоверяющего центра, которым у нас выступает сервер) и таким образом определяют что партнеру можно доверять.

Двигаемся далее — защищенное соединение

Так что для организации защищенного соединения между клиентом и серверов минимальный набор будет состоять из:

  • Сертификат УЦ ( CA );
  • Сертификат сервера;
  • Сертификат клиента;
  • Закрытый ключ УЦ;
  • Закрытый ключ сервера;
  • Закрытый ключ клиента;
  • Ключевая последовательность Диффи-Хеллмана. Про сам алгоритм я расписывать не буду, если есть желание, можно глянуть этот ролик. Там довольно простым языком рассказывают о нем 🙂
Читайте также:  Что за папка appdata local microsoft windows inetcache

Переходим в директорию с программой и идем в папку easy-rsa (у меня она находится в E:\OpenVPN\easy-rsa ).

Там у нас куча скриптов (которые у меня несколько криво работали), но я составил из них один скрипт (не люблю когда куча файлов), в котором есть всё необходимое и которым Можете воспользоваться и Вы.

Создайте текстовый файлик под названием, например, generate-all , вставьте туда следующее содержимое:

После этого сохраните скрипт как .bat файл (либо просто поменяйте ему расширение на .bat ).

Корректировки скрипта OpenVPN

Теперь надо внести некоторые корректировки в этот скрипт. Нас интересуют следующие строчки:

Где мы указываем папку с программой (путь).

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

Здесь (см.выше) мы указываем информацию для сертификатов (они у нас будут использоваться для аутентификации между сервером и клиентом). Можно использовать пробелы:

  • KEY_PROVINCE , — указываем что хотим или оставляем по умолчанию;
  • KEY_CITY , — ваш город (или любой город);
  • KEY_ORG , — название вашего ИП 🙂 (можно что угодно писать);
  • KEY_EMAIL , — указываем что хотим или оставляем по умолчанию;
  • KEY_CN , — название вашего сервера;
  • KEY_NAME , — указываем что хотим или оставляем по умолчанию;
  • KEY_OU , — указываем что хотим или оставляем по умолчанию;
  • PKCS11_MODULE_PATH, — указываем что хотим или оставляем по умолчанию;
  • PKCS11_PIN , — указываем что хотим или оставляем по умолчанию.

После этого сохраняем изменения и запускаем скрипт. При первом запуске вы увидите что было скопировано два файла. Так и должно быть. У вас создалась папка, в которой будут лежать сертификаты и ключи:

Вводим 1 и нажимаем Enter . Вас попросят ввести информацию о сертификате. Т.к. мы ее заполнили ранее, то просто нажимаете Enter , пока вам не напишет » CA certificate successfully created «:

Кому интересно что это за поля и где их увидеть:

  • Открываете папку keys (или как вы ее назвали), открываете ca.crt , переходите на вкладку » Состав » и щелкаете по опции » Издатель «:

Теперь нужно выпустить ключевую последовательность Диффи-Хеллмана. Вводим 2 и ждем, пока ключи сгенерируются:

После этого выпускаем сертификат для нашего сервера. Вводим 3 , далее нас попросят ввести имя сервера:

Далее методично нажимаем Enter пока не появится фраза » Sign the certificate? «, после чего нажимаем y и Enter . Появится вопрос: » 1 out of 1 certificate requests certified, commit? » на который мы отвечаем утвердительно. Сертификат готов.

Для клиента проделываем всё аналогично.

Конфигурация сервера OpenVPN

После этого настраиваем конфигурацию сервера, для чего переходим в папку config и создаем файл server.ovpn , куда вставляем следующее:

  • port 1120 , — номер порта, к которому будут подключаться клиенты;
  • proto tcp , — тип протокола ( tcp или udp ). TCP более медленный вариант, но если вы ходите через прокси-сервер, это единственный способ;
  • dev tun , — режим подключения ( tun или tap , туннель или мост). В общем-то режим моста нужен для специфических приложений (типа тех, что используют IPX протокол, им нужно отправлять broadcast сообщения и тп.). Обычно хватает туннельного режима;
  • dev-node OpenVPN , — название вашего адаптера (используется только для режима подключения tap ). Заходите в свойства сетевого адаптера и меняете название на то, которое вам больше нравится:
  • ca E:\\OpenVPN\\certs\\ca.crt , — путь до сертификата УЦ. Обратите внимание на наше воспитание. Пьянки, гулянки, диско и панки обратный слеш ( \ ) здесь указывается дважды;
  • cert E:\\OpenVPN\\certs\\barnak-SRV.crt , — путь до сертификата сервера;
  • key E:\\OpenVPN\\certs\\barnak-SRV.key , — путь до закрытого ключа сервера;
  • dh E:\\OpenVPN\\certs\\dh1024.pem , — путь до ключевой последовательности Диффи-Хеллмана;
  • server 10.10.20.0 255.255.255.0 , — виртуальная подсеть и маска вашего VPN соединения. Когда к серверу будут подключаться, то сетевой адрес вы получите именно из этого диапазона. При этом, первый адрес всегда использует сервер;
  • push «route 10.10.20.0 255.255.255.0 , — здесь указывается наша виртуальная подсеть. Эта команда нужна, чтобы при установлении соединения ваши VPN клиенты могли подключаться не только непосредственно к вам, но и к другим VPN компьютерам в вашей сети. При этом, таким образом можно добавлять несколько маршрутов;
  • keepalive 10 120 , — отвечает за проверку доступности партнера. Будет отсылать пинги каждые 10 секунд, если от партнера не получен ответ в течение 120 секунд;
  • cipher AES-128-CBC , — алгоритм шифрования. Оставляйте этот, он самый надежный из предлагаемых 🙂
  • comp-lzo , — сжимание данных через VPN соединение (для уменьшения трафика);
  • max-clients 10 , — сколько клиентов к вам может единовременно подключиться;
  • status openvpn-status.log , — название журнала, в котором будет краткая информация о том, кто подключился и т.п.:
  • verb 4 , — уровень детализации логов. Чем больше, тем выше детализация;
  • mute 20 , — Не выводить в логе больше 20 одинаковых сообщений (чтобы не засорять его);
  • sndbuf 0 , — буфер для отправленных пакетов. 0 означает, что OpenVPN будет использовать системные настройки, что обычно увеличивает вашу пропускную способность;
  • rcvbuf 0 , — буфер для полученных пакетов. Аналогично предыдущему.

Для более детального файла конфигурации можем перейти в папку sample-config и там открыть файл конфигурации текстовым редактором. Там есть комментарии к каждой опции.

После того, как вы подготовили файл настроек, применяем их, дважды кликая на файл. Откроется окно OpenVPN и начнет запускаться сервер:

Если у вас просто пустой экран, то откройте файл журнала ( \OpenVPN\log\;.log ). В нем будет написано почему VPN не запускается.

Настройка клиента OpenVPN для первого примера

С сервером мы закончили, теперь переходим к клиенту. Скачиваем все то же приложение, устанавливаем где нам удобнее. Переносим сертификат и ключ клиента, сертификат УЦ (у меня это: ca.crt, barnak-client.crt, barnak-client.key ) в любое удобное для вас место.

Заходим в папку Config (у меня это C:\Program Files\OpenVPN\Config ), создаем файл client.ovpn со следующим содержимым:

Что у нас появилось нового:

  • client , — означает, что мы являемся клиентом;
  • remote 89.215.46.32 1120 , — здесь указываем IP адрес (или DNS имя) нашего сервера и его порт;
  • resolv-retry infinite , — программа будет каждый раз узнавать IP адрес по DNS имени (если мы указывали DNS имя). Удобно тем, кто пользуется ноутбуками и не всегда подключен к сети;
  • nobind , — указываем, что мы не используем определенный локальный порт (т.е. программа будет выбирать случайный доступный порт);
  • ;http-proxy [proxy server] [proxy port #] , — если вы используете прокси, то уберите » ; «. Здесь можно указать адрес (или DNS имя) прокси сервера и его порт;
  • ;http-proxy-retry # retry on connection failures ,- переподключаться к прокси при обрыве связи. Также уберите » ; «, если вы собираетесь использовать прокси;
  • ns-cert-type server , — проверяем, что в сертификате сервера написано, что он сервер, а не клиент.

Теперь сохраняем настройки и запускаем VPN клиент. Через пару минут он подключится:

Следом настроим наше файловое хранилище.

Настройка файлового хранилища на базе Debian

Для начала отвечу на вопрос: «А почему линукс, а не винда?». Да просто на виртуалке его намного быстрее настроить и он меньше требует ресурсов. Есть еще более компактные дистрибутивы типа TinyCore (самый маленький дистрибутив, что я находил), которые вовсе занимают 30 MB оперативной памяти и 2 GB жесткого диска, но нам сейчас это не подходит 🙂

Подключаемся к Debian . Устанавливаем пакет Samba командой:

Создаем учетную запись для подключения к этому хранилищу командой:

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

Создаем папку, которая и будет выступать нашей общей директорией:

После чего настраиваем Самбу. Открываем файл конфигурации любым текстовым редактором:

Прокручиваем в самый низ и добавляем следующие строки:

  • [test share] , — название общей директории, которое будет отображаться в Windows ;
  • path , — пусть до общей папки;
  • valid users , — кто может подключаться к этой папке.

Ну и всякие настройки доступа, которые нам сейчас не интересны.

После этого перезапускаем сервис:

Если не помогло, то можно перезагрузиться (что тоже очень быстро).

Прописываем маршрут OpenVPN

Теперь самое главное. Мы не сможем подключиться к общей папке, пока не пропишем маршрут на Debian . Т.к. наш VPN клиент знает куда подключаться, а наша виртуалка не знает куда отвечать (если только ваш VPN сервер не является шлюзом по умолчанию для всех компов, к которым вы хотите подключаться).

В моем примере VPN сервер не является шлюзом по умолчанию, так что маршрут нужен.

Добавляем следующую строчку:

Эта команда означает, что мы хотим для любого адреса из сети 10.10.20.0 255.255.255.0 отправлять все пакеты на шлюз 192.168.94.2.

Теперь закиньте что-нибудь в общую папку или просто создайте текстовый файлик, чтобы проверить, что все доступно, например так:

После этого тестируем нашу общую папку:

Вводим учетные данные нашего Samba пользователя и видим, что всё доступно 🙂

А сейчас давайте несколько усложним задачу. Помимо файлового хранилища, мы хотим перенести наш VPN сервер на вторую виртуалку с Debian ( 🙂 ) и к тому же мы хотим, чтобы весь трафик шел через него.

Схема сети для второго примера VPN

У нас сеть домашний компьютер на Windows 10 x64 , на нем развернута виртуалка на Debian 8 , которая будет использоваться в качестве файлового хранилища, еще одна виртуалка, которая будет выступать VPN сервером, и рабочий ноутбук на Windows 10 . Мы хотим с рабочего ноутбука подключиться к VPN серверу и иметь доступ ко всем локальным ресурсам домашней сети.

Читайте также:  Обновить сетевое окружение windows 10

На маршрутизаторе мы имеем внешний адрес 87.215.46.32 , внутренний адрес 192.168.1.1 . на домашнем компе мы имеем внутренний адрес 192.168.1.2 , а также 192.168.94.2 для подсети VMWare .

На виртуальном клиенте мы имеем адрес 192.168.94.110 и именно этот адрес нам понадобится для удаленного доступа к нему. На виртуальном VPN сервере мы имеем адрес 192.168.94.100 . В качестве VPN подсети я выбрал всю ту же 10.10.20.0 с префиксом /24 (маска 255.255.255.0 ).

Собственно, теперь перейдем к настройке этого примера.

Настройка OpenVPN сервера для второго примера

Подключаемся к нашему серверу, входим под рутом и скачиваем openvpn:

После установки копируем скрипты в папку программы:

Далее переходим в папку /etc/openvpn/easy-rsa и открываем файл vars текстовым редактором. Здесь нас интересуют следующие опции:

Соответственно что делать с этими полями вы уже знаете 🙂

export KEY_SIZE=1024 — длина ключа. Можно указать 2048 , но особого смысла в этом не будет, только VPN медленнее станет работать.

Теперь эти переменные надо инициировать:

Мы получим предупреждение, что при запуске скрипта clean-all оно удалит все содержимое папки с ключами (а это папка с программой). Но нам ничего чистить не нужно, так что не обращаем внимания.

Теперь создаем сертификат УЦ:

После этого ключи DH :

Сертификат и ключи сервера:

Теперь создаем файл конфигурации сервера:

Добавляем туда следующее:

Из новых настроек здесь следующие:

  • persist-key , — позволяет избежать некоторых проблем с доступностью при понижении прав (только для Linux);
  • persist-tun , — аналогично;
  • client-to-client , — позволяет клиентам видеть друг друга. Без этой опции клиенты смогут видеть только сервер и его ресурсы, но не других клиентов (аналог AP Isolation );
  • log /var/log/openvpn.log , — где будет храниться журнал событий openvpn;
  • push «redirect-gateway def1 «, — добавляет клиентам маршрут к VPN серверу, чтобы весь трафик ходил через него.

Теперь, чтобы мы все-таки могли открывать сайты, будучи подключенным к VPN , надо на сервере прописать правило NAT:

Где 10.10.20.0/24 — ваша виртуальная VPN подсеть.

Сохраняем правило NAT в файл:

Теперь открываем текстовым редактором настройки сетевых интерфейсов:

И добавляем к интерфейсу eth0 (или какой вы используете) строчку для автозагрузки правила:

Вот как это выглядит у меня:

Это нужно для того, чтобы при перезагрузке сервера правила NAT не удалилось.

И последний штрих. нужно включить IP Forwarding . Без этого скорее всего ваш NAT не заработает. Открываем текстовым редактором файл /etc/sysctl.conf , находим строчку net.ipv4.ip_forward=1 , раскомментируем ее (либо выставляем 1 ) и применяем командой:

Теперь можно запускать OpenVPN . делается это довольно просто командой:

Теперь сервер настроен и переходим к клиенту.

Настройка VPN-клиента для второго примера

В общем-то здесь ничего нового. Только нужно предварительно стянуть ключи и сертификаты с нашего сервера. Я использовал для этого pscp. Пуск — Выполнить — CMD :

  • C:\Downloads\pscp — путь до программы;
  • -r — копировать каталоги;
  • -P 2200 — порт для подключения к виртуалке;
  • [email protected] — имя пользователя и адрес сервера;
  • /etc/openvpn/easy-rsa/keys/* — путь до ключей и сертификатов на сервере;
  • C:\Program Files\OpenVPN\keys\ — путь куда их копировать.

А дальше все, как в прошлый раз 🙂

Ну и.. На сим, пожалуй, можно переходить к послесловию.

Послесловие

Вот мы и добрались до конца c OpenVPN .

В общем-то настроить все это дело не так уж и быстро, но работает исправно и достаточно шустро. Если интересуют какие-то дополнительные опции, то есть замечательный хелп, в котором достаточно подробно описаны различные моменты.

Как и всегда, если есть какие-то вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.

PS: За существование оной статьи отдельное спасибо другу проекта и члену нашей команды под ником “ barn4k “.

Чет я не понял зачем такие сложности. А просто Team Viwer поставить не пойдет? Или уровень шифрование в нем не достаточно?

Через Teamviewer скорость будет крайне медленной, настроек VPN у него нет, какой трафик заворачивать, а какой нет — в нем не настроить, через прокси может не работать (если прокси блокирует все порты, кроме 80 и 443, то работать не будет), для телефона VPN не включить, и тп. Плюс надо держать комп с Teamviewer включенным все время, есть ограничение на кол-во клиентов. В то время, как OpenVPN можно поднять на своем маршрутизаторе без особых проблем и там гибкие настройки.

Совершенно не вариант.. Я бы даже сказал, что это вообще два разных подхода к самой сути даже 🙂

Ага, сильно-сильно.
Вот только вопрос. а разве нельзя обойтись одной реальной железкой, на которой будет стоять Debian и он будет выступать и VPN-сервером и Файловым хранилищем. или в одну корзину как говорится разные яйца не камильфо складывать.

Можно и на одной железке.
У меня настроен OpenVPN сервер на маршрутизаторе TPLINK WR1043ND V2, при этом я могу из любой точки мира подключиться по DNS имени и пользоваться всеми локальными ресурсами своей сети.

Смотря, как говорится, где и зачем 🙂

Спасибо за статью. Осталось освоить и попробовать 🙂

Лишь бы на пользу 🙂

фуф)) Классно, давно хотел от вас такую статью.
Но Дмитрий выше прав, надо осваивать..
Как-то оно с наскока страшно 🙂
Ну и про дебиан не понятно. Его же тоже устанавливать-настраивать?

Дебиан — это пример. OpenVPN можно поднять на чем вам удобнее, будь то Windows, Linux, Mac или ваш роутер

Спасибо за статью , обязательно попробую 🙂
Вопрос такой , ясли я пользуюсь не VMWare а VirtualBox , то в настройках машины в разделе Сеть какой тип подключения указывать ? И ещё насчет 24 порта это как-то связано с разными виртуалками или можно использовать по умолчанию ?

Тип подключения — NAT или Bridged. Лучше всего первое, меньше настраивать.
про 24 порта не понял. Если вы про префикс /24, то это маска сети, где может быть 254 устройства. По-умолчанию она и используется.

Спасибо за материал, очень полезно знать) Не могли бы разъяснить, в чем кардинальная разница между этими двумя примерами? В обоих случаях подключение к домашней сети идет через VPN-сервер, только в первом случае он крутится на физической машине с Windows 10, а во втором — на виртуалке под линуксом, правильно понимаю? В чем тогда принципиальные отличия?

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

Ага, понял. Спасибо)

А для чего вообще vpn в локальной сети? Что бы от подмены пакетов защититься? другой причины не вижу

Уже разобрался, почитав другие статьи

День добрый!
Подскажите пожалуйста по скрипту — «generate-all»

При его копировании и запуске, вылетает ошибка «quot» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.»

При игнорировании ошибки и дойдя до пункта 3, другая ошибка » Не удается найти C:\certs\*.old «

И да, путь с установленным openvpn в скрипте менял на set PATH=»C:\OpenVPN»
Менял эти самые » на ковычки, но тогда синтаксис не правильный пишет
Спасибо!

были проблемы с кодировкой некоторых символов в скрипте, сейчас исправили этот косяк, там не только с путями была проблема.

Немного подлатали, вытащили на главную.

Добрый день! Не работает скрипт, все равно ошибка на 2-3 пункте, дайте пожалуйста ссылочку на исправленный вариант.Заранее благодарен.

Создаю скрипт для первого примера. Есть проблема. На 3 и 4 пункте выскакивает ошибка. Подскажите в чем проблема.

Error opening CA private key «C:\OpenVPN»\certs/ca.key
3364:error:0200107B:system library:fopen:Unknown error:bss_file.c:406:fopen(‘»C:\OpenVPN»\certs/ca.key’,’rb’)
3364:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:408:
unable to load CA private key
Не удается найти C:\OpenVPN\certs\*.old

добрый день у меня такая же ошибка, подскажите пожалуйста в чем дело

Добрый день!
Проверяйте пути. В примере выше неверный путь указан: «C:\OpenVPN»\certs/ca.key
Не должно быть слешей(/) в разные стороны.

Править в каком файле? В скрипте вроде нет. Уточните пожалуйста! Не все шарят)

Поправьте пожалуйста скрипт) Ну сделайте доброе дело)))

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Can’t open «C:\OpenVPN»\certs/ca.key for reading, Invalid argument
4532:error:0200107B:system library:fopen:Unknown error:crypto/bio/bss_file.c:74:fopen(‘»C:\OpenVPN»\certs/ca.key’,’r’)
4532:error:2006D002:BIO routines:BIO_new_file:system lib:crypto/bio/bss_file.c:83:
unable to load CA private key
Не удается найти C:\OpenVPN\certs\*.old

Тоже самое. Менять в скрипте или opensыl ?

У вас откуда-то появляется неправильный слеш «/ca.key». Пришлите сам скрипт (.bat) в виде архива на почту [email protected], посмотрю.

Не хочет Вам письмо отправляться, выложил на Яндекс диск, посмотрите пожалуйста
https://yadi.sk/d/UrdbGEtb3aT257

Не хочет, потому что любой почтовик блокирует исполняемые файлы, поэтому лучше их всегда архивировать. Ответ в письме 🙂

Спасибо Вам огромное за помощь и энтузиазм.

Поддержать проект можно так — https://sonikelf.ru/helpme/ 🙂

За такую дельную статью и помощь можно и задонатить)На просторах сети чаще всего люди чужие статьи перезаливают, тут дело уникальное)))

Мы стараемся своё, обычно нас переливают 🙂

Если что, обращайтесь 🙂

Подскажи пожалуйста, в чем дело было?

Всё настроил, сервер подключается, получает ip 10.10.10.1. Клиент тоже подключается с ip 10.10.10.2.
Ping проходит и в одну и в другую сторону. Но сетевые папки не видно ни на сервере ни на клиенте.

Читайте также:  Как очистить папку windows temp

Подскажите где ошибка.

port 12122
proto udp4
dev tun
dev-node «OpenVPN»
dh C:\\OpenVPN\\certs\\dh1024.pem
ca C:\\OpenVPN\\certs\\ca.crt
cert C:\\OpenVPN\\certs\\SVR.crt
key C:\\OpenVPN\\certs\\SVR.key
server 10.10.10.0 255.255.255.0
cipher AES-128-CBC
status C:\\OpenVPN\\log\\openvpn-status.log
log C:\\OpenVPN\\log\\openvpn.log
client-config-dir «C:\\OpenVPN\\Cli»
verb 3
mute 20
max-clients 10
keepalive 10 120
client-to-client
comp-lzo
persist-key
persist-tun
route-delay 5
push «route 10.10.10.0 255.255.255.0»
push «redirect-gateway def1»
route-gateway 10.10.10.1
topology subnet

client
port 12122
proto udp4
dev tun
dev-node «OpenVPN»
remote *.*.*.* 12122
remote-cert-tls server
ca C:\\OpenVPN\\certs\\ca.crt
cert C:\\OpenVPN\\certs\\CLI-2.crt
key C:\\OpenVPN\\certs\\CLI-2.key
comp-lzo
persist-key
persist-tun
cipher AES-128-CBC
status C:\\OpenVPN\\log\\openvpn-status.log
log C:\\OpenVPN\\log\\openvpn.log
verb 3
mute 20

А сетевые папки где находятся? На сервере, клиенте или на каком-то другом компе?

Тогда никаких проблем не должно быть с доступом. Проверьте, что межсетевой экран не блокирует общий доступ.

А откуда вас в конфигурации сервера взялась команда «route-gateway 10.10.10.1»? Плюс строчку «proto udp4» поправьте на «proto udp», так же на клиенте уберите команды «port 12122», «remote-cert-tls server». Это серверные команды.

Так и не понял что блокировало доступ. Пришлось винду переустановить.
И всё ОК. Всё работает.
Спасибо за помощь!

Доброго времени суток. Подскажите, а как потом отозвать сертификат у клиента или заблокировать его.

Уже разобрался. Допилил скрипт:)

Can’t open «C:\OpenVPN»\certs/ca.key for reading, Invalid argument
9384:error:0200107B:system library:fopen:Unknown error:crypto/bio/bss_file.c:74:fopen(‘»C:\OpenVPN»\certs/ca.key’,’r’)
9384:error:2006D002:BIO routines:BIO_new_file:system lib:crypto/bio/bss_file.c:83:
unable to load CA private key
Не удается найти C:\OpenVPN\certs\*.old

Как решить данную проблему ?

req: Cannot open input file openssl-1.0.0.cnf, No such file or directory
req: Use -help for summary.
Using configuration from openssl-1.0.0.cnf
Can’t open openssl-1.0.0.cnf for reading, No such file or directory
4156:error:02001002:system library:fopen:No such file or directory:crypto/bio/bss_file.c:74:fopen(‘openssl-1.0.0.cnf’,’r’)
4156:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:81:
Не удается найти C:\OpenVPN\certs\*.old

А это если 3 пункт запускать от админа

Can’t open «C:\OpenVPN»\certs/ca.key for reading, Invalid argument
14660:error:0200107B:system library:fopen:Unknown error:crypto/bio/bss_file.c:74:fopen(‘»C:\OpenVPN»\certs/ca.key’,’r’)
14660:error:2006D002:BIO routines:BIO_new_file:system lib:crypto/bio/bss_file.c:83:
unable to load CA private key
Не удается найти C:\OpenVPN\certs\*.old

Установил сертификат в ручную, нечего, не выходит.

Добрый день!
Проверьте пути. У вас не в ту сторону смотрит слеш:
Can’t open «C:\OpenVPN»\certs/ca.key for reading

Подскажите где искать не правильно стоящий слеш?

Здравствуйте. Я так понял заработает это всё дело если у меня статический ip?

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

Доброго времени суток команда sonikelf.ru Интересует некая деталь конфигурации OpenVPN. При подключении клиента к серверу, и, прохождения Нннного количества трафика через OpenVPN сервер, сервер выдаёт ошибку MULTI: bad source address from client Весь трафик исходя из конфига сервера я перенаправляю через свою машину(OpenVPN) т.е. использую дерективу push «redirect-gateway def1» Если я исключаю эту дерективу, сервер не выдаёт ошибок. Но в моём случае важно завернуть весь трафик в тунель, и сделать чтобы клиентский трафик ходил без потерь.
————————————————————————————-
Параметры моей машины(OpenVPN) периферия и ПО:
-Windows 10 x64
-Роутер TP-Link Archer C 20
-Антивирус Eset Internet Security
————————————————————————————-
Работы которые производились на роутере:
-Резервирование ip
-Проброс UDP порта 1194 для зарезервированого ip (моей машины OpenVPN)
————————————————————————————-
Работы которые производились с антивирусом:
-Создано разрешающее правило для исходящего и входящего трафика программы OpenVPN по порту 1194( ip машины OpenVPN также вписан в это правило) (Протокол UDP также указан в правиле)
————————————————————————————-
Конфиг Сервера:

dev-node «svchost»
mode server

port 1194
proto udp
dev tun

tls-server
tls-auth C:\\OpenVPN\\config\\fa.key 0

ca C:\\OpenVPN\\config\\server\\ca.crt
cert C:\\OpenVPN\\config\\server\\svchost.crt
key C:\\OpenVPN\\config\\server\\svchost.key
dh C:\\OpenVPN\\config\\server\\dh2048.pem

server 10.10.10.0 255.255.255.0
topology subnet

route 10.10.10.0 255.255.255.0
route-gateway 10.10.10.1

push «redirect-gateway def1»
push «route 10.10.10.0 255.255.255.0»
push «dhcp-option DNS 8.8.8.8»
push «dhcp-option DNS 8.8.4.4»

route-delay 10
route-method exe

keepalive 5 120
client-to-client

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
comp-lzo yes

remote dojki.com
port 1194
dev tun
proto udp

tls-client
remote-cert-tls server
route-delay 2

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450

cipher AES-128-CBC
comp-lzo yes

——BEGIN PRIVATE KEY——

——END PRIVATE KEY——

——BEGIN OpenVPN Static key V1——

——END OpenVPN Static key V1——

Пришлите всю строку целиком, которая начинается на «MULTI: bad source address from client»

Tue May 29 00:12:19 2018 us=64085 ss/46.133.36.201 MULTI: bad source address from client [100.72.188.225], packet dropped

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

Я также в этом где то убежден, только вот вопрос, есть ли какой то рецепт решения подобных проблем?

Ммм. тут нужно понимание что куда ходит. У вас клиент ходит через VPN сервер к каким-то определенным ресурсам или в интернет? Клиент может обращаться к каким-то ресурсам мимо VPN сервера?
также пришлите вывод команды route print (windows) или route -n (linux) на клиенте и сервере

Клиент ходит в интернет, и не должен быть ничем ограничен, просто должен как бы идти через меня транзитом. В процессе теста, клиент видит общедоступные ресурсы розшарянные на сервере, с этим проблем нет. Также мной было протестировано много решений которые я вносил в client-config-dir C:\\OpenVPN\\ccd (сейчас эта деректива также есть, но она пустая, т.к. ничего из моих попыток не дали результата) по поводу ошибки Tue May 29 00:12:19 2018 us=64085 ss/46.133.36.201 MULTI: bad source address from client [100.72.188.225], packet dropped, а конкретно, задавал самые разные push route и iroute
——————————————————————————————————
Сейчас я слегка изменил конфиг сервера,думал может где то есть конфликт(Думаю не слишком принципиально) (опять же, всё проброшено по этим адресам)

dev-node «OpenVPN»
mode server

port 443
proto udp
dev tun

tls-server
tls-auth C:\\OpenVPN\\config\\fa.key 0

ca C:\\OpenVPN\\config\\server\\ca.crt
cert C:\\OpenVPN\\config\\server\\svchost.crt
key C:\\OpenVPN\\config\\server\\svchost.key
dh C:\\OpenVPN\\config\\server\\dh2048.pem

server 172.16.150.0 255.255.255.0
topology subnet

route 172.16.150.0 255.255.255.0
route 192.168.0.0 255.255.255.0
route-gateway 172.16.150.1

push «redirect-gateway def1 bypass-dhcp»
push «route 192.168.0.1 255.255.255.0»
push «route 192.168.0.0 255.255.255.0»
push «route 172.16.150.0 255.255.255.0»
push «dhcp-option DNS 8.8.8.8»
push «dhcp-option DNS 8.8.4.4»

route-delay 10
route-method exe

keepalive 10 120
client-to-client

tun-mtu 1500
tun-mtu-extra 32
mssfix 0
comp-lzo

cipher AES-128-CBC
verb 4
mute 20
sndbuf 0
rcvbuf 0
————————————————————————————————
В результате данная фича изминений не принесла =(
————————————————————————————————
Шлю route print с надеждой может вы подскажите решение задачи
Microsoft Windows [Version 10.0.17134.81]
(c) Корпорация Майкрософт (Microsoft Corporation), 2018. Все права защищены.

C:\Users\Сергей>route print
===========================================================================
Список интерфейсов
6. 0a 00 27 00 00 06 . VirtualBox Host-Only Ethernet Adapter
22. 34 23 87 fc 08 79 . Broadcom 802.11n Network Adapter
18. 36 23 87 fc 08 79 . Microsoft Wi-Fi Direct Virtual Adapter
11. 36 23 87 fc 00 79 . Microsoft Wi-Fi Direct Virtual Adapter #2
14. 20 1a 06 a0 52 cb . Qualcomm Atheros AR8172/8176/8178 PCI-E Fast Ethernet Controller (NDIS 6.30)
19. 00 00 db 34 92 1b . Evolve Virtual Ethernet Adapter
21. 00 ff c8 cb 27 bb . TAP-Windows Adapter V9
10. 34 23 87 fc 08 7a . Bluetooth Device (Personal Area Network)
1. Software Loopback Interface 1
===========================================================================

IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.109 35
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
172.16.150.0 255.255.255.0 On-link 172.16.150.1 291
172.16.150.1 255.255.255.255 On-link 172.16.150.1 291
172.16.150.255 255.255.255.255 On-link 172.16.150.1 291
192.168.0.0 255.255.255.0 On-link 192.168.0.109 291
192.168.0.0 255.255.255.0 On-link 172.16.150.1 36
192.168.0.109 255.255.255.255 On-link 192.168.0.109 291
192.168.0.255 255.255.255.255 On-link 192.168.0.109 291
192.168.0.255 255.255.255.255 On-link 172.16.150.1 291
192.168.56.0 255.255.255.0 On-link 192.168.56.1 281
192.168.56.1 255.255.255.255 On-link 192.168.56.1 281
192.168.56.255 255.255.255.255 On-link 192.168.56.1 281
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.56.1 281
224.0.0.0 240.0.0.0 On-link 192.168.0.109 291
224.0.0.0 240.0.0.0 On-link 172.16.150.1 291
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.56.1 281
255.255.255.255 255.255.255.255 On-link 192.168.0.109 291
255.255.255.255 255.255.255.255 On-link 172.16.150.1 291
===========================================================================
Постоянные маршруты:
Сетевой адрес Маска Адрес шлюза Метрика
255.255.255.255 255.255.255.255 On-link 1
224.0.0.0 240.0.0.0 On-link 1
===========================================================================

—————————————————————————————————
Может быть поможет инфа, мой ПК это постоянный(зарезервированный ip)
192.168.0.109
—————————————————————————————————
Роутер
192.168.0.1
————————————————————————————————-
Клиентский route print(клиент на другом провайдере, также ОС Windows, не суть, т.к. с под моего андроида также есть потери)
Список интерфейсов
13. 00 ff bf 37 1c d0 . TAP-Win32 Adapter V9 (Tunngle)
29. 00 ff 79 bb 9b c4 . TAP-Windows Adapter V9
2. bc ae c5 5d d2 1a . Realtek PCIe GBE Family Controller
9. 00 00 63 b3 8b 74 . Evolve Virtual Ethernet Adapter
1. Software Loopback Interface 1
3. 00 00 00 00 00 00 00 e0 Microsoft Teredo Tunneling Adapter
===========================================================================

IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.111 25
0.0.0.0 128.0.0.0 172.16.150.1 172.16.150.3 3
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
128.0.0.0 128.0.0.0 172.16.150.1 172.16.150.3 3
172.16.150.0 255.255.255.0 On-link 172.16.150.3 259
172.16.150.0 255.255.255.0 172.16.150.1 172.16.150.3 3
172.16.150.3 255.255.255.255 On-link 172.16.150.3 259
172.16.150.255 255.255.255.255 On-link 172.16.150.3 259
192.168.0.0 255.255.255.0 172.16.150.1 172.16.150.3 3
192.168.1.0 255.255.255.0 On-link 192.168.1.111 281
192.168.1.111 255.255.255.255 On-link 192.168.1.111 281
192.168.1.255 255.255.255.255 On-link 192.168.1.111 281
195.214.223.155 255.255.255.255 192.168.1.1 192.168.1.111 25
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.1.111 281
224.0.0.0 240.0.0.0 On-link 172.16.150.3 259
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.1.111 281
255.255.255.255 255.255.255.255 On-link 172.16.150.3 259
===========================================================================
Постоянные маршруты:
Сетевой адрес Маска Адрес шлюза Метрика
255.255.255.255 255.255.255.255 On-link 1
224.0.0.0 240.0.0.0 On-link 1
===================================================

Оцените статью