Reference Manual For OpenVPN 2.0 | OpenVPN

Introduction

OpenVPN is an open source VPN daemon by James Yonan. Because OpenVPN tries to be a universal VPN tool offering a great deal of flexibility, there are a lot of options on this manual page. If you’re new to OpenVPN, you might want to skip ahead to the examples section where you will see how to construct simple VPNs on the command line without even needing a configuration file.

Введение

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

Если что-то не работает

Последовательно проверьте, что вы ничего не упустили:

Если ничего не сработало, обращайтесь, поможем.

Client mode

Use client mode when connecting to an OpenVPN server which has –server, –server-bridge, or –mode serverin it’s configuration.

Copyright

Copyright (C) 2002-2022 OpenVPN Technologies, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

James Yonan [email protected]

Environmental variables

Once set, a variable is persisted indefinitely until it is reset by a new value or a restart,

As of OpenVPN 2.0-beta12, in server mode, environmental variables set by OpenVPN are scoped according to the client objects they are associated with, so there should not be any issues with scripts having access to stale, previously set variables which refer to different client instances.

Example 1: a simple tunnel without security

On may:

openvpn –remote june.kg –dev tun1 –ifconfig 10.4.0.1 10.4.0.2 –verb 9

On june:

openvpn –remote may.kg –dev tun1 –ifconfig 10.4.0.2 10.4.0.1 –verb 9

Now verify the tunnel is working by pinging across the tunnel.

On may:

ping 10.4.0.2

On june:

ping 10.4.0.1

The –verb 9 option will produce verbose output, similar to the tcpdump(8) program. Omit the –verb 9 option to have OpenVPN run quietly.

First build a static key on may.

openvpn –genkey –secret key

This command will build a random key file called key (in ascii format). Now copy key to june over a secure medium such as by using the scp(1) program.

On may:

openvpn –remote june.kg –dev tun1 –ifconfig 10.4.0.1 10.4.0.2 –verb 5 –secret key

On june:

openvpn –remote may.kg –dev tun1 –ifconfig 10.4.0.2 10.4.0.1 –verb 5 –secret key

Now verify the tunnel is working by pinging across the tunnel.

On may:

ping 10.4.0.2

On june:

ping 10.4.0.1

Example 3: a tunnel with full tls-based security

For this test, we will designate may as the TLS client and june as the TLS server. Note that client or server designation only has meaning for the TLS subsystem. It has no bearing on OpenVPN’s peer-to-peer, UDP-based communication model.

Examples

Prior to running these examples, you should have OpenVPN installed on two machines with network connectivity between them. If you have not yet installed OpenVPN, consult the INSTALL file included in the OpenVPN distribution.

Firewalls

OpenVPN’s usage of a single UDP port makes it fairly firewall-friendly. You should add an entry to your firewall rules to allow incoming OpenVPN packets. On Linux 2.4 :

iptables -A INPUT -p udp -s 1.2.3.4 –dport 1194 -j ACCEPT

This will allow incoming packets on UDP port 1194 (OpenVPN’s default UDP port) from an OpenVPN peer at 1.2.3.4.

If you are using HMAC-based packet authentication (the default in any of OpenVPN’s secure modes), having the firewall filter on source address can be considered optional, since HMAC packet authentication is a much more secure method of verifying the authenticity of a packet source. In that case:

iptables -A INPUT -p udp –dport 1194 -j ACCEPT

would be adequate and would not render the host inflexible with respect to its peer having a dynamic IP address.

OpenVPN also works well on stateful firewalls. In some cases, you may not need to add any static rules to the firewall list if you are using a stateful firewall that knows how to track UDP connections. If you specify –ping n, OpenVPN will be guaranteed to send a packet to its peer at least once every n seconds.

You should also add firewall rules to allow incoming IP traffic on TUN or TAP devices such as:

iptables -A INPUT -i tun -j ACCEPT

to allow input packets from tun devices,

iptables -A FORWARD -i tun -j ACCEPT

to allow input packets from tun devices to be forwarded to other hosts on the local network,

iptables -A INPUT -i tap -j ACCEPT

to allow input packets from tap devices, and

iptables -A FORWARD -i tap -j ACCEPT

to allow input packets from tap devices to be forwarded to other hosts on the local network.

These rules are secure if you use packet authentication, since no incoming packets will arrive on a TUN or TAP virtual device unless they first pass an HMAC authentication test.

Generate a random key:

Used only for non-TLS static key encryption mode.

–genkey
(Standalone) Generate a random key to be used as a shared secret, for use with the –secret option. This file must be shared with the peer over a pre-existing secure channel such as scp(1)
–secret file
Write key to file.

Options

OpenVPN allows any option to be placed either on the command line or in a configuration file. Though all command line options are preceded by a double-leading-dash (“–“), this prefix can be removed when an option is placed in a configuration file.

See also

dhcpcd(8), ifconfig(8), openssl(1), route(8), scp(1) ssh(1)

Server mode

Starting with OpenVPN 2.0, a multi-client TCP/UDP server mode is supported, and can be enabled with the –mode serveroption. In server mode, OpenVPN will listen on a single port for incoming client connections. All client connections will be routed through a single tun or tap interface.

Signals

SIGHUP
Cause OpenVPN to close all TUN/TAP and network connections, restart, re-read the configuration file (if any), and reopen TUN/TAP and network connections.
SIGUSR1
Like SIGHUP, except don’t re-read configuration file, and possibly don’t close and reopen TUN/TAP device, re-read key files, preserve local IP address/port, or preserve most recently authenticated remote IP address/port based on –persist-tun, –persist-key, –persist-local-ip, and –persist-remote-ipoptions respectively (see above).This signal may also be internally generated by a timeout condition, governed by the –ping-restart option.

This signal, when combined with –persist-remote-ip, may be sent when the underlying parameters of the host’s network interface change such as when the host is a DHCP client and is assigned a new IP address. See –ipchange above for more information.

SIGUSR2
Causes OpenVPN to display its current statistics (to the syslog file if –daemon is used, or stdout otherwise).
SIGINT, SIGTERM
Causes OpenVPN to exit gracefully.

Ssl library information:

–show-ciphers
(Standalone) Show all cipher algorithms to use with the –cipher option.
–show-digests
(Standalone) Show all message digest algorithms to use with the –auth option.
–show-tls
(Standalone) Show all TLS ciphers (TLS used only as a control channel). The TLS ciphers will be sorted from highest preference (most secure) to lowest.
–show-engines
(Standalone) Show currently available hardware-based crypto acceleration engines supported by the OpenSSL library.

String types and remapping

In certain cases, OpenVPN will perform remapping of characters in strings. Essentially, any characters outside the set of permitted characters for each string type will be converted to underbar (‘_’).

Q: Why is string remapping necessary?

A: It’s an important security feature to prevent the malicious coding of strings from untrusted sources to be passed as parameters to scripts, saved in the environment, used as a common name, translated to a filename, etc.

Here is a brief rundown of OpenVPN’s current string types and the permitted character class for each string:

X509 Names: Alphanumeric, underbar (‘_’), dash (‘-‘), dot (‘.’), at (‘@’), colon (‘:’), slash (‘/’), and equal (‘=’). Alphanumeric is defined as a character which will cause the C library isalnum() function to return true.

Common Names: Alphanumeric, underbar (‘_’), dash (‘-‘), dot (‘.’), and at (‘@’).

Synopsis

openvpn [ –help ]

openvpn [ –config file ]

openvpn [ –genkey ] [ –secret file ]

openvpn [ –mktun ] [ –rmtun ] [ –dev tunX | tapX ] [ –dev-type device-type ] [ –dev-node node ]

openvpn [ –test-crypto ] [ –secret file ] [ –auth alg ] [ –cipher alg ] [ –engine ] [ –keysize n ] [ –no-replay ] [ –no-iv ]

Tun/tap driver setup

If you are running Linux 2.4.7 or higher, you probably have the TUN/TAP driver already installed. If so, there are still a few things you need to do:

Make device: mknod /dev/net/tun c 10 200

Load driver: modprobe tun

Tun/tap persistent tunnel config mode:

Available with linux 2.4.7 . These options comprise a standalone mode of OpenVPN which can be used to create and delete persistent tunnels.

–mktun
(Standalone) Create a persistent tunnel on platforms which support them such as Linux. Normally TUN/TAP tunnels exist only for the period of time that an application has them open. This option takes advantage of the TUN/TAP driver’s ability to build persistent tunnels that live through multiple instantiations of OpenVPN and die only when they are deleted or the machine is rebooted.One of the advantages of persistent tunnels is that they eliminate the need for separate –up and –down scripts to run the appropriate ifconfig(8) and route(8) commands. These commands can be placed in the the same shell script which starts or terminates an OpenVPN session.

Another advantage is that open connections through the TUN/TAP-based tunnel will not be reset if the OpenVPN peer restarts. This can be useful to provide uninterrupted connectivity through the tunnel in the event of a DHCP reset of the peer’s public IP address (see the –ipchange option above).

One disadvantage of persistent tunnels is that it is harder to automatically configure their MTU value (see –link-mtu and –tun-mtu above).

On some platforms such as Windows, TAP-Win32 tunnels are persistent by default.

–rmtun
(Standalone) Remove a persistent tunnel.
–dev tunX | tapX
TUN/TAP device

Tun/tap setup:

If you are using Linux 2.4 or higher, make the tun device node and load the tun module:

mknod /dev/net/tun c 10 200
modprobe tun

If you installed from RPM, the mknod step may be omitted, because the RPM install does that for you.

Vpn address setup:

For purposes of our example, our two machines will be called may.kg and june.kg. If you are constructing a VPN over the internet, then replace may.kg and june.kgwith the internet hostname or IP address that each machine will use to contact the other over the internet.

Now we will choose the tunnel endpoints. Tunnel endpoints are private IP addresses that only have meaning in the context of the VPN. Each machine will use the tunnel endpoint of the other machine to access it over the VPN. In our example, the tunnel endpoint for may.kg will be 10.4.0.1 and for june.kg, 10.4.0.2.

Once the VPN is established, you have essentially created a secure alternate path between the two hosts which is addressed by using the tunnel endpoints. You can control which network traffic passes between the hosts (a) over the VPN or (b) independently of the VPN, by choosing whether to use (a)

the VPN endpoint address or (b) the public internet address, to access the remote host. For example if you are on may.kg and you wish to connect to june.kg via sshwithout using the VPN (since ssh has its own built-in security) you would use the command ssh june.kg.

You can use any address you wish for the tunnel endpoints but make sure that they are private addresses (such as those that begin with 10 or 192.168) and that they are not part of any existing subnet on the networks of either peer, unless you are bridging.

Аудитория


Статья предназначена для Linux системных администраторов.

Базовая настройка сервиса openvpn

В интернете есть большое число интересных и подробных статей, описывающих установку OpenVPN. Здесь мы рассмотрим моменты установки очень кратко.• Подключаем EPEL репозиторий

[root@openvpn1 ~]# yum install epel-release -y

• Устанавливаем пакеты openvpn

[root@openvpn1 ~]# yum install openvpn  easy-rsa -y

• Копируем демонстрационный конфиг

[root@openvpn1 ~]#  cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/

• Правим конфигурационный файл (для примера, так как конфигурационный файл показан ниже):

Генерация сертификатов и необходимых файлов безопасности

• Генерируем файл Diffie-Hellman

[root@openvpn1 ~]#  openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
............ .........................................................................................................................................................
........................................................................................................................................................................ .................................................................................. .......................................................................................................................................................................................................................................................................................................  *  *

• Генерируем файл ta.key

[root@openvpn1 ~]#  openvpn --genkey --secret /etc/openvpn/ta.key

• Настраиваем среду для easy-rsa

[root@openvpn1 ~]# mkdir -p /etc/openvpn/easy-rsa/keys
[root@openvpn1 ~]# cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
[root@openvpn1 ~]# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

• Правим файл /etc/openvpn/easy-rsa/vars

Исходные данные


Имеем инфраструктуру, которая включает несколько серверов, где все сервисы реализованы в виде контейнеров LXC. Данная инфраструктура уже включат в себя следующие настроенные серверы:

Все контейнеры управляются через LXC драйвер для libvirt. Предполагается, что все последующие сервисы мы тоже развернем в LXC драйвере для libvirt.

На сервере server1 доступ контейнеров в сеть осуществляется через сетевой мост с именем br0.

Для подключения к LDAP серверу выдана учетная запись.

Настройка openvpn развернутое руководство и видео в 2022 [айти бубен]

Reference Manual For OpenVPN 2.0 | OpenVPN

OpenVPN — это приложение для создания безопасного IP-туннеля через единый UDP– или Порты TCP-порт 1194. Для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/TLSv1) т.е. доступны все возможности шифрования, аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация Алгоритм HMAC для OpenVPN, для обеспечения большей безопасности, и аппаратное ускорение для улучшения производительности шифрования.

OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.

  1. Предустановленный ключ, — самый простой метод.

  2. С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).

OpenVPN может использовать статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT преобразование сетевых адресов или через полноценный межсетевой экран (например, Правила iptables в Linux).

Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.

В первую очередь нужно арендовать виртуальный сервер VPS/VDS c root-доступом к операционной системе, с постоянным IP- адресом. Если вы собираетесь использовать сервер только в качестве VPN сервера, то вам не нужны дополнительные панели управления, типа ISPmanager, Hestia.

Не все хостинг-провайдеры разрешают использование VPN-серверов, поэтому перед заказом услуги предварительно у техподдержки узнайте разрешают ли они использование VPN сервера.

Рекомендация: если вам нужен доступ доступ к российским сайтам (Яндекс.Директ, Яндекс Почта, Wordstat, Вконтакте, Одноклассники, Mail.ru), то на мой взгляд, стоит выбрать российские сервера, например проверенный Timeweb. Для тех, кому нужен доступ к заблокированным в Российской Федерации сайтам, нужно арендовать сервер за пределами России, например ТОП 3 хостинг провайдеров.

Безопасность и шифрование в OpenVPN обеспечивается библиотекой Как пользоваться OpenSSL и протоколом транспортного уровня Transport Layer Security (TLS). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers (Что такое SSL сертификат для сайта, почты).

В OpenSSL может использоваться симметричная и ассиметричная криптография.

В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет.

Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный).

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

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

Для безопасной передачи данных необходимо идентифицировать стороны, принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой “атаки посредника” (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться, удалять или изменять данные.

Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure, PKI) и асимметричную криптографию.

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

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

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

Если вы используете надстройку над iptables UFW, выполните нижеприведенные действия.

Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:

ip route|grep default

Публичный интерфейс должен следовать за словом “dev”.
Зная название интерфейса откроем файл /etc/ufw/before.rules и добавим туда соответствующие настройки:

sudonano/etc/ufw/before.rules

Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила, применяемые по умолчанию, к цепочке POSTROUTING в таблице nat.

Не забудьте заменить eth0 в строке -A POSTROUTING на имя интерфейса, найденное нами ранее.

## rules.before## Rules that should be run before the ufw command line added rules. Custom# rules should be added to one of these chains:#   ufw-before-input#   ufw-before-output#   ufw-before-forward#
 
# START OPENVPN RULES# NAT table rules*nat
:POSTROUTING ACCEPT [0:0]# Allow traffic from OpenVPN client to eth0-A POSTROUTING -s 10.8.0.0/8-o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
 
# Don't delete these required lines, otherwise there will be errors*filter
. . .

Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /etc/default/ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Далее настроим сам файрвол для разрешения трафика в OpenVPN.

Если вы не меняли порт и протокол в файле /etc/openvpn/server.conf, вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки, введите указанные вами значения.

sudo ufw allow 1194/udp

Теперь деактивируем и активируем UFW для применения внесённых изменений:

sudo ufw disable
sudo ufw enable

Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию openvpn-ca для начала настройки центра сертификации:

cd ~/openvpn-ca

В этом каталоге есть файл с именем vars, создайте его копию.

cp vars vars.original

Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:

nano vars

Внутри файла вы найдёте переменные, которые можно отредактировать, и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных.

Чтобы в дальнейшем, при создании сертификатов, не появлялась ошибка про отсутствие файла openssl.cnf, вы можете пойти двумя путями. Первый просто переименовать нужный файл.

cp openssl-1.0.0.cnf openssl.cnf

И второй путь, отредактировать в файле vars параметр export KEY_CONFIG:

# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
#export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf

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

~/openvpn-ca/vars
. . .
 
exportKEY_COUNTRY="US"exportKEY_PROVINCE="CA"exportKEY_CITY="SanFrancisco"exportKEY_ORG="Fort-Funston"exportKEY_EMAIL="[email protected]"exportKEY_OU="MyOrganizationalUnit"
 
. . .

Замените значения, на что-нибудь другое, не оставляйте их не заполненными:

~/openvpn-ca/vars
. . .
 
exportKEY_COUNTRY="UA"exportKEY_PROVINCE="NY"exportKEY_CITY="Kharkiv"exportKEY_ORG="Mirax"exportKEY_EMAIL="[email protected]"exportKEY_OU="MyPersonal"
 
. . .

Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя:

~/openvpn-ca/vars
exportKEY_NAME="server"

Сохраните и закройте файл.

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

Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:

Внимание: Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например, при копировании созданных файлов в директорию /etc/openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /etc/openvpn/server.conf для того, чтобы он указывал на корректные .crt и .key файлы.

./build-key-server server

Вывод опять будет содержать значения по умолчанию, переданные этой команде (server), а также значения из файла vars.

Согласитесь со всеми значениями по умолчанию, нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:

Вывод

. . .

Certificate is to be certified until May  1 17:51:16 2026 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

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

./build-dh

Для завершения этой команды может потребоваться несколько минут.

Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL:

openvpn --genkey --secret keys/ta.key

В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды, выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:

  1. добавляет клиенту маршрут к локальной подсети центрального офиса(push “route 192.168.1.0 255.255.255.0”)

  2. определяет адрес локальной подсети, находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)

  3. привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22), где ifconfig-push <IP-адрес клиента> <IP-адрес сервера>. Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN).

# mkdir /etc/openvpn/ccd
# nano ccd/farm1c
push "route 192.168.1.0 255.255.255.0"
#push "route 192.168.35.0 255.255.255.0"
# static IP
ifconfig-push 192.168.14.21 192.168.14.22
#iroute 192.168.2.0 255.255.255.0

Сотрудники увольняются и им нужно запретить доступ к VPN. Значит нужно отозвать их сертификат. Команда revoke-full с именем клиента используется для отзыва ssl сертификата OpenVPN.

Если нет файла .rnd (это файл генератора псевдослучайных чисел) в каталоге пользователя, от имени которого вы создаете сертификаты, выполните командой:

$ cd
$ touch .rnd
default_crl_days= 3000# how long before next CRL

Переходим в директорию центра сертификации и вводим команды:

$ cd ~/openvpn-ca
$ source vars

Отзываем сертификат используя команду revoke-full с именем клиента, например client1.

$ ./revoke-full client1

В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.
Теперь нужно объяснить серверу OpenvPN, где ему брать информацию об отозванных сертификатах, для этого используется директива crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов из файла каждый раз crl.pem, когда кто-то устанавливает соединение с сервером.

Копируем crl.pem в каталог. В конце файла /etc/openvpn/server.conf задаем путь через директиву crl-verify

crl-verify crl.pem

Перезапускаем сервер OpenVPN

# service openvpn restart

Теперь клиент не сможет устанавливать соединение с сервером OpenVPN используя старый сертификат, в логе сервера будет появляться строка о том что сертификат отозван: VERIFY ERROR: depth=0, error=certificate revoked. В логе OpenVPN клиента будет написано:

Wed Aug 2514:28:09 2021 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Wed Aug 2514:28:09 2021 TLS Error: TLS handshake failed

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

Если у вас 2 сервера openvpn, вам следует переименовать crl.pem и в crl-verify задать файл со своим именем. Просто для второго сервера копируем и переименовываем crl.pem например в crltcp.pem. Если вы укажите один и тот же файл для разных OpebVPN серверов – ваши сервера будут падать.

Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN

Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)

Поскольку VPN действует только в режиме точка-точка, может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера, а не только с самим сервером.

Чтобы проиллюстрировать это примером, предположим, что в локальной сети на стороне сервера используется подсеть 10.66.0.0/24 и для пула VPN-адресов используется 10.8.0.0/24, о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.

Во-первых, вы должны сообщить VPN-клиентам, что подсеть 10.66.0.0/24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:

push "route 10.66.0.0 255.255.255.0"

Далее, необходимо настроить на LAN– шлюзе в сети сервера маршрут для маршрутизации пакетов, предназначенных для подсети VPN-клиентов (10.8.0.0/24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз – разные машины).

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

Откройте файл /etc/openvpn/server.conf и добавьте плагин для аутентификации с помощью PAM модуля

plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

Плагин может находиться в директории /usr/lib/openvpn/plugins/ или /usr/lib64/openvpn/plugins/ в зависимости от вашей системы.

Далее создайте файл для service-type openvpn

$ sudo vi /etc/pam.d/openvpn

и впишите в него

первая строчка подключает PAM модуль pam_radius_auth с параметрами:

Настройка мультифактора

Зайдите в систему управления Мультифактором, зайдите в раздел “Ресурсы” и создайте новый OpenVPN.
После создания вам будут доступны два параметра: NAS-IDentifier и Shared Secret, они потребуются для последующий настройки.

Принцип работы

  1. OpenVPN использует плагин openvpn-plugin-auth-pam для проверки подлинности
  2. Плагин запрашивает второй фактор через RADIUS протокол в сервисе Мультифактора
  3. Пользователь подтверждает в телефоне запрос доступа или вводит одноразовый код и подключается к VPN

Приступаем к настройке

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

OpenVPN-channels-pass-002.jpg

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

В процессе установки в систему инсталлируется виртуальный сетевой адаптер TAP-Win32 Adapter V9 и, соответственно, драйвер к нему. Этому интерфейсу программа OpenVPN как раз и будет назначать IP адрес и маску виртуальной сети OpenVPN. В нашем случае ему назначен адрес 10.10.10.1с маской 255.255.255.0 на сервере С_ОФ1 и 10.10.10.2 с аналогичной маской на клиенте С_ОФ2.

Переименуем его в “VPN”

OpenVPN-channels-pass-020.jpg
В директории “C:OpenVPN” следует сразу же создать дополнительно папку ssl (здесь мы будем хранить ключи аутентификации) папку ccd (здесь будут находится конфигурация настроек сервера для клиента).

В папке easy-rsa создаем файл vars.bat, данный пакетный файл будет задавать переменные для сеанса генерации сертификатов, в той части что касается организации и расположения заполняем своими данными.

Про openvpn

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


В интернете существует огромное множество статей, описывающих OpenVPN и его настройку.

Установка openvpn сервера

В интернете множество статей, описывающих процесс установки и настройки OpenVPN, поэтому мы не будем их дублировать. Если вам нужна помощь, в конце статьи есть несколько ссылок на обучающие материалы.

Установка контейнера lxc

• Подключаемся к гипервизору server1

• Создаем инфраструктуру контейнера с описанием репозиториев

[root@server1 /]# mkdir -p /var/lib/libvirt/lxc/openvpn1/etc/yum.repos.d/
[root@server1 /]# cp /etc/yum.repos.d/CentOS-Base.repo /var/lib/libvirt/lxc/openvpn1/etc/yum.repos.d/
[root@server1 /]# cd /var/lib/libvirt/lxc/openvpn1/etc/yum.repos.d
[root@server1 yum.repos.d]# sed -ie 's/$releasever/7/g' CentOS-Base.repo

Суть данных операций сводится к тому, чтобы произвести установку CentOS через yum, что обязательно потребует указания пути до репозиториев. Файл конфигурации yum нужно создать до начала процесса установки, чтобы yum знал откуда скачивать пакеты. Предполагается, что файлы контейнера openvpn1 будут располагаться в каталоге /var/lib/libvirt/lxc/openvpn1. Вам следует предусмотреть достаточно дискового пространства в этой файловой системе.

• Устанавливаем базовые файлы CentOS 7 с использованием опции указания места установки (–installroot):

[root@server1 yum.repos.d]# yum groupinstall core --installroot=/var/lib/libvirt/lxc/openvpn1/  --nogpgcheck -y

• Устанавливаем пароль пользователя root в контейнере

Цель статьи


Основная цель статьи – показать один из возможных сценариев настройки системы VPN доступа на базе OpenVPN с аутентификацией из LDAP (FreeIPA)

Похожее:  Авторизация по логину и паролю для клиентов OpenVPN? — Хабр Q&A

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *