Для включения драйвера wintun необходимо в файле конфигурации сервера включить параметр

Обновлено: 05.07.2024

В бытовом случае в сетевых настройках вашего компьютера указан шлюз по умолчанию. Чаще всего устройство, являющееся шлюзом, называют "роутер" или "маршрутизатор" — через него идут все запросы на IP-адреса, которые не входят в вашу локальную сеть. Прокси-сервер (от англ. "уполномоченный" или "доверенный") также выступает посредником между вами и целевым сетевым ресурсом, но не является шлюзом по умолчанию, то есть для его использования в приложении нужно явно указать соответствующие параметры. Самый простой пример — доступ в сети I2P или Tor. Всю внутреннюю логику этих сетей обеспечивает отдельное приложение, которое предоставляет пользователю прокси-интерфейс для подключения. Указав нужный прокси в настройках веб-браузера, мы можем посещать сайты с доменными именами ".i2p" и ".onion", о которых обычный маршрутизатор даже не догадывается. Также прокси-сервисы набирают популярность для обхода блокировок: прописал в настройках браузера какой-нибудь прокси из либеральной страны и открываешь любые сайты, не зная духоскрепного маразма.

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

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


Tun2Socks

Суть работы Tun2Socks сводится к созданию виртуального сетевого адаптера, который операционная система будет воспринимать как обычный сетевой интерфейс. Вся информация, пришедшая на такой виртуальный адаптер, фактически будет передана внутрь Tun2Socks, который обеспечит необходимую логику дальнейшей передачи информации на прокси-сервер.

Информация об использовании утилиты при запуске с параметром --help :

Всё может показаться ясным с первого взгляда только бывалому админу, либо тому, кто ничего на самом деле не понял. При практическом знакомстве с Tun2Socks встает вопрос: если в системе создастся виртуальный сетевой адаптер, то как он станет шлюзом по умолчанию и нужно ли вручную задавать ему адрес. На помощь приходит документация.

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

Windows

Для начала необходимо скачать свежую версию Tun2Socks. Бинарники распространяются на странице релизов в официальном гит-репозитории проекта. Выберите один из пакетов, название которого начинается на tun2socks-windows . Если у вас 64-разрядная Windows на стареньком железе, вам наверняка подойдет tun2socks-windows-amd64.zip (так как архитектура ARM на старых машинах с Windows мне еще не встречалась).


После загрузки распакуйте архив в любое удобное место.

Tun2Socks создает виртуальный сетевой адаптер, но драйвер для этого (Wintun) нужно скачать отдельно. Вот прямая ссылка для загрузки версии Wintun 0.11. Рекомендую именно эту версию, так как с более новыми версиями в моем случае Tun2Socks v2.3.1 работать отказался. При желании, свежий релиз драйвера можно найти на официальной странице. Из всего архива вам понадобится только один файл wintun.dll , который надо взять из нужной директории в зависимости от вашей операционной системы. В случае архитектуры amd64, путь до нужной библиотеки выглядит так: wintun/bin/amd64/wintun.dll . Положите подходящий файл wintun.dll в директорию, где находится исполняемый файл Tun2Socks.

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

tun2socks-windows-amd64.exe является именем исполняемого файла Tun2Socks;

-device tun://gatewaytun определяет название нового виртуального сетевого интерфейса (gatewaytun);

-proxy socks5://10.10.100.1:1080 сообщает протокол (в моем случае это SOCKS5) и адрес прокси-сервера.

Этого достаточно, чтобы создать в системе новый сетевой интерфейс, но работать, как нам хочется, он пока что не будет. Для этого необходимо вручную присвоить новому сетевому интерфейсу IP-адрес и объяснить операционной системе, что он является шлюзом.

Присвоить интерфейсу IP-адрес и указать маску подсети можно через стандартный графический интерфейс Windows, но воспользуемся благами командной строки:

В примере виртуальному интерфейсу присваивается адрес 127.254.254.1 , но фактически это может быть любой частный адрес из подсети, которая, во-первых, не используется другими сетевыми адаптерами вашей операционной системы, во-вторых, не используется в локальной сети вашего предприятия или дома (иначе будет нарушена локальная маршрутизация). В большинстве случаев адрес из примера будет корректным значением (так как используется диапазон 127.0.0.1/8). В некоторых тестах Windows 10 отказывалась применять подобный адрес к интерфейсу. Если отказалась и у вас — воспользуйтесь чем-нибудь вроде 10.254.254.1. Итак, будем считать, что адрес виртуальному сетевому интерфейсу присвоен.

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

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

В примере указано правило маршрутизации в подсеть 10.10.100.0/24 , которая должна идти не через общий шлюз (gatewaytun), а через сетевой интерфейс, имеющий доступ к устройству с адресом 10.10.5.25 (которое является шлюзом в нужную подсеть). Это правило справедливо, во-первых, если нужно сохранить доступ в подсеть локальной сети, которая недоступна непосредственно и, во-вторых, что более важно — если в заданной подсети находится сам прокси-сервер, через который в дальнейшем пойдет весь наш трафик.

При домашнем использовании, когда нет никаких локальных подсетей, и всё, что требуется, это подключение к прокси-серверу через интернет-провайдера, приведенная выше команда заменяется этой:

11.11.11.11 — адрес прокси-сервера в интернете;

255.255.255.255 — маска, означающая, что в правило входит только адрес прокси-сервера;

10.10.5.25 — адрес шлюза в локальной сети, который вам предоставляет интернет-провайдер.

В примере адрес 1.1.1.1 является адресом DNS-сервера.

В итоге получается следующий набор команд:

Большинству пользователей ручное выполнение всех команд может показать неудобным. Такие люди могут поэкспериментировать с автоматизированными сценариями (батниками). Например, вписать все нужные команды в какой-нибудь start.bat и добавить его в автозагрузку. В батниках и правах доступа Windows я не силён. В напутствие лишь замечу, что все команды должны быть исполнены с правами администратора. Возможно, кто-то поделится красивым скриптом в комментариях.

Linux

Пользователи GNU/Linux (и других *nix-систем) в своем большинстве являются более компетентными в вопросах командной строки и системных настроек, поэтому местами пояснения будут более скудные (тем более, что суть происходящего уже подробно описана чуть выше). Практическая инструкция дана на примере Debian.

Бинарники для Linux есть среди прочих на странице релизов. Например, для Debian amd64 подойдет вариант tun2socks-linux-amd64.zip . Внутри архива находится один файл. После извлечения присвойте ему флаг исполняемости ( chmod +x tun2socks-linux-amd64 ) и положите в удобное место, например, /usr/sbin/ . Дополнительные драйвера для создания туннеля WireGuard в Linux не требуются — современные дистрибутивы поддерживают технологию на уровне ядра.

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

Команда запуска выглядит следующим образом:

-device tun://gatewaytun определяет название нового виртуального сетевого интерфейса (gatewaytun);

-proxy socks5://10.10.100.1:1080 сообщает протокол (в моем случае это SOCKS5) и адрес прокси-сервера.

После запуска Tun2Socks в системе создается новый сетевой интерфейс с заданным именем. Теперь необходимо откорректировать правила маршрутизации:

Настройки DNS в *nix-системах, как правило, являются глобальными, поэтому нет нужды указывать их явно для каждого интерфейса. Однако, кому нужно, тот знает не только про /etc/resolv.conf , но и про возможность явного указания DNS-сервера в конфиге сетевых подключений. На этом останавливаться не будем.

Автоматизация — второе имя любого админа. Для Debian я напишу сервис systemd, который будет запускать Tun2Socks и поднимать интерфейс gatewaytun , а в конфигурации данного сетевого интерфейса укажу команды, которые нужно выполнять при его включении. При необходимости вы можете адаптировать данный подход под другие операционные системы с учетом их специфики.

Файл сервиса, который ляжет в /etc/systemd/system/tun2socks.service :

Обратите внимание на путь до Tun2Socks и адрес прокси-сервера в строке ExecStart . Измените эти параметры под себя. После амперсанда указана пауза в три секунды, следом за которой осуществляется включение нового сетевого интерфейса. Пауза задается на случай высокой загрузки системы, чтобы дать время на создание интерфейса перед попыткой его включения.

Указываем в /etc/network/interfaces параметры интерфейса и дополнительные инструкции для исполнения после его включения. Строки добавляются в конец файла:

Теперь, когда всё готово, запускать и отключать шлюз можно двумя простыми командами:

Если Tun2Socks нужен на постоянной основе, созданную службу можно добавить в автозагрузку:

Послесловие

Мотивом для статьи послужило отсутствие адекватной поисковой выдачи по запросам вроде "шлюз через прокси", "как пустить весь трафик через прокси" и тому подобные. Полагаю, материал будет полезен самой широкой аудитории.

С автоматизацией на Windows долго, честно говоря, не разбирался. Из коробки не завелось и — пусть отдыхает. Не люблю я винду, простите. Да и как любить ее, если для исполнения команды из bat-файла с правами администратора нужно создать ярлык этого батника и поставить в нем галочку "Запускать с правами администратора". Ярлык и галочка, Карл! Да и более того, команда добавления маршрута все равно не хотела отрабатывать.

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

Ударим шифрованием по злобным брутфорсерам!

Ставим OpenVPN 2.5.1 сервер на Windows Server 2016.

Установка OpenVPN Server

Скачиваем дистрибутив для установки OpenVPN:

Доступна версия OpenVPN 2.5.1. Скачиваю Windows 64-bit MSI installer, файл OpenVPN-2.5.1-I601-amd64.msi .

Запускаем инсталлятор OpenVPN.

Открывается мастер установки, предлагают выбрать тип установки, естественно, нажимаем Customize . Установка по умолчанию нас не устроит.

OpenVPN GUI отключаю. Мне нужно, чтобы OpenVPN на сервере работал автоматически.

А OpenVPN Service, наоборот, включаю. OpenVPN у меня будет работать как служба Windows.

Документацию и примеры конфигурации оставляю. Конфигурационные примеры будут использоваться в качестве шаблонов.

Начиная с версии OpenVPN 2.5 появилась поддержка драйвера WinTUN от разработчиков WireGuard. Говорят, что работает быстрее чем TAP-Windows6. Поэтому драйвер TAP-Windows6 отключаю и включаю Wintun.

ПРИМЕЧАНИЕ: для включения драйвера Wintun необходимо в файле конфигурации сервера включить параметр:windows-driver wintun

Утилиты OpenSSL EasyRSA 3 Certificate Management Scripts включаю. Install Now.

Начинается процесс установки OpenVPN.

Установка успешно завершена. Close.

Установка выполнена в директорию C:\Program Files\OpenVPN .

После установки у нас появляется новый сетевой адаптер
Wintun Userspace Tunnel .

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

Запускаем командную строку под администратором и переходим в рабочую директорию C:\Program Files\OpenVPN\easy-rsa .

В этой папке есть всё необходимое для генерации сертификатов.

Для работы в Windows нас интересует файл EasyRSA-Start.bat .

Запускается оболочка EasyRSA Shell.

Инициализируем новую конфигурацию:

Появляется новая директория C:\Program Files\OpenVPN\easy-rsa\pki .

Генерируем ключ и сертификат центра сертификации. Внимание, сейчас мы наступим на грабли, исправим ошибку и снова вернёмся к генерации файлов для центра сертификации.

Нас попросят для раза ввести пароль. Придумываем и вводим.

Extra arguments given.
genrsa: Use -help for summary.Easy-RSA error:Failed create CA private key

Исправим этот баг. Копируем файл C:\Program Files\OpenVPN\easy-rsa\vars.example , называем копию C:\Program Files\OpenVPN\easy-rsa\vars .

Редактируем C:\Program Files\OpenVPN\easy-rsa\vars. В данном файле можно много чего прописать, но я не буду на этом сейчас останавливаться подробно. Находим строку:

И заменяем её на:

set _var EASYRSA_TEMP_DIR "$EASYRSA_PKI /temp"

Собственно, ошибка и заключалась в том, что оболочка по какой-то причине не могла создать временный файл.

Генерируем ключ и сертификат центра сертификации:

Операция проходит успешно.

Создаётся сертификат центра сертификации:

Сертификат создаётся на 10 лет, это значение можно переопределить в файле vars .

И ключ центра сертификации:

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

Генерируем ключ и запрос на сертификат сервера, назовём сервер именем " server ":

Операция проходит успешно.

Создаётся запрос на сертификат сервера:

  • C:\Program Files\OpenVPN\easy-rsa\pki\reqs\server.req
  • C:\Program Files\OpenVPN\easy-rsa\pki\private\server.key

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

Для создания сертификата сервера нужно подписать запрос на сертификат:

Для подписи нужно ввести слово "yes" и указать пароль от центра сертификации.

Создаётся сертификат сервера:

  • C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars .

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

  1. На клиентской машине генерируем запрос на сертификат клиента и ключ без пароля:
    ./easyrsa init-pki
    ./easyrsa gen-req client nopass
  2. Переносим REQ файл запроса на сертификат клиента на машину с нашим CA, импортируем, подписываем, отсылаем сгенерированный сертификат CRT обратно клиенту:
    ./easyrsa import-req /path/to/client.req client
    ./easyrsa sign-req client client
  1. а машине с CA генерируем сертификат клиента и ключ с паролем:
    ./easyrsa gen-req client
    ./easyrsa sign-req client client
  2. Переносим файлы клиенту, сообщаем пароль. Клиент снимает пароль с полученного ключа:
    openssl rsa -in client.key -out clientnew.key

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

Генерируем ключ и запрос на сертификат клиента, назовём клиента именем " client ":

Нас просят указать Common Name для клиента, указываю "v.pupkin".

Операция проходит успешно.

Создаётся запрос на сертификат клиента:

  • C:\Program Files\OpenVPN\easy-rsa\pki\reqs\client.req
  • C:\Program Files\OpenVPN\easy-rsa\pki\private\client.key

Для создания сертификата клиента нужно подписать запрос на сертификат:

Для подписи нужно ввести слово "yes" и указать пароль от центра сертификации.

Создаётся сертификат клиента:

  • C:\Program Files\OpenVPN\easy-rsa\pki\issued\client.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars .

Генерируем ключ Диффи-Хеллмана:

Операция займёт некоторое время.

Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:

  • Сканирование прослушиваемых VPN-сервером портов
  • Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
  • DoS-атаки и флуд на порты OpenVPN
  • Переполнение буфера SSL/TLS

При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth. Для этого запускаем командную строку под администратором и выполняем:

cd C:\Program Files\OpenVPN\bin
openvpn --genkey secret ta.key

В папке C:\Program Files\OpenVPN\bin создаётся файл ta.key .

Переносим его в папку C:\Program Files\OpenVPN\easy-rsa\pki.

Минимальный набор сертификатов сгенерирован.

Настройка OpenVPN сервера

Создадим конфигурационный файл сервера C:\Program Files\OpenVPN\config-auto\server.ovpn:

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.ovpn"

Открываем блокнотом и редактируем:

Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:

port 1194
proto tcp
dev tun
ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\issued\\server.crt"
key "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\private\\server.key"
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\dh.pem"
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
duplicate-cn
keepalive 10 120
tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ta.key" 0
cipher AES-256 -GCM
persist-key
persist-tun
status "C:\\Program Files\\OpenVPN\\log\\status.log"
log "C:\\Program Files\\OpenVPN\\log\\openvpn.log"
verb 4
mute 20
windows-driver wintun

У меня здесь указаны пути к ключам и сертификатам, используется порт TCP 1194. Параметр duplicate-cn позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях. Я использую для того, чтобы с помощью одного и того же сертификата подключиться к OpenVPN серверу и с клиентской машины и со смартфона. Параметр windows-driver wintun подключает использование драйвера WinTun. И что им стоило этот параметр указать в примере конфигурации? Остальное по умолчанию.

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

Ударим шифрованием по злобным брутфорсерам!

Ставим OpenVPN 2.5.1 сервер на Windows Server 2016.

Установка OpenVPN Server

Скачиваем дистрибутив для установки OpenVPN:

Доступна версия OpenVPN 2.5.1. Скачиваю Windows 64-bit MSI installer, файл OpenVPN-2.5.1-I601-amd64.msi .

Запускаем инсталлятор OpenVPN.

Открывается мастер установки, предлагают выбрать тип установки, естественно, нажимаем Customize . Установка по умолчанию нас не устроит.

OpenVPN GUI отключаю. Мне нужно, чтобы OpenVPN на сервере работал автоматически.

А OpenVPN Service, наоборот, включаю. OpenVPN у меня будет работать как служба Windows.

Документацию и примеры конфигурации оставляю. Конфигурационные примеры будут использоваться в качестве шаблонов.

Начиная с версии OpenVPN 2.5 появилась поддержка драйвера WinTUN от разработчиков WireGuard. Говорят, что работает быстрее чем TAP-Windows6. Поэтому драйвер TAP-Windows6 отключаю и включаю Wintun.

ПРИМЕЧАНИЕ: для включения драйвера Wintun необходимо в файле конфигурации сервера включить параметр:windows-driver wintun

Утилиты OpenSSL EasyRSA 3 Certificate Management Scripts включаю. Install Now.

Начинается процесс установки OpenVPN.

Установка успешно завершена. Close.

Установка выполнена в директорию C:Program FilesOpenVPN .

После установки у нас появляется новый сетевой адаптер

Wintun Userspace Tunnel.

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

Запускаем командную строку под администратором и переходим в рабочую директорию C:Program FilesOpenVPNeasy-rsa .

В этой папке есть всё необходимое для генерации сертификатов.

Для работы в Windows нас интересует файл EasyRSA-Start.bat .

Запускается оболочка EasyRSA Shell.

Инициализируем новую конфигурацию:

Появляется новая директория C:Program FilesOpenVPNeasy-rsapki .

Генерируем ключ и сертификат центра сертификации. Внимание, сейчас мы наступим на грабли, исправим ошибку и снова вернёмся к генерации файлов для центра сертификации.

Нас попросят для раза ввести пароль. Придумываем и вводим.

arguments given.

genrsa: Use -help for summary.Easy-RSA error:Failed create CA private key

Исправим этот баг. Копируем файл C:Program FilesOpenVPNeasy-rsavars.example , называем копию C:Program FilesOpenVPNeasy-rsavars .

Редактируем C:Program FilesOpenVPNeasy-rsavars. В данном файле можно много чего прописать, но я не буду на этом сейчас останавливаться подробно. Находим строку:

И заменяем её на:

Собственно, ошибка и заключалась в том, что оболочка по какой-то причине не могла создать временный файл.

Генерируем ключ и сертификат центра сертификации:

Операция проходит успешно.

Создаётся сертификат центра сертификации:

Сертификат создаётся на 10 лет, это значение можно переопределить в файле vars .

И ключ центра сертификации:

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

Операция проходит успешно.

Создаётся запрос на сертификат сервера:

  • C:Program FilesOpenVPNeasy-rsapkireqsserver.req
  • C:Program FilesOpenVPNeasy-rsapkiprivateserver.key

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

Для создания сертификата сервера нужно подписать запрос на сертификат:

Создаётся сертификат сервера:

  • C:Program FilesOpenVPNeasy-rsapkiissuedserver.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars .

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

    На клиентской машине генерируем запрос на сертификат клиента и ключ без пароля:

./easyrsa import-req /path/to/client.req client

    а машине с CA генерируем сертификат клиента и ключ с паролем:

./easyrsa gen-req client

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

Операция проходит успешно.

Создаётся запрос на сертификат клиента:

  • C:Program FilesOpenVPNeasy-rsapkireqsclient.req
  • C:Program FilesOpenVPNeasy-rsapkiprivateclient.key

Для создания сертификата клиента нужно подписать запрос на сертификат:

Создаётся сертификат клиента:

  • C:Program FilesOpenVPNeasy-rsapkiissuedclient.crt

Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars.

Генерируем ключ Диффи-Хеллмана:

Операция займёт некоторое время.

Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:

  • Сканирование прослушиваемых VPN-сервером портов
  • Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
  • DoS-атаки и флуд на порты OpenVPN
  • Переполнение буфера SSL/TLS

При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth. Для этого запускаем командную строку под администратором и выполняем:

В папке C:Program FilesOpenVPNbin создаётся файл ta.key.

Переносим его в папку C:Program FilesOpenVPNeasy-rsapki.

Минимальный набор сертификатов сгенерирован.

Настройка OpenVPN сервера

Создадим конфигурационный файл сервера C:Program FilesOpenVPNconfig-autoserver.ovpn:

Открываем блокнотом и редактируем:

Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:

У меня здесь указаны пути к ключам и сертификатам, используется порт TCP 1194. Параметр duplicate-cn позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях. Я использую для того, чтобы с помощью одного и того же сертификата подключиться к OpenVPN серверу и с клиентской машины и со смартфона. Параметр windows-driver wintun подключает использование драйвера WinTun. И что им стоило этот параметр указать в примере конфигурации? Остальное по умолчанию.

Запуск OpenVPN сервера

Переходим к службам:

Находим службу OpenVPNService.

Настраиваем на автоматический запуск при загрузке сервера. Запускаем (перезапускаем) службу.

Согласно настройкам сервера в папке C:Program FilesOpenVPNlog должны появиться логи. Это один из инструментов администратора OpenVPN сервера.

Активировался сетевой адаптер OpenVPN Wintun.

Согласно настройкам сервера IP адрес 10.8.0.1.

Проверяем поднялся ли порт tcp 1194:

Порт должен прослушиваться.

Настройка OpenVPN клиента на ПК Windows

На компьютере клиента устанавливаем OpenVPN Connect.

Я скачиваю версию для Windows.

Принимаем лицензионное соглашение. Next.

OpenVPN Connect устанавливается.

Установка завершена. Finish.

На рабочем столе появляется иконка OpenVPN Connect.

Здесь нужно указать протокол, порт адрес сервера и прочие параметры. Пути к ключам и сертификатам относительные.

Создаём директорию, например, C:openvpn. Копируем в неё с сервера файлы:

Запускаем OpenVPN Connect.

Agree. Переключаемся на File.

Соединение с OpenVPN сервером установлено.

В логах сервера видим, что соединился юзер v.pupkin.

Отзыв сертификата

cd C:Program FilesOpenVPNeasy-rsa

EasyRSA-Start.bat

./easyrsa revoke client

Ссылки

Установка OpenVPN сервера на Windows

Если вам понравилась статья, то ставьте . каналу.

Пишите комментарии, задавайте вопросы, подписывайтесь.

DISCORD Сервер сообщества

Выполните загрузку OpenVPN с официального ресурса. Затем произведите установку. На этапе выбора компонентов проследите, чтобы все пункты из списка были отмечены.

Запустите командную строку Windows Server 2019 от имени администратора и перейдите в каталог easyrsa:

В этом каталоге есть файл с именем vars.example. Переименуйте его в vars.bat и откройте его в текстовом редакторе.

Укажите значения следующих параметров (они будут использоваться по умолчанию при выпуске сертификатов):

Код: Выделить всё

set KEY_COUNTRY=US set KEY_PROVINCE=CA set KEY_CITY=SanFrancisco set KEY_ORG=OpenVPN set [ protected] set KEY_CN=SERVER set KEY_NAME=SERVER set KEY_OU=changeme set PKCS11_MODULE_PATH=changeme set PKCS11_PIN=1234

Параметр set KEY_SIZE=4096 определяет размер генерируемых ключей. По умолчанию используется 4096 бит, чего во многих случаях достаточно. Ключи размерностью выше 4096 бит генерируются значительно дольше, поддерживаться не всеми клиентами и могут стать причиной замедления инициализации защищенных соединений.

Далее выполните запуск EasyRSA-start.bat для открытия оболочки EasyRSA 3 для Windows.

Выполните команду ./easyrsa с опцией init-pki, чтобы запустить настройку инфраструктуры открытых ключей:

Выполните команду ./easyrsa с опцией build-ca. В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.

Если вы не хотите вводить пароль при каждом взаимодействии с ЦС, вы можете запустить команду build-ca с опцией nopass:

После выполнения команды build-ca вам будет предложено подтвердить обычное имя ЦС. Вы можете выбрать любое имя ЦС, но в данном случае проще всего нажать ENTER, чтобы принять имя по умолчанию.

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

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

Создайте надежный ключ Диффи-Хеллмана, который будет использоваться при обмене ключами:

Cгенерируйте подпись HMAC для укрепления возможностей сервера по проверке целостности TLS:

Теперь все необходимые вашему серверу сертификаты и файлы ключей сгенерированы. Вы готовы создать соответствующие сертификаты и ключи, которые клиентский компьютер будет использовать для доступа к серверу OpenVPN.

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

Все сгенерированные сертификаты хранятся в C:Program FilesOpenVPNeasy-rsapki. Скопируйте указанные ниже сертификаты сервера в каталог C:Program FilesOpenVPNconfig:

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Отредактируйте файл конфигурации сервера OpenVPN:

Код: Выделить всё

Код: Выделить всё

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

В файле server.ovpn имеется несколько директив, которые нужно изменить для активации этой функции. Найдите раздел redirect-gateway и удалите точку с запятой «;» в начале строки redirect-gateway, чтобы убрать режим комментария. В разделах dhcp-option удалите символ «;» в начале каждой из строк, чтобы убрать режим комментария. Это поможет клиентам изменить настройки DNS, чтобы туннель VPN использовался как шлюз по умолчанию.

Для включения IP маршрутизации в Windows измените параметр IPEnableRouter на значение 1 в ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters:

Код: Выделить всё

По умолчанию сервер OpenVPN использует для подключения клиентов порт 1194 и протокол UDP. Если вам потребуется использовать другой порт из-за ограничений сети клиента, вы можете изменить номер порта. Если вы не храните веб-контент на сервере OpenVPN, вам подойдет порт 443, поскольку его обычно не запрещают правила внешнего брандмауэра.

Далее на сервере и клиенте нам нужно запустить OpenVPN в Меню Пуск -> Все программы -> OpenVPN -> OpenVPN GUI. Если у вас возникли какие-либо трудности с подключением, убедитесь, что вы настроили правило на брандмауэре сервера, разрешающее входящий трафик UDP через порт 443.

Теперь ваш сервер настроен для обработки трафика OpenVPN.

Все сгенерированные сертификаты хранятся в C:Program FilesOpenVPNeasy-rsapki. Скопируйте указанные ниже сертификаты клиентов в каталог C:Program FilesOpenVPNconfigclient:

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Код: Выделить всё

Cкопируйте пример файла конфигурации сервера в папку config c именем клиента в качестве имени файла. (Помните, что каждый клиент должен иметь уникальное имя файла).

Код: Выделить всё

Отредактируйте файл базововой конфигурации клиента:

Код: Выделить всё

Код: Выделить всё

Обязательно отредактируйте директиву remote. Она указывает клиенту адрес сервера OpenVPN, т. е. публичный IP-адрес вашего сервера OpenVPN. Найдите директивы, задающие ca, cert и key и укажите пути размещения.

Когда используешь openvpn клиент под windows существует ограничение на подключение только к одному серверу. Это связано с тем, что при установке openvpn создается только 1 tap адаптер, который обслуживает только одно vpn соединение.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на . Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Если при активном соединении попробовать подключиться к еще одному серверу, то получаешь ошибку:

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

Как оказалось, обойти данное ограничение очень просто. После установки клиента openvpn в windows создается папка:

добавление tap адаптера openvpn

2 tap адаптера openvpn

Теперь нужно в папке

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

несколько openvpn подключений

Вот так просто решается задача создания нескольких активных openvpn подключений в windows.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Рекомендую полезные материалы по схожей тематике:

Онлайн курсы по Mikrotik

  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.
  • Подробная статья по настройке openvpn сервера на CentOS 7.
  • Как настроить web интерфейс для openvpn под Freebsd.

Автор Zerox

40 комментариев

Ну с подклчениями оно и понятно, а вот можно ли одновременно 2 службы опенвпн поднять на разных портах? udp и tcp

В Linux без проблем. Я постоянно это делаю. В Windows не знаю, не пробовал.

Так ( "c:\Program Files\OpenVPN\bin\tapctl.exe" create ) можно добавить адаптер в версии OpenVPN 2.5.3

Ну лично в моем случае не получилось найти волшебный батник которые решает проблему добавления доп. адаптера.
На сайте нашел инструкцию bit.ly/3bA6EI3

> tapinstall.exe install
Device node created. Install is complete when drivers are installed.
Updating drivers for from C:\Program Files\TAP-Windows\driver\OemVista.inf.
Drivers installed successfully.

refers to the driver identifier which is tap0901 for OpenVPN 2.2+, but may be different in older/newer OpenVPN versions.
is typically OemWin2k.inf (old tap-drivers) or OemVista.inf (newer tap-drivers). You need to specify the full path to this file, e.g.C:\Program Files\TAP-Windows\driver\OemVista.inf.

By installing multiple times, you will create additional TAP-Windows adapter instances, which can be used for multiple concurrent VPN tunnels. It is also possible to install using Control Panel -> Add New Hardware, and it is possible to uninstall using Control Panel -> System -> Hardware -> Device Manager.

Окей. Круто. Драйвера там были в папке, поэтому для меня команда вышла вот такая
tapinstall.exe install ..\driver\OemVista.inf tap0901

и вывод который говорил что все оке1
Device node created. Install is complete when drivers are installed.
Updating drivers for tap0901 from C:\Program Files\TAP-Windows\driver\OemVista.inf.
Drivers installed successfully.

Здравствуйте, уважаемый Zerox !

Представляете, то о чём мы когда-то говорили, я имею в виду цепочку из нескольких включённых файлов конфигурации, это была самая настоящая цепочка. Я это понял только потом. И вот сегодня мне потребовалось сделать такую цепочку. Я взял Вашу Инструкцию и .
И увидел, что OpenVPN уже не версия 2.4, а версия 2.5. И в этой версии этот замечательный способ не работает.
А как включить несколько файлов конфигурации в версии 2.5 я не знаю. Если Вы, уважаемый Zerox, что-нибудь об этом знаете, то дайте, пожалуйста,
знать нам, пользователям.

Я тоже не знаю. Не пользуюсь этим.

Автор, спасибо за статью. Много полезных разделов на вашем сайте.
При попытке подключения с одного компа к двум разным pptp серверам подключение возможно только одно. Приходится отключаться и чередовать подключения. Проблема понял так же в отсутствии свободного адаптера - как вы и описали. Подскажите - возможно ли 2 pptp подключения одновременно ?

Для pptp такого ограничения нет. Я могу подключиться по двум pptp соединениям одновременно. Та возможны проблемы с маршрутами, если они пересекаются.

Здравствуйте. Новый openvpn устанавливает в систему новое устройство - OpenVPN Wintun. Это устройство, как заявлено, способно увеличить скорость передачи шифрованных данных. Но, нигде не написано, как сделать так, чтобы openvpn использовало именно его, а не OpenVPN TUP, как сейчас. Не могли бы разместить на своем сайте информацию, если вы конечно разбираетесь в этом вопросе.

Пока еще не разбирался с этим вопросом, но надо будет заняться.

Здравствуйте. Я включил его. Скорость увеличилась в 2 раза. То есть, у меня 100 мегабит, openvpn максимум выжимал 30 мегабит. Сейчас с этим wintun поднимается выше 60 мегабит. К сожалению, я не могу написать здесь решение. Причина - отказ в помощи с вашей стороны. Все мои вопросы оставались без ответа. Прощайте.

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

Здравствуйте. А как объединить несколько VPN серверов в один? То есть, клиент на ПК 1, но он подключается к нескольким серверам одновременно? Аналогичным способом пытался, но второй не подключается. Что-то с tap проблемы.

Так в этом и смысл добавления нескольких сетевых интерфейсов для openvpn. Вы должны получить возможность подключаться к нескольким vpn серверам одновременно. Если этого не происходит, разбирайтесь с ошибкой.

Попробую разобраться. Но сейчас проблема - отсутствует папка Tap-Windows. Была, но после установки новой версии openvpn исчезла. Есть другой способ добавления еще одного tap?

В общем, новая версия openvpn не создает папку Tap-Windows. Пришлось поставить старую версию. Но в любом случае два одновременно подключения не удалось реализовать. Вот такая ошибка -

А вот такой вопрос возник. Допустим есть у меня 2 tap-адаптера и два конфига. Как указать что вот этот конфиг к этому адаптеру, а вон тот конфиг - вон к тому? Потому как со стороны операционки и дальнейших сервисов настройки этих адаптеров сильно различаются

Разобрался , накосячил в сертификатах клиентов, но ONO выдавло одинаковый адрес! Вот в чем прикол

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

Извините, но вопрос такой: клиенты получают один адрес? то есть сервер Openvpn выдает одинаковый адрес , как минимум 2 тестовым клиентам тоже openvpn под Windows. Пробовла менять диапазон в тоннеле, из другого диапазона все равно выдает идентичный. Как с этим бороться ?

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

а как сделать что бы любой пользователь рдп мог поднять свое личное соеденение? заблокировано все кроме одного впн сервера. нужно что бы каждый пользователь rdp мог прокинуть свой rdp, TAPинтерфейсов на всех хватает. на данный момент елси один пробрасывает то все работают через него, если кто то поднимает второй впн, то все идут через второй, но и тот кто поднимал первый, тоже весь трафик идет через второй.
очень нужно разделить пользователям vpn

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

Поэтому и написал, а то всю голову сломал, где только не искал, а оказалось на поверхности

Подскажите пожалуйста как решить задачку - две OpenVPN client службы на Windows?
Сейчас на виндовом серваке отлично автоматически поднимается один туннель, но возникла необходимость во втором, никак не могу это реализовать. Вручную поднять два соединения при помощи дополнительного TAP-интерфейса никаких проблем не вызывает, оба поднимаются, но это не вариант, т.к. нужно чтобы служба сама запускала их, а тут проблема - второй конфиг она не принимает.

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

Спасибо за информацию. Так и думал, что это как-то просто должно решаться, как и все в openvpn.

можете немного развернуть ответ для ламера?
создал второй tap-win-adapter
добавил в папку config вторую группу файлов с ключами. но при этом часть файлов имеет разные имена, а часть одинаковые, как быть?
может быть надо эту часть файлов переименовать и где-то руками прописать? подскажите плз если не трудно

Да, все повторяющиеся названия переименуйте в уникальные и не забудьте потом эти же названия файлов переименовать в самих файлах конфигурации.

То есть у вас для подключения идет комплект в виде файла конфигурации и файлов сертификатов. Имена файлов сертификатов прописаны в конфигурации. Сделайте все имена уникальные.

А что в файлах nat, doping и routes? Примерно представляю, но любопытно реализацию посмотреть.

С уважением, spb304

Я даже не знаю, как создать цепочку. Данное руководство к цепочке не имеет никакого отношения и ее не построит. Оно решает другую задачу. Для построения цепочки vpn подключений, надо продумать и организовать правильно маршруты на своем компьютере. Я никогда не пробовал это сделать.

Вы пишете "Оно решает другую задачу".
А какую задачу оно решает ?
Допустим, я создал два TAP-адаптера и вставил в папку "config"
два файла конфигурации. Я пробовал файлы конфигурации вставлять
по разному. Пробовал оба файла вставлять в общую папку "config".
Пробовал в общей папке "config" делать две папки: "config 1" и "config 2".
Результат всегда один и тот же. Всё прекрасно подключается.
Но я никак не могу взять в толк, как эти два соединения подключаются между собой.
Если Вы, уважаемый Zerox знаете, то подскажите пожалуйста.
Если сможете сделать рисунок, это будет совсем замечательно.
Заранее благодарю.

Я до конца не понимаю, что вы хотите сделать. Говорите о цепочке vpn подключений, но при этом остаетесь в рамках одного компьютера и пытаетесь как-то конфигурации менять местами.

Как я понимаю, чтобы получилась цепочка vpn соединений, вы должны своим компьютером подключиться по vpn к серверу, на котором выход в интернет будет настроен через другое vpn соединение.

В таком случае у вас получится цепочка выхода в интернет через 2 vpn соединения. Как это вы себе представляете цепочку в рамках одного компьютера, я не понимаю.

Недавно я научился делать цепочки из Прокси. Я хочу использовать VPN, Тор, Прокси, в общем всё то, что в Интернете обеспечивает честному человеку максимальную безопасность.
Хочу создать такой запутанный клубок соединений, который распутать смог бы только я.
А если это попытается сделать кто-то другой, то у него должно на распутывание уйти столько времени, что он сам откажется от этой затеи.
У меня на компьютере ещё установлена Виртуальная машина VirtualBox. Может быть и её как-то задействовать ? Думаю она в таком деле будет нелишней.
Так что, если Вы Zerox, в этом можете мне помочь, буду Вам очень признателен.

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

З.Ы. Несколько ремарок:
1) даже если разкидать фали .ovpn по разным подпапкам у них всеравно должны быть разные имена.
2) "Создать для каждого подключения отдельную папку и положить конфиг с сертификатами в нее." Справедливо только для ручного подключения. Если иcпользуется служба OpenVPN Service все файлы конфигурации и сертификати должны лежать в одной папке .\OpenVPN\config. Даная служба с подпапками работать не умеет.

Читайте также: