Инструменты пользователя

Инструменты сайта


Боковая панель

.

openvpn

Содержание

Настройка и использование сервера OpenVPN

Что такое 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.

  • OpenVPN предлагает пользователю несколько видов аутентификации:
  1. Предустановленный ключ, — самый простой метод.
  2. Сертификатная Аутентификация, — наиболее гибкий в настройках метод.
  3. С помощью логина и пароля, — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).

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

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

Компоненты сети OpenVPN

Основные компоненты сети OpenVPN и объекты

  • Удостоверяющий центр CA. Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. Управляет списком отзыва сертификатов CRL.
  • Сервер OpenVPN. ПО сервера OpenVPN создает туннель внутри незащищенной сети, например, Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.
  • Клиент OpenVPN. ПО клиента OpenVPN устанавливается на все узлы, которым необходим защищенный канал передачи данный с сервером OpenVPN. При соответствующей настройка сервера OpenVPN возможна защищенная передача данных между клиентами OpenVPN, а не только между клиентами и сервером OpenVPN.
  • Сертификаты (публичные ключи) X.509. Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону, передающую зашифрованные данные. Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.
  • Приватные ключи. Приватные ключи секретные. Они должны создаваться и храниться на каждом узле сети OpenVPN, предназначены для расшифрования данных и никогда не должны передаваться по сети. Приватные ключи создаются на узлах сети OpenVPN одновременно с файлом запроса на получение сертификата.
  • Список отзыва сертификатов CRL. Содержит список сертификатов, утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL. После создания и каждого изменения список CRL переносится на серверы OpenVPN.
  • Файл Диффи-Хелмана. Используется, чтобы в случае похищения ключей исключить расшифрование трафика, записанного еще до этого похищения. Создается на сервере OpenVPN.
  • Статический ключ Алгоритм HMAC для OpenVPN.

OpenVPN безопасность и шифрование

Безопасность и шифрование в 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) и асимметричную криптографию.

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

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

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

ШАГ 0: Постановка задачи структура сетей под управлением OpenVPN

Задача:

  1. Настроить сервер OpenVPN Ubuntu 18.04.4 LTS в облаке. Выбор Linux сервера для OpenVPN: Облачная технология от DigitalOcean, Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам, прекрасная связь с Украиной в этом центре.
  2. Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/ключами: создание, удаление и отзыв сертификатов клиентов OpenVPN

Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения. Подключаемые удаленные офисы:

  1. Офис Московский: 4 локальных сети со шлюзом под управлением Debian GNU/Linux 7.11 (wheezy)
  2. Офис Данилевского: 1 локальная сеть шлюз MikroTik
  3. Офис Гагарина 1: 1 локальная сеть
  4. Офис Гагарина 2: 1 локальная сеть шлюз MikroTik RB2011UiAS-2HnD-IN

Клиенты:

  1. Мобильные клиенты на Android
  2. Удаленные клиенты Windows 10

Инструкция по управлению сертификатами/ключами клиентов OPenVPN

Создание нового сертификата пользователя, под правами обычного пользователя (не root).

  • Шаг 1: создание сертификата пользователя
cd ~/openvpn-ca
source vars
./build-key zabbix
  • Шаг 2: создания ovpn файла для программы клиента. Этот файл должен быть передан пользователю, для настройки его клиента
cd ~/client-configs
./make_config.sh zabbix
  • Шаг 3: При необходимости создаем ccd файл, с дополнительными настройками. Например вы хотите клиенту разрешить доступ к локальным сетям за другим клиентом OpenVPN:
cp /etc/openvpn/ccd/base.client /etc/openvpn/ccd/zabbix

Шаблон base.client содержит комментированные строки такого содержания

base.client
$ cat base.client
 
#ifconfig-push 10.8.0.21 10.8.0.22
#push "route 192.168.35.0 255.255.255.0"
#push "route 192.168.22.0 255.255.255.0"
#push "route 10.90.91.0 255.255.255.0"
#iroute 192.168.35.0 255.255.255.0
#iroute 192.168.22.0 255.255.255.0
#iroute 10.90.91.0 255.255.255.0
# all trafic to VPN
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 208.67.222.222"
#push "dhcp-option DNS 208.67.220.220"

Для отзыва дополнительных сертификатов выполните следующие шаги:

  1. Сгенерируйте новый список отозванных сертификатов используя команду source vars в директории ~/openvpn-ca и выполняя команду revoke-full с именем клиента.
  2. Скопируйте новый список отозванных сертификатов в директорию /etc/openvpn перезаписав тем самым старый список.
  3. Перезапустите сервис OpenVPN.

ШАГ 1: ВИДЕО Настройка сетевой конфигурации Linux для OpenVPN: iptables/UFW, ядро Linux

Настройка сетевой конфигурации Linux - сервера для безопасной работы сервера OpenVPN: iptables/UFW, ядро Linux.

Делаем первичную настройку безопасности Ubuntu 18.04. Iptables при помощи ufw разрешаем только SSH.

Многим удобнее смотреть, чем читать. Ниже видео версия этого руководства. Настоятельно рекомендую руководство прочитать!

Общие рекомендации по настройки безопасного сервера OpenVPN

  • Используйте proto udp, потому что он по сравнению с TCP обеспечивает более надежную защиту от DoS-атак и сканирования портов.
  • Используйте Алгоритм HMAC для OpenVPN
  • Запускайте демон OpenVPN сервера от имени непривилегированного пользователя: user nobody group nobody

Настройка перенаправления IP пакетов в ядре Linux сервера

Необходимо настроить сетевую конфигурацию сервера, чтобы OpenVPN мог корректно перенаправлять трафик. Инструкция применима для операционных систем на базе Linux ядра: Debian, Ubuntu, CentOS и т.д..

Разрешим серверу перенаправлять трафик, настройка производится в файле /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Найдите строку настройки net.ipv4.ip_forward. Удалите “#” из начала строки, чтобы раскомментировать её. Для применения настроек к текущей сессии наберите команду:

sudo sysctl -p

Настройка фаервола для сервера OpenVPN

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

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

Настройка iptables для OpenVPN

Firewall iptables: Открываем UDP порт 1194 и разрешаем пакеты приходящие с интерфейса TUN и TAP или tun.

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
or
iptables -A INPUT -i tun+ -j ACCEPT
# для динамического IP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Настройка UFW (iptables) для OpenVPN

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

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

ip route | grep default

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

sudo nano /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

Шаг 2: Установка OpenVPN Ubuntu

Сначала установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях Ubuntu, мы можем использовать apt для его установки. Также мы установим пакет easy-rsa, который позволит нам настроить наш собственный внутренний центр сертификации (certificate authority, CA) для использования с нашей VPN.

Обновим список пакетов сервера и установим необходимые пакеты следующими командами:

sudo apt update
sudo apt full-upgrade
sudo apt install openvpn easy-rsa

Шаг 3: Создание директории центра сертификации

OpenVPN это виртуальная частная сеть, использующая TLS/SSL. Это означает, что OpenVPN использует сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов (trusted certificates) нам потребуется создать наш собственный центр сертификации.

Первый вариант копирования файлов easy-rsa

cp -r /usr/share/easy-rsa  /etc/openvpn/
cd /etc/openvpn/easy-rsa

Но я буду использовать второй вариант копирования файлов easy-rsa Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:

make-cadir ~/openvpn-ca

Шаг 4: Настройка переменных EasyRSA и построение CA

Откройте на компьютере 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
. . .
 
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
 
. . .

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

~/openvpn-ca/vars
. . .
 
export KEY_COUNTRY="UA"
export KEY_PROVINCE="NY"
export KEY_CITY="Kharkiv"
export KEY_ORG="Mirax"
export KEY_EMAIL="darkfire@example.com"
export KEY_OU="MyPersonal"
 
. . .

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

~/openvpn-ca/vars
export KEY_NAME="server"

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

Шаг 5: Создание центра сертификации

Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации.

Убедитесь, что вы находитесь в директории центра сертификации и используйте команду source к файлу vars:

cd ~/openvpn-ca
source vars

Вы должны увидеть следующий вывод:

Вывод

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

Возможно вам нужно будет переименовать файл:

cp openssl-1.0.0.cnf openssl.cnf

Убедимся, что мы работаем в “чистой среде” выполнив следующую команду:

./clean-all

Теперь мы можем создать наш корневой центр сертификации командой:

./build-ca

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

В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL.

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

Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов.

Шаг 6: Создание сертификата сервера, ключа и файлов шифрования

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

Начнём с создания сертификата 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

Шаг 7: Создание сертификата и пары ключей для клиента

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

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

Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа.

Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:

cd ~/openvpn-ca
source vars
./build-key client1

Для создания файлов, защищённых паролем, используйте команду build-key-pass:

cd ~/openvpn-ca
source vars
./build-key-pass client1

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

Шаг 8: Настройка конфигурационного файла сервера OpenVPN

Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов.

Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /etc/openvpn.

Сначала скопируем созданные нами файлы. Они находятся в директории ~/openvpn-ca/keys, в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman:

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию, мы будем использовать этот файл в качестве базы для наших настроек:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Изменения вносимые в скопированный конфигурационный файл /etc/openvpn/server.conf. Приведенные ниже директивы, нужно или добавить или раскомментировать, а директиву cipher заменить.

tls-auth ta.key 0
key-direction
cipher AES-128-CBC
auth SHA256
user nobody
group nogroup

Рабочий конфигурационный файл OpenVPN сервера:

server.conf
;local a.b.c.d
local xxx.xxx.xxx.xxx
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
push "route 192.168.35.0 255.255.255.0"
client-config-dir ccd
route 192.168.35.0 255.255.255.0
route 192.168.22.0 255.255.255.0
route 10.90.91.0 255.255.255.0
# маршрут передается всем клиентам
push "route 192.168.35.0 255.255.255.0"
;push "redirect-gateway def1 bypass-dhcp"
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
client-to-client
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
key-direction 0
cipher AES-128-CBC
auth SHA256
;compress lz4-v2
;push "compress lz4-v2"
;comp-lzo
max-clients 100
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
;log-append  /var/log/openvpn/openvpn.log
verb 3
;mute 20
explicit-exit-notify 1

Шаг 9: Включение и запуск сервиса OpenVPN

Включим сервис OpenVPN с помощью systemd.

При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /etc/openvpn/server.conf, поэтому мы добавим @server в конец имени файла при его вызове:

sudo systemctl start openvpn@server

Убедимся, что сервис успешно запущен командой:

sudo systemctl status openvpn@server

Если всё в порядке, настроем сервис на автоматическое включение при загрузке сервера:

sudo systemctl enable openvpn@server

Шаг 10: Создание инфраструктуры для конфигурационных файлов клиентов

Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:

mkdir -p ~/client-configs/files

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

chmod 700 ~/client-configs/files

Создание базовой конфигурации: Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Откройте этот файл в вашем текстовом редакторе:

nano ~/client-configs/base.conf

Работающий base.conf. Я привел его одинаковым настройкам с сервером, изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote.

Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf нужно раскомментировать три нижние строчки.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
base.conf
client
dev tun
proto udp
;remote xxx.xxx.xxx.xxx 1194
remote vpn8.example.net 1194
resolv-retry infinite
nobind
#user nobody
#group nogroup
persist-key
persist-tun
#ca ca.crt
#cert client.crt
#key client.key
remote-cert-tls server
tls-auth ta.key 1
#cipher AES-256-CBC
cipher AES-128-CBC
auth SHA256
#comp-lzo
verb 3
;mute 20
key-direction 1
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

ШАГ 11: Создание скрипта генерации файлов конфигурации клиента

Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами, ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/client-configs/files.

Создайте и откройте файл make_config.sh внутри директории ~/client-configs:

nano ~/client-configs/make_config.sh

Вставьте следующие текст в этот файл:

make_config.sh
~/client-configs/make_config.sh
#!/bin/bash
 
# First argument: Client identifier
 
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
 
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

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

Сделайте его исполняемым файлом командой:

chmod 700 ~/client-configs/make_config.sh

ШАГ 12: Генерация конфигурационных файлов клиентов

Теперь легко и понятно можно генерировать файлы конфигурации клиентов.

Если вы следовали всем шагам этой статьи, вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на шаге 7. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/client-configs и используя только что созданный нами скрипт:

cd ~/client-configs
./make_config.sh client1

Если всё прошло успешно, мы должны получить файл client1.ovpn в директории ~/client-configs/files:

ls ~/client-configs/files
 
client1.ovpn

Теперь вы должны скопировать или переместить полученный файл конфигурации на клиентское устройство: на компьютер или смартфон.

ШАГ 13: Клиенты OpenVPN для разных ОС Windows, Android, MikroTik, Ubuntu

ШАГ 14: (Опционально) Директория ccd клиенты OpenVPN

В директории 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

Шаг 15: Отзыв клиентских сертификатов

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

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

$ cd
$ touch .rnd

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

$ 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

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

FAQ OpenVPN

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

Почему OpenVPN не работает через PPPoE

Проблема: Если сервер подключён к ISP при помощи технологии Как работает PPPoE, в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:

# netstat -rn
Kernel IP routing table              
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 ppp0

Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс, такой записи сервер OpenVPN не понимает, для корректной работы сервера OpenVpn маршрут должен бы вида:

# netstat -rn
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         91.196.96.35    255.255.255.255 UGH       0 0          0 ppp0

Решение: Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)

route add 0/0 gw 91.196.96.35

или в скрипте при загрузке системы, но после поднятия интерфейса ppp0

route del default
route add default gw 91.196.96.35 dev ppp0

Проблема не работает OpenVPN push dhcp-option + Virtualbox + Dnsmasq

Окружение: Клиент выходит в интернет с Ubuntu 14.04.3 LTS + Настройка Dnsmasq Ubuntu установленной в FAQ VirtualBox. Сеть установлена в VirtualBox как сетевой мост. IP получается от Настройка DHCP сервера Linux, FreeBSD на интернет роутере (Netis WF2419R).

Проблема: Не работает push "dhcp-option DNS 10.26.95.254". Соответственно все Что такое DNS Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные Что такое DNS.

Решение: Был доустановлен основной пакет

aptitude install dnsmasq

добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf

server=/gaga.lan/10.26.95.254
server=/m86a.lan/10.26.95.254
server=/atlex.lan/10.26.95.254
 
server=/95.26.10.in-addr.arpa/10.26.95.254
server=/168.192.in-addr.arpa/10.26.95.254
server=/85.161.10.in-addr.arpa/10.26.95.254

Как настроить ротацию логов OpenVPN

В файле /etc/logrotate.d/openvpn прописываем настройки для приложения logrotate, ключевой параметр copytruncate (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)

openvpn
etc/openvpn/servers/vpnluxor/logs/openvpn.log {
        daily
        rotate 8
        compress
        delaycompress
        missingok
        copytruncate
        notifempty
        create 640 root
}

Как управлять OpenVPN сертификатами через web интерфейс?

Для управления сертификатами/клиентами сервера OpenVPN при помощи веб-интерфейса существует не так много программ:

  • Модуль на основе Webmin: OpenVpn Admin Module + пример настройки OpenVPN Server
  • OpenVPN-PHP-Gui MIT License
  • OpenVPN Access Server платный вариант, требуется покупка лицензии

Какие SSL сертификаты, ключи использует OpenVPN? Где ключи OpenVPN должны размещаться?

  • ca.crt — файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файла ca.crt потребуется для вашего сервера и для всех ваших клиентов.
  • ca.key — закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлу ca.key, он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файл ca.key должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать, когда он не используется для подписывания запросов сертификатов.
Файл Машина Назначение Доступ
ca.crt Сервер и клиенты Сертификат корневого СА Публичный
ca.key Только на сервере Необходим для подписи других сертификатов Секретный
dh{n}.pem Только на сервере Diffie Hellman параметры Публичный
vpnspar.crt Только на сервере Сертификат сервера Публичный
vpnspar.key Только на сервере Ключ сервера Секретный
darkfire.crt Только на клиенте Сертификат клиента Публичный
darkfire.key Только на клиенте Ключ клиента Секретный

Где взять последнее работающее пошаговое руководство по настройке сервера и клиентов OpenVPN?

Подборка руководств по настройке сервера и клиентов OpenVPN.

В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов, которым я доверяю.

Как расширить сетевые границ при помощи 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-шлюз – разные машины).

Убедитесь, что вы включили пересылку для IP (ip-forwarding) (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.

Как настроить VPN соединение для всего своего трафика?

Проталкивание изменений DNS для перенаправления всего трафика через VPN.

Сделанные нами настройки создают VPN соединение между двумя машинами, но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика, вам необходимо протолкнуть (push) настройки DNS на клиентские машины.

Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.

Как настроить автозапуск клиента openvpn windows 10?

Для автоматическое подключение ovpn, нужно изменить ярлык на рабочем столе:

openvpn-gui.exe --connect myprofile.ovpn

Для автоматического запуска такого файла поместите его в автозагрузку, в директории для всех пользователей, %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup; или для конкретного пользователя, %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup.)

Или используйте руководство Автозагрузка программ Windows 10.
openvpn.txt · Последнее изменение: 2020/06/13 13:46 (внешнее изменение)