OpenVPN сервер на Windows: как настроить
В этой статье кратко и без лишнего описано, то, как быстро настроить OpenVPN сервер в Windows и сконфигурировать OpenVPN клиента.
Бывает необходимо построить защищенную, шифрованную связь между компьютерами без лишних затрат на оборудование и ПО.
В этом поможет такая бесплатная и известная программа, как OpenVPN — свободная реализация технологии виртуальной частной сети (VPN).
Установка OpenVPN Server на Windows
- Качаем инсталлятор OpenVPN: openvpn.net/index.php/open-source/downloads
- Устанавливаем: обязательно отметьте все пункты птичками, на предложение установить драйвер отвечаем утвердительно.
Создание сертификатов и ключей OpenVPN
- Запускаем консоль (командную строку) из под администратора
- Переходим в папку куда установили OpenVPN: cd «C:\Program Files\OpenVPN\easy-rsa»
- Запускаем: init-config.bat
- В папке «C:\Program Files\OpenVPN\easy-rsa» появится файл vars.bat, открываем его в блокноте.
Вот содержимое файла, которое вышло у меня:
В следующих строках указал вот такие данные:
Укажите что-либо свое, в строках где есть «server» ничего не меняйте.
В этой же папке открываем файл «openssl-1.0.0.cnf» и ищем строчку default_days 365, ставим 3650: теперь сертификаты будут действительны на протяжении 10 лет.
Снова переходим в командную строку которая запущена от имени администратора и выполняем команды:
- cd «C:\Program Files\OpenVPN\easy-rsa»
- vars
- clean-all — в ответ должно написать два раза «Скопировано файлов: 1». Значит, все хорошо
- build-dh — создаст ключ Диффи-Хельмана.
- build-ca — создаст основной сертификат. Будут заданы вопросы, просто нажимаем Enter пока работа команды не завершится.
- build-key-server server — опять таки будут вопросы: жмем Enter, когда увидим два вопроса «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?», жмем Y. Сертификаты для сервера созданы.
- build-key client — создаем сертификат клиента.
- Жмем Enter, но.
- При вопросе Common Name (eg, your name or your server’s hostname) нужно ввести client.
- В конце также два раза Y.
- Для каждого клиента создается новый сертификат, только с другим именем, например, build-key client1 и также указывать его в common name.
- Из папки C:\OpenVPN\easy-rsa\keys копируем файлы: ca.crt, dh1024.pem, server.crt, server.key в папку C:\OpenVPN\config.
Создаем конфигурационные файлы для OpenVPN
Конфигурационный файл сервера OpenVPN
В папке «C:\Program Files\OpenVPN\config», создаем текстовой документ server.ovpn — это будет конфиг сервера, вставляем в файл текст:
Пробуем запустить сервер: Кликаем на рабочем столе по ярлыку OpenVPN Gui или запускаем файл «C:\Program Files\OpenVPN\bin\openvpn-gui.exe».
В панели задач возле к появится серый значок, кликаем по нему дважды, если через 10-20 секунд он загорелся зеленым, значит, все хорошо, если нет, тогда смотрим лог в папке log.
Конфигурация клиента OpenVPN
На компьютере клиента тоже устанавливаем OpenVPN, все галочки можно не отмечать.
Копируем из папки «C:\Program Files\OpenVPN\easy-rsa» на компьютере с сервером файлы:
на компьютер с OpenVPN клиентом в папку C:\Program Files\OpenVPN\config. В этой же папке создаем файл client.ovpn, в котором прописываем:
На клиентском компьютере запускаем OpenVPN Gui или client.ovpn.
Если подключились, пробуем проверить связь: в командной строке набираем ping 10.9.0.1. Если пинг проходит, значит все настроено верно.
На OpenVPN сервере можно настроить автоматический запуск OpenVPN службы:
- переходим в Панель Управления — Администрирование — Службы
- Ищем OpenVPN Service и выставляем тип запуска «Автоматически»
Ошибка «WARNING: can’t open config file: /etc/ssl/openssl.cnf «
Если при попытке создать сертификат для OpenVpn вы видите эту ошибку, то скорее всего вы не запустили перед этим действием bat-файл OpenVPN\easy-rsa\vars.bat.
Описание команд и параметров OpenVPN
Команды без — (двумя знаками дефиса) перед командой должны быть использованы в конфигурационном файле, команды с — в начале используются только из командной строки.
- remote — определяет удаленный конец туннеля. Могут использоваться записи IP и DNS.
- local — определяет локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
- dev — определяет какой использовать тип устройства tun или tap. Например: dev tun или dev tap. Так же можно явно указывать номер виртуального интрефейса, например tun0.
- port — указывает на каком порту будет работать OpenVPN (локально и удаленно).
- proto — какой протокол будет использоваться. Возможные значения: udp, tcp, tcp-client, tcp-server.
- tcp-client — сам пытается установить соединение
- tcp-server — только ждет подключений
- Использование протокола udp VPN будет работать чуть быстрее, чем tcp. Но в плане стабильности работы лучше выбирать tcp (как показывает практика, VPN-соединение более устойчиво)
- remote-random — если указана данная опция и в random перечисленно несколько удаленных хостов, то OpenVPN в случайном порядке будет к ним подключаться. Применяется для балансировки нагрузки.
- float — позволяет удаленному хосту изменять IP во время работы туннеля. Соединение при этом не разрывается.
- ipchange — выполняет скрипт или команду указанную в , если IP сменился. Пример: ipchange script-ip.sh
- connect-retry — пробует переподключиться через указанное время в секундах, если соединение было разорвано.
- connect-retry-max — максимальное количество повторов если соединение было разорвано
- resolv-retry — если OpenVPN не удалось узнать имя удаленного хоста по DNS, то через указанное количество секунд попытаться переподключиться.
- lport — указывает на локальный порт для использования OpenVPN
- rport — аналогично для удаленного порта. Пример: rport 8000 — OpenVPN будет пытаться подключится к удаленному порту 8000
- nobind — использовать динамический порт для подключения (только для клиента)
- shaper — указывает скорость передачи данных в байтах для исходящего трафика (только для клиента)
- tun-mtu — устанавливает максимальный размер MTU. По умолчанию tun-mtu равен 1500. Использование: tun-mtu 1200
- dev-node — устанавливает имя виртуального интерфейса. Например: dev-node openvpn1
- ifconfig — устанавливает локальный IP и маску подсети для туннельного интерфейса. Например: ifconfig 10.3.0.1 255.255.255.0
- server — автоматически присваивает адреса всем клиентам (DHCP) в указанном диапазоне с маской сети. Данная опция заменяет ifconfig и может работать только с TLS-клиентами в режиме TUN, соответственно использование сертификатов обязательно. Например: server 10.3.0.0 255.255.255.0 . Подключившиеся клиенты получат адреса в диапазоне между 10.3.0.1 и 10.3.0.254.
- server-bridge — сервер в режиме моста для TAP устройств. Пример: server bridge 10.3.0.1 255.255.255.0 10.3.0.128 10.3.0.254 Клиентам будут выданы адреса в диапазоне 10.3.0.128 — 10.3.0.254, в качестве шлюза будет указан 10.3.0.1.
- mode server — переключает OpenVPN в режим сервера (начиная с 2-й версии)
- mode p2p — данная опция идет по умолчанию.
Опции в режиме сервера
- push — передача клиенту конфигурационных параметров. Пример: push «route 192.168.0.0 255.255.255.0». Аналогично с помощью push клиенту могут передаваться следующие параметры: route, route-gateway, route-delay, redirect-gateway, inactive, ping, ping-exit, ping-restart, persist-key, persist-tun, comp-lzo, dhcp-option, ip-win32. Последние две опции применимы только для Window-клиентов. Например передадим Windows-клиенту адрес DNS-сервера 11.11.11.11: push «dhcp-option DNS 11.11.11.11»
- ifconfig-pool-persist ipp.txt — в файле ipp.txt назначаем клиентам статические IP-адреса. В файле в каждой строке пишем «название_сертификата,айпи_адрес», например: «demyanovich,172.16.25.10»
- comp-lzo — параметр сжатия трафика, идущего через виртуальный туннель. Может принимать значения yes, no, adaptive. Последнее используется по умолчанию.
- comp-lzo yes — принудительно включить сжатие
- comp-lzo no — принудительно отключить сжатие
- comp-lzo adaptive — адаптивный режим.
Команды и параметры при работе с сертификатами x509 и параметрами шифрования
- cipher — указываем алгоритм шифрования. Например: cipher AES-256-CBC. Рекомендуется использование шифров в режиме CBC (Cipher Block Chaining).
- keysize — размер ключа в битах. Например: keysize 128
- auth — алгоритм хэширования. Пример: auth SHA1
- df — файл с ключем Диффи-Хелмана
- ca — файл сертификата для CA
- cert — сертификат локальной машины
- key — локальный ключ машины
- tls-server — явно указывает, что данный хост является tls-server
- tls-client — соответственно tls-client
- pkcs12 — указываем файл (PKCS12), который содержит в себе сертификат, ключ и CA в одном файле. Пример: pkcs12 /file
- crl-verify — список отозванных сертификатов, т.е. blacklist.
- no-replay — отключает защиту OpenVPN от атаки повторного воспроизведения (replay attack). Крайне не рекомендуется отключать!
- no-iv — отключает использование вектора инициализации шифра (IV). Крайне не рекомендуется отключать!
- secret — включает режим шифрования и аутентификации на статических ключах. В качестве параметра использует заранее сгенерированный, командой —genkey, файл. Например: secret key.txt
- Все доступные алгоритмы шифрования можно просмотреть выполнив из командной строки: openvpn —show-ciphers
- Алгоритмы хэширования: openvpn —show-digests
- Показать все доступные TLS-шифры (TLS используется только для шифрования канала управления): openvpn —show-tls
- Показать все доступные крипто-устройства в системе (если такие имеются): openvpn —show-engines
Команды для управления маршрутизацией
Обозначение: VPN-хост — удаленная сторона (удаленный хост)
- route — устанавливает указанную маршрутизацию на VPN-хосте, после успешного запуска туннеля. Пример: route 10.0.10.0 255.255.255.252
- route-gateway — устанавливает шлюз на VPN-хосте. Пример: route-gateway 192.168.0.22. После успешного запуска виртуального туннеля клиенту будет задан шлюз 192.168.0.22
- route-delay — указывает подождать n-секунд перед установкой маршрутов. Пример: route-delay 5 — через 5 секунд после установки туннеля будут заданы маршруты.
- route-up — выполнить скрипт или программу после установки маршрутов. Пример: route-up /script.sh
- redirect-gateway — установить шлюзом по умолчанию удаленный сервер. Т.е. когда удаленный пользователь подключается к нашему серверу, то ему будет задан шлюз по умолчанию на наш сервер.
Команды для управления туннелем
- ping — указывает отсылать ping на удаленный конец тунеля после указанных n-секунд, если по туннелю не передавался никакой трафик. Пример:
ping 10 - ping-restart — если за указанное время не было получено ни одного пакета с удаленной стороны, то перезапускать туннель. Пример: ping-restart 60 — если в течении 60 секунд не было получено ни одного пакета, то туннель будет перезапущен.
- ping-timer-rem — позволяет перезапускать туннель, только когда указан удаленный адрес.
- persist-tun — данная опция оставляет без изменения устройства tun/tap при перезапуске OpenVPN.
- persist-key — указывает не перечитавать файлы ключей при перезапуске туннеля.
- resolv-retry — устанавливает время в секундах для запроса об удаленном имени хоста. Актуально только если используется DNS-имя удаленного хоста. Пример: resolv-retry 86400
- inactive — после n-секунд неактивности устройство TUN/TAP автоматически отключется. Пример: inactive 120
- ping-exit — если за указанные n-секунд не было получено ни одного пакета, то отключать OpenVPN. Пример: ping-exit 120
- keepalive — является совмещением сразу двух команд — ping и ping-restart. Использует сразу два параметра в секундах, перечисленных через пробел. Пример: keepalive 10 180 — каждые 10 секунд посылать ping на удаленный хост, и, если за 180 секунд не было получено ни одного пакета — то перезапускать туннель.
- persist-local-ip — оставлять неизменными локальный IP адрес и номер порт, если туннель был перезапущен.
- persist-remote-ip — оставлять неизменными удаленный IP адрес и номер порт, если туннель был перезапущен. persist-remote-ip 192.168.50.1
Методы аутентификации
- auth-user-pass-verify — указывается только на серверной стороне.
- — путь к скрипту, который будет производить авторизацию. Скрипт должен возвращать 0 если авторизация успешна, и соответственно, 1 если авторизация не успешна.
- — метод авторизации, может быть двух типов: via-env и via-file
- auth-user-pass — указывается на клиентской стороне. Параметр не обязателен, если он отсутствует то будет предложено ввести пару логин/пароль. должен содержать имя пользователя и пароль в двух строчках: username и password
- client-cert-not-required — отключает авторизацию по сертификатам
Работа с прокси
OpenVPN без проблем может работать через http и socks прокси.
- http-proxy — указываем адрес и порт прокси-сервера. http-proxy 192.168.0.12 8080
- Если требуется авторизация на прокси-сервере: http-proxy — где authfile — файл содержащий две строки (имя пользователя и пароль) или stdin (будет запрошено имя пользователя и пароль). Так же после authfile требуется указать метод авторизации. Можно оставить auto для автоматического выбора метода авторизации или указать явно через auth-method. auth-method может быть трех видов «none», «basic» или «ntlm».
- http-proxy-retry — переподключаться, если соединение было разорвано.
- http-proxy-timeout — считать соединение с прокси-сервером разорванным после n-секунд неактивности. Например: http-proxy-timeout 5
- socks-proxy — указываем сокс-прокси сервер. Пример: socks-proxy 192.168.0.12 8080
- socks-proxy-retry — переподключаться, если соединение было разорвано.
- auto-proxy — автоматически определять прокси-сервер.