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

Материал из Info

Перейти к: навигация, поиск

Всё чаще Системные интеграторы задаются вопросом - есть ли альтернативы для Hamachi? Есть очень много вариантов софтового VPN, но в этой статье речь идёт об OpenVPN, как легко масштабируемый, кросплатформенный и универсальный инструмент.
Работает как клиент-сервер (бриджинг и роутинг не рассматриваем). Требования к схеме простые:

  • Статический IP или глобальная запись в DNS для сервера.
  • Открытый порт 1194 (или какой укажете сами) на сервере.
  • Сгенерированные и действующие сертификаты. Срок годности сертификатов по указанной ниже технологии - 3650 дней (10 лет).
  • Полное следование процессу установки.
  • Наличие желания и отсутствие страха делать что-то новое.

Содержание

Процесс установки

  1. Скачать Installer (32/64-bit), Windows Vista and later.
  2. Установить. При установке проверить чтобы были включены все компоненты.
  3. Подтвердить установку драйвера TAP-интерфейса.
  4. Открыть Центр управления сетями и общим доступом и переименовать "Подключение по локальной сети #", где адаптером является TAP в "OpenVPN".
  5. В брандмауэре добавить исключения для UDP порта 1194 на вход.
  6. Последовательно сгенерировать сертификаты (процедура выполняется только на сервере).
  7. После создания сертификатов скопировать папку C:\Program Files\OpenVPN\easy-rsa\keys на флэшку.
  8. Создать конфиг-файл client.ovpn или server.ovpn.
  9. Для установки автоматического старта вместе с загрузкой системы:
  Мой компьютер => Панель управления => Администрирование => Службы => OpenVPN [Вручную=>Автоматически] => Запустить

После запуска службы в случае правильных настроек по команде ipconfig Вы получите статический IP для TAP-интерфейса, который привязан по сертификату. Связь с центральным сервером проверяется обычным ping'ом если разрешены ICMP-пакеты для сервера и его роутера.
По-необходимости в файле C:\Windows\system32\drivers\etc\hosts на сервере добавить запись для клиента.

Генерация сертификатов

1. Заполнить C:\Program Files\OpenVPN\easy-rsa\vars.bat.sample своими данными:

set KEY_COUNTRY=RU
set KEY_PROVINCE=RU
set KEY_CITY=Moscow
set KEY_ORG=Microinvest
set KEY_EMAIL=vpn@microinvest.net
:: Реальное название ПК
set KEY_CN=HostNameOfPC
:: Имя пользователя, генерирующего сертификат
set KEY_NAME=Alexander
:: main server, subscriber1, pos1, manager, buh и т.п. уникальный идентификатор, чтобы понять что это за сертификат
set KEY_OU=main server

2. Вызвать командную строку с правами администратора, cmd

   cd "C:\Program Files\OpenVPN\easy-rsa"
   move vars.bat.sample vars.bat
   vars.bat
   clean-all

3. Генерация сертификата авторизации: C:\Program Files\OpenVPN\easy-rsa\build-ca.bat

WARNING: can't open config file: /etc/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
..++++++
..........................................++++++
writing new private key to 'keys\ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Microinvest]:
Organizational Unit Name (eg, section) [main server]:
Common Name (eg, your name or your server's hostname) [HostNameOfPC]:
Name [Alexander]:
Email Address [vpn@microinvest.net]:

4. Генерация сертификата для сервера: C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat server

WARNING: can't open config file: /etc/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
.........++++++
..++++++
writing new private key to 'keys\server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Microinvest]:
Organizational Unit Name (eg, section) [main server]:
Common Name (eg, your name or your server's hostname) [HostNameOfPC]:
Name [Alexander]:
Email Address [vpn@microinvest.net]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :PRINTABLE:'RU'
localityName          :PRINTABLE:'Moscow'
organizationName      :PRINTABLE:'Microinvest'
organizationalUnitName:PRINTABLE:'main server'
commonName            :PRINTABLE:'HostNameOfPC'
name                  :PRINTABLE:'Alexander'
emailAddress          :IA5STRING:'vpn@microinvest.net'
Certificate is to be certified until Nov 17 18:36:19 2024 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

5. Генерация сертификата для клиента с именем POS-1: C:\Program Files\OpenVPN\easy-rsa>build-key.bat POS-1

WARNING: can't open config file: /etc/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
..............++++++
................++++++
writing new private key to 'keys\POS-1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Microinvest]:
Organizational Unit Name (eg, section) [main server]:first subscriber
Common Name (eg, your name or your server's hostname) [HostNameOfPC]:POS-1
Name [Alexander]:
Email Address [vpn@microinvest.net]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :PRINTABLE:'RU'
localityName          :PRINTABLE:'Moscow'
organizationName      :PRINTABLE:'Microinvest'
organizationalUnitName:PRINTABLE:'first subscriber'
commonName            :PRINTABLE:'POS-1'
name                  :PRINTABLE:'Alexander'
emailAddress          :IA5STRING:'vpn@microinvest.net'
Certificate is to be certified until Nov 17 18:40:00 2024 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

6. Генерация сертификата для клиента с именем POS-2: C:\Program Files\OpenVPN\easy-rsa>build-key.bat POS-2

WARNING: can't open config file: /etc/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
..++++++
.............++++++
writing new private key to 'keys\POS-2.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Microinvest]:
Organizational Unit Name (eg, section) [main server]:second subscriber
Common Name (eg, your name or your server's hostname) [HostNameOfPC]:POS-2
Name [Alexander]:
Email Address [vpn@microinvest.net]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
WARNING: can't open config file: /etc/ssl/openssl.cnf
Using configuration from openssl-1.0.0.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'RU'
stateOrProvinceName   :PRINTABLE:'RU'
localityName          :PRINTABLE:'Moscow'
organizationName      :PRINTABLE:'Microinvest'
organizationalUnitName:PRINTABLE:'second subscriber'
commonName            :PRINTABLE:'POS-2'
name                  :PRINTABLE:'Alexander'
emailAddress          :IA5STRING:'vpn@microinvest.net'
Certificate is to be certified until Nov 17 18:42:13 2024 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

7. Генерация ключа Диффи-Хеллмана: C:\Program Files\OpenVPN\easy-rsa>build-dh.bat

WARNING: can't open config file: /etc/ssl/openssl.cnf
Loading 'screen' into random state - done
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
................................................................................
................................................................................
......................+..........................................+.+............
..............................+.................................................
..................................................+..........................+..
.........+.........+............................................................
....................................................+...........................
..................+.+....+......................................................
...............+....+...........................................................
................................................................................
............................................................+..............+....
..+........................................+....................................
...........+......................................................+.............
................................................................................
.....++*++*++*

Создание конфигов

Перейти в C:\Program Files\OpenVPN\config
Для центрального сервера:

  • Создать папку C:\Program Files\OpenVPN\config\keys. Вставить в неё файлы с копии dh1024.pem, ca.crt, server.crt, server.key
  • Создать файл C:\Program Files\OpenVPN\config\server.ovpn со следующими настройками:
dev tap
#Тут ждём соединения (проще говоря, IP интерфейса, который смотрит в интернет)
local 192.168.0.7
port 1194
proto udp
dev-node OpenVPN
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem
# Назначаем серверу 192.168.7.1
server 192.168.7.0 255.255.255.0
# В файле ipp.txt будут привязки в виде "имя сертификата, IP": 
# POS-1,192.168.7.10
# POS-2,192.168.7.20
# Файл можно править вручную, чтобы назначать IP после остановки службы с последующим запуском
ifconfig-pool-persist ipp.txt
route 192.168.7.0 255.255.255.0
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mute 20

Для клиента (POS-1) (на клиенте выполнить пункты 1-4 данного руководства):

  • Создать папку C:\Program Files\OpenVPN\config\keys. Вставить в неё файлы с копии dh1024.pem, ca.crt, POS-1.crt, POS-1.key
  • Создать файл C:\Program Files\OpenVPN\config\client.ovpn со следующими настройками:
client
dev tap
dev-node OpenVPN
proto udp
# IP или DNS-имя вашего центрального сервера
# remote 123.123.123.123 1194
remote vpn.microinvest.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/ca.crt
cert keys/POS-1.crt
key keys/POS-1.key
dh keys/dh1024.pem
ns-cert-type server
comp-lzo
verb 3
mute 20

Для другого клиента в настройках меняются только строки cert и key.

Добавление нового клиента

При добавлении нового клиента ему понадобится новый сертификат. Для этого копируем с флэшки папку в C:\Program Files\OpenVPN\easy-rsa\keys с заменой и запускаем командную строку с правами администратора:

   cd "C:\Program Files\OpenVPN\easy-rsa"
   vars.bat

Там же запускаем генерацию сертификата для нового клиента:

   build-key <NewFileName>

После этого делаем новый бэкап папки keys на флэшку.

Проверить валидность созданного сертификата можно командой:

  "C:\Program Files\OpenVPN\bin\openssl" verify -CAfile "C:\Program Files\OpenVPN\config\keys\ca.crt"  "C:\Program Files\OpenVPN\config\keys\POS-1.crt"

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

Другие бесплатные VPN-решения

Некоторые полезные ресурсы


Рассмотрите другие статьи в категории Технология работы