Настройка OpenVPN на Windows

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

Загрузка и установка OpenVPN

Загрузите инсталятор с сайта openvpn.net (выбирайте свежую версию, сейчас это OpenVPN 2.3.5 — выпущенная 2014.10.28) и запустите его на компьютере который будет выступать сервером и произведите установку. Более ранние версии ставить не рекомендуется по причине наличия серьёзной уязвимости в пакете OpenSSL.
Произведите такю же установку на всех комьпютерах которые будут выступать в роли клиентов.

Сертификаты и ключи

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

Подготовка

Зайдите в каталог C:\Program Files\OpenVPN\easy-rsa из коммандной строки. Для этого:
Нажмите Windows Key + R
Наберите “cmd.exe” и нажмите Ввод.
Появится чёрное окошко
Перейдите в нужный каталог набрав команду:

cd "C:\Program Files\OpenVPN\easy-rsa"

Инициализируйте конфигурацию OpenVPN набрав

init-config

Этот скрипт должен запускаться только один раз для одной настройки (генерации сертификатов и ключей). Повторный запуск сотрёт ранее созданные ключи и сделает невозможным создание новых ключей и весь цикл создания ключей прийдётся повторить снова.
Откройте файл с переменными в редакторе
notepad vars.bat
Отредактируйте следующие строки по своим нуждам. Поля эти справочные и ни на что не влияют. Служат исключительно для идентификации сертификатов, и если у вас будет много разных VPN то имеет смысл придать им осмысленные значения чтобы потом не запутаться.

set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain

Рекомендую также увеличить размер ключа шифрования KEY_SIZE=2048
Сохраните файл и закройте редактор.
Затем в открытом окне коммандного интерпретатора запустите следующие скрипты:

vars
clean-all

Теперь всё готово к созданию сертификатов и подписи ключей.

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

Создаём верхушку пирамиды доверия: ключ и сертификат центра сертификации

build-ca

Когда будет запрошено ввод страны и т д, всё что вы уже вводили раньше при редактировании файла vars.bat, оставьте всё без изменений просто нажимая Ввод. Но когда будет запрошено “Common Name” вам нужно ввести имя которое идентифицирует сертификат, например, “OpenVPN-CA”:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [OpenVPN]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [mail@host.domain]:

Теперь сертификат и ключ для сервера

build-key-server server

Снова всё оставляйте по умолчанию а на “Common Name” введите, например, “server”
И когда появится запрос подписать сертификат нажмите, введите “y”
Также когда будет запрошен commit, нажмите “y”.

Ну и наконец цикл для сертификатов и ключей каждого клиента

Для каждого клиента, выберите какое-то уникальное имя для идентификации, типа “boss-notebook” и запускайте скрипт как показано далее

build-key boss-notebook

Когда дойдёт очередь до “Common Name” введите как вы выбрали boss-notebook
Повторяйте это для каждого VPN клиента который будет соединяться с VPN сервером.

Генерация файла Diffie Hellman необходимого для установки шифрования. При размере ключа 2048 бит он генерируется довольно долго.

build-dh

Имя файла должно получиться с суффиксом размера ключа тоесть dh2048.pem

Ну и ключ для TLS

openvpn --genkey --secret ta.key

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

Конфигурационные файлы

Конфигурационный файл для сервера имя может былю любым, а расширение .ovpn:
server.ovpn

port 12965
proto udp
dev tun

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\server.crt"
key "C:\\Program Files\\OpenVPN\\config\\server.key" # этот файл следует хранить в секрете!
dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem"
# опция tls-auth является своего рода HMAC файрволом и служит для защиты от DoS
# однако замечено, что иногда она тормозит если в качестве сервера использовать Windows
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0 # этот файл следует хранить в секрете!

# Определяем VPN сеть (она не должна конфликтовать с другими вашими сетями куда нужен будет доступ)
server 10.20.30.0 255.255.255.0

# фиксированные настройки для клиентов например IP адрес в VPN сети.
#client-config-dir ccd

# разрешаем клиентам видеть друг друга. если нет закоментируйте эту опцию.
client-to-client
keepalive 10 120

cipher AES-256-CBC   # Шифрование AES
comp-lzo             # сжатие пакетов
max-clients 10       # максимальное кличество VPN клиентов.
persist-key
persist-tun
ifconfig-pool-persist   /var/log/ipp.txt
status                  /var/log/openvpn-status.log
log                     /var/log/openvpn.log
verb 3

Сохранить файл как C:\Program Files\OpenVPN\easy-rsa\server.ovpn

Конфигурационный файл для клиентов похож на серверный и немного проще.

client
dev tun
proto udp
# это адрес вашего сервера. можно использовать и доменное имя
remote 111.222.333.444 12965
resolv-retry infinite
nobind
persist-key
persist-tun

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\boss-notebook.crt"
key "C:\\Program Files\\OpenVPN\\config\\boss-notebook.key" # секретный
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1 # секретный

ns-cert-type server
#log "C:\\Program Files\\OpenVPN\\log\\boss-notebook.log"

cipher AES-256-CBC
comp-lzo
verb 3

Сохранить файл как C:\Program Files\OpenVPN\easy-rsa\boss-notebook.ovpn
Имя файла не принципиально для функционирования VPN но имена файлов клиентов стоит сделать разными, так как у них немного разное содержимое и пока что мы сохраняем их в один каталог.

Разберём теперь куда какие файлы сохранить.

Из каталога C:\Program Files\OpenVPN\easy-rsa\ с машины где генерировали сертификаты на сервер в каталог C:\Program Files\OpenVPN\config\ скопируйте файлы:
ca.crt
dh2048.pem
server.crt
server.key
server.ovpn

Из каталога C:\Program Files\OpenVPN\easy-rsa\ с машины где генерировали сертификаты на клиент в каталог C:\Program Files\OpenVPN\config\ скопируйте файлы:
ca.crt
boss-notebook.crt
boss-notebook.key
boss-notebook.ovpn

Запуск OpenVPN

Запуск OpenVPN туннеля требует привилегий администратора системы поэтому мне проще запускать через cmd.exe. На сервере и на клиенте в командной строке запустите:

net start "OpenVPN Service"

Можно запустить также и при помощи OpenVPN графического интерфейса.
Start Menu -> All Programs -> OpenVPN -> OpenVPN GUI
Затем дважды кликнуть на иконке которая появится в области иконок системного трея. В результате должно появиться окно в котором будет отображаться процесс соединения и когда всё прошло успешно окно свернётся. Но он к сожалению не всегда способен запуститься в новых системах например Windows 7. Поэтому мне предпочтителен первый способ.