Инструкция описывает процесс установки и настройки серверной и клиентской частей OpenVPN. Решение предназначено для подключения удаленных клиентов к сети предприятия. После подключения у клиента сохраняется собственный шлюз по-молчанию и не блокируется выход в интернет. Решение показало простоту в настройке клиентской части, было опробовано (и используется в настоящее время) на Windows-XP, Windows-7, Andriod 3.x, Archlinux, Ububnu. Есть информация об успешном подключении и iPad.
Устанавливаем пакет из портов. Опции можно оставить по умолчанию. Главное, не отключайте 'easy-rsa', так как он потребуется для настройки и генерации сертификатов:
Или:
Создаем каталоги для конфигов:
Копируем каталог easy-rsa в каталог конфигов OpenVPN:
Переходим в скопированный каталог:
Переходим в оболочку sh:
Выполняем команду для генерации собственного сертификата:
Данные для сертификата заполните в соотвествии с вопросами.
'Common name' должно соответствовать DNS имени вашего VPN-сервера, например: 'vpn0.example.com'. На последние вопросы отвечаем 'Y'.
Теперь делаем сертификат для клиента с именем 'client'. Тут также на последние вопросы отвечаем 'Y'
Выходим из sh оболочки:
Cоздаем ключ для tls-аутификации:
Создаем файл server.conf (ниже под спойлером). Не забудьте в нем указать адрес внутреннего DNS-сервера, которых знает имена ваших локальных хостов.
Для каждого клиента надо будет создавать на сервере файл-конфиг пользователя, где указывается назначаемый клиенту IP адрес и шлюз. Например, для клиента с именем 'client':
Для запуска даймона OpenVPN при загрузке операционной системы добавим в '/etc/rc.conf' строки:
Запуск сервиса:
Если стоит задача предоставлять пользователям через OpenVPN Интернет, то потребуется наличие NAT. Можно включить его поддержку через загружаемые модули, для этого в файл '/boot/loader.conf' надо добавить строки:
Пример настройки NAT IPFW:
Все, сервер OpenVPN установлен, настроен и запущен. Теперь можно заняться клиентами.
Описание приведено для сервера на операционной системе FreeBSD с установленным и настроеным, как описано выше, сервисом OpenVPN.
Сертификат генерируется из системной консоли сервера с правами суперпользователя из каталога easy-rsa:
В результате будут сгенерированы клиентские файлы сертификатов для подключения. Далее, необходимо создать файл `/usr/local/etc/openvpn/ccd/ЛОГИН_ПОЛЬЗОВАТЕЛЯ` с одной строкой вида:
Каждая пара адресов в ifconfig-push соответствует виртуальным IP-адресам конечных точек (клиента и сервера) — каждому клиенту в момент подключения назначается своя подсеть. Сюда-же можно добавить дополнительные маршруты, если клиенты подключаются к разным подсетям (филиалы, технические специалисты)
Чтобы сохранить совместимость с Windows-клиентами и драйвером TAP-Win32 эти адреса должны быть взяты из следующих друг за другом подсетей с маской /30. Например, для диапазона `172.17.0.1-172.17.0.254` последний октет IP-адреса каждой пары клиент-сервер следует назначать из набора:
Для удобства работы я создал текстовый файл «/usr/local/etc/openvpn/not_use_ip.txt» в котором перечислены свободные пары адресов, удаляемые по мере раздачи клиентам. Обратите внимание, что в конфигурационном фале первым задается назначаемый клиенту IP адрес (старший), вторым — адрес сервера (на единицу меньше).
После добавления клиента желательно перезапустить сервис OpenVPN:
Клиенту необходимо передать пять файлов (ca.crt, vpn0.crt, vpn0.key, ta.key, vpn0.example.com.ovpn):
Перечисленные файлы копируются в отдельную (временную) папку с именем «config», файлы вида «ЛОГИН_ПОЛЬЗОВАТЕЛЯ.*» в ней переименовываются в «vpn0.*», папка упаковывается в архив и высылается пользователю электронной почтой со ссылкой на инструкцию по настройке клиентского подключения OpenVPN (см. ниже).
Для установки и настройки OpenVPN соединения необходимо вначале определить разрядность своей операционной системы. Для 32-разрядных систем установочный файл клиента OpenVPN оканчивается на "-i686.exe". Если же у Вас 64-разрядная MS-Windows, то Вам нужен файл, в названии которого есть "-x86_64.exe". Кроме того, для VPN подключения к сети Вам потребуются клиентские сертификаты и файл настройки, которые можно получить у системного администратора.
Для MS-Windows cкачайте и установите соответствующую клиентскую программу OpenVPN (для Android и iOS есть пакеты в собственных репозиториях market/store). Перейдите в каталог программы OpenVPN (C:Program Files\OpenVPN) и скопируте в него папку

Названия файлов в папке config у Вас могут незначительно отличаться. Запустите OpenVPN клиент от имени Администратора или измените свойства ярлыка на Рабочем столе (установить галочку “выполнять от имени администратора”).


Подключение к локальной сети предприятия через Интернет производися через контекстное меню или двойным кликом на иконке OpenVPN в системной области панели задач. Подключиться можно только находясь за пределами сети предприятия. Соединения изнутри сети сервер OpenVPN не принимает.

После успешного завершения процедуры подключения иконка OpenVPN в панели задач изменит цвет на зеленый и появится всплывающая подсказка с назначенным VPN-клиенту IP адресом. Адрес «привязыватся» к сертификату, поэтому с одним и тем-же сертификатом одновременно с двух и более рабочих мест работать не получится из-за конфликта адресов.
После подключения Вам станут доступны все сервисы (RDP, FTP, HTTP …) как по IP адресу так и по доменному имени в разрешенном системным администратором сегменте локальной сети, за исключением возможности подключения сетевых дисков, заблокированной по соображениям безопасности.
Документация и дистрибутив:
- Установка OpenVPN сервера
- Создание клиентского сертификата OpenVPN
- Инструкция по настройке клиентского подключения OpenVPN
Установка OpenVPN сервера (FreeBSD).
Устанавливаем пакет из портов. Опции можно оставить по умолчанию. Главное, не отключайте 'easy-rsa', так как он потребуется для настройки и генерации сертификатов:
# cd /usr/ports/security/openvpn
# make configure-recursiv install clean
Или:
# make configure-recursiv install clean -С /usr/ports/security/openvpn
Создаем каталоги для конфигов:
# mkdir /usr/local/etc/openvpn/
# mkdir /usr/local/etc/openvpn/ccd
Копируем каталог easy-rsa в каталог конфигов OpenVPN:
# cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/
Переходим в скопированный каталог:
# cd /usr/local/etc/openvpn/easy-rsa/
Переходим в оболочку sh:
# sh
Выполняем команду для генерации собственного сертификата:
# . ./vars
# ./clean-all
# ./build-ca
Данные для сертификата заполните в соотвествии с вопросами.
# ./build-key-server vpn0.example.com
'Common name' должно соответствовать DNS имени вашего VPN-сервера, например: 'vpn0.example.com'. На последние вопросы отвечаем 'Y'.
# ./build-dh
Теперь делаем сертификат для клиента с именем 'client'. Тут также на последние вопросы отвечаем 'Y'
# ./build-key client
Выходим из sh оболочки:
# exit
Cоздаем ключ для tls-аутификации:
# /usr/local/sbin/openvpn --genkey --secret /usr/local/etc/openvpn/easy-rsa/keys/ta.key
Создаем файл server.conf (ниже под спойлером). Не забудьте в нем указать адрес внутреннего DNS-сервера, которых знает имена ваших локальных хостов.
/usr/local/etc/openvpn/server.conf
# cat /usr/local/etc/openvpn/server.conf
local vpn0.example.com
port 1194
proto udp
dev tun
ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
cert /usr/local/etc/openvpn/easy-rsa/keys/vpn0.example.com.crt
key /usr/local/etc/openvpn/easy-rsa/keys/vpn0.example.com.key
dh /usr/local/etc/openvpn/easy-rsa/keys/dh1024.pem
tls-server
tls-auth /usr/local/etc/openvpn/easy-rsa/keys/ta.key 0
server 172.17.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd
push "route 10.10.210.72 255.255.255.248"
push "route 172.27.102.0 255.255.255.0"
push "route 172.27.103.0 255.255.255.0"
push "route 172.27.105.0 255.255.255.0"
push "dhcp-option DNS 192.168.100.1"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
Для каждого клиента надо будет создавать на сервере файл-конфиг пользователя, где указывается назначаемый клиенту IP адрес и шлюз. Например, для клиента с именем 'client':
# cat /usr/local/etc/openvpn/ccd/client
ifconfig-push 172.17.0.2 172.17.0.1
Для запуска даймона OpenVPN при загрузке операционной системы добавим в '/etc/rc.conf' строки:
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"
Запуск сервиса:
# /usr/local/etc/rc.d/openvpn start
Starting openvpn.
add net 172.17.0.0: gateway 172.17.0.2
Если стоит задача предоставлять пользователям через OpenVPN Интернет, то потребуется наличие NAT. Можно включить его поддержку через загружаемые модули, для этого в файл '/boot/loader.conf' надо добавить строки:
ipfw_nat_load="YES"
libalias_load="YES"
Пример настройки NAT IPFW:
${ipfw} nat 1 config if re0 reset same_ports
${ipfw} add nat 1 ip from 172.17.0.0/24 to any via $INT_if
${ipfw} add nat 1 ip from any to $EXT_ip
${ipfw} add allow all from any to any
Все, сервер OpenVPN установлен, настроен и запущен. Теперь можно заняться клиентами.
Создание клиентского сертификата OpenVPN
Описание приведено для сервера на операционной системе FreeBSD с установленным и настроеным, как описано выше, сервисом OpenVPN.
Сертификат генерируется из системной консоли сервера с правами суперпользователя из каталога easy-rsa:
cd /usr/local/etc/openvpn/easy-rsa/
$ cd /usr/local/etc/openvpn/easy-rsa/
$ sudo /bin/sh
# . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/etc/openvpn/easy-rsa/keys
# ./build-key ЛОГИН_ПОЛЬЗОВАТЕЛЯ
Generating a 1024 bit RSA private key
......++++++
....++++++
writing new private key to 'ЛОГИН_ПОЛЬЗОВАТЕЛЯ.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 source) [US]:RU
State or Province Name (full name) [CA]:ZC
Locality Name (eg, city) [SanFrancisco]:Zabubensk
Organization Name (eg, company) [Fort-Funston]:JSC Zabuba
Organizational Unit Name (eg, section) [changeme]:ITD
Common Name (eg, your name or your server's hostname) [ЛОГИН_ПОЛЬЗОВАТЕЛЯ]:
!----------------------------------------------------------------------!
! ВНИМАНИЕ ! использовать только латинские буквы. Кирилица не работает !
!----------------------------------------------------------------------!
Name [changeme]:ИМЯ ФАМИЛИЯ
Email Address [mail@host.domain]:ЛОГИН_ПОЛЬЗОВАТЕЛЯ@zabubensk.example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/etc/openvpn/easy-rsa/openssl-0.9.8.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'ZC'
localityName :PRINTABLE:'Zabubensk'
organizationName :PRINTABLE:'JSC Zabuba'
organizationalUnitName:PRINTABLE:'ITD'
commonName :PRINTABLE:'ЛОГИН_ПОЛЬЗОВАТЕЛЯ'
name :PRINTABLE:'ИМЯ ФАМИЛИЯ'
emailAddress :IA5STRING:'ЛОГИН_ПОЛЬЗОВАТЕЛЯ@zabubensk.example.com'
Certificate is to be certified until Nov 12 06:24:49 2023 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
#
# exit
В результате будут сгенерированы клиентские файлы сертификатов для подключения. Далее, необходимо создать файл `/usr/local/etc/openvpn/ccd/ЛОГИН_ПОЛЬЗОВАТЕЛЯ` с одной строкой вида:
$ sudo ee /usr/local/etc/openvpn/ccd/ЛОГИН_ПОЛЬЗОВАТЕЛЯ
ifconfig-push 172.17.0.118 172.17.0.117
Каждая пара адресов в ifconfig-push соответствует виртуальным IP-адресам конечных точек (клиента и сервера) — каждому клиенту в момент подключения назначается своя подсеть. Сюда-же можно добавить дополнительные маршруты, если клиенты подключаются к разным подсетям (филиалы, технические специалисты)
$ sudo ee /usr/local/etc/openvpn/ccd/ЛОГИН_ПОЛЬЗОВАТЕЛЯ
ifconfig-push 172.17.0.118 172.17.0.117
push "route 10.12.1.0 255.255.255.0"
push "route 10.12.2.0 255.255.255.0"
push "route 192.168.10.0 255.255.255.0"
Чтобы сохранить совместимость с Windows-клиентами и драйвером TAP-Win32 эти адреса должны быть взяты из следующих друг за другом подсетей с маской /30. Например, для диапазона `172.17.0.1-172.17.0.254` последний октет IP-адреса каждой пары клиент-сервер следует назначать из набора:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
Для удобства работы я создал текстовый файл «/usr/local/etc/openvpn/not_use_ip.txt» в котором перечислены свободные пары адресов, удаляемые по мере раздачи клиентам. Обратите внимание, что в конфигурационном фале первым задается назначаемый клиенту IP адрес (старший), вторым — адрес сервера (на единицу меньше).
После добавления клиента желательно перезапустить сервис OpenVPN:
$ sudo /usr/local/etc/rc.d/openvpn restart
Stopping openvpn.
Waiting for PIDS: 62293.
Starting openvpn.
add net 172.17.0.0: gateway 172.17.0.2
Клиенту необходимо передать пять файлов (ca.crt, vpn0.crt, vpn0.key, ta.key, vpn0.example.com.ovpn):
- /usr/local/share/doc/openvpn/easy-rsa/keys/ca.crt
- /usr/local/share/doc/openvpn/easy-rsa/keys/ЛОГИН_ПОЛЬЗОВАТЕЛЯ.crt → vpn0.crt
- /usr/local/share/doc/openvpn/easy-rsa/keys/ЛОГИН_ПОЛЬЗОВАТЕЛЯ.key → vpn0.key
- /usr/local/etc/openvpn/easy-rsa/keys/ta.key
- /usr/local/etc/openvpn/vpn0.example.com.ovpn
Перечисленные файлы копируются в отдельную (временную) папку с именем «config», файлы вида «ЛОГИН_ПОЛЬЗОВАТЕЛЯ.*» в ней переименовываются в «vpn0.*», папка упаковывается в архив и высылается пользователю электронной почтой со ссылкой на инструкцию по настройке клиентского подключения OpenVPN (см. ниже).
Инструкция по настройка клиентского подключения OpenVPN
(Для пользователей не имеющих технической подготовки)Для установки и настройки OpenVPN соединения необходимо вначале определить разрядность своей операционной системы. Для 32-разрядных систем установочный файл клиента OpenVPN оканчивается на "-i686.exe". Если же у Вас 64-разрядная MS-Windows, то Вам нужен файл, в названии которого есть "-x86_64.exe". Кроме того, для VPN подключения к сети Вам потребуются клиентские сертификаты и файл настройки, которые можно получить у системного администратора.
Для MS-Windows cкачайте и установите соответствующую клиентскую программу OpenVPN (для Android и iOS есть пакеты в собственных репозиториях market/store). Перейдите в каталог программы OpenVPN (C:Program Files\OpenVPN) и скопируте в него папку
config
со всем содержимым, полученную у системного администратора. В этой папке расположены ваши клиентские сертификаты и настройки подключения к серверу VPN.
Названия файлов в папке config у Вас могут незначительно отличаться. Запустите OpenVPN клиент от имени Администратора или измените свойства ярлыка на Рабочем столе (установить галочку “выполнять от имени администратора”).


Подключение к локальной сети предприятия через Интернет производися через контекстное меню или двойным кликом на иконке OpenVPN в системной области панели задач. Подключиться можно только находясь за пределами сети предприятия. Соединения изнутри сети сервер OpenVPN не принимает.

После успешного завершения процедуры подключения иконка OpenVPN в панели задач изменит цвет на зеленый и появится всплывающая подсказка с назначенным VPN-клиенту IP адресом. Адрес «привязыватся» к сертификату, поэтому с одним и тем-же сертификатом одновременно с двух и более рабочих мест работать не получится из-за конфликта адресов.
После подключения Вам станут доступны все сервисы (RDP, FTP, HTTP …) как по IP адресу так и по доменному имени в разрешенном системным администратором сегменте локальной сети, за исключением возможности подключения сетевых дисков, заблокированной по соображениям безопасности.
Документация и дистрибутив: