Tutorial

Как настроить сервер OpenVPN в Ubuntu 16.04

Published on December 21, 2016
Русский
Как настроить сервер OpenVPN в Ubuntu 16.04

Введение

Хотите иметь безопасный и защищённый доступ в Интернет с вашего смартфона или ноутбука при подключении к незащищённой сети через WiFi отеля или кафе? Виртуальная частная сеть (Virtual Private Network, VPN) позволяет использовать незащищённые сети таким образом, как если бы вы работали в частной сети. Весь ваш трафик в этом случае проходит через VPN-сервер.

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

OpenVPN представляет собой мощное и гибко настраиваемое программное обеспечение с открытым исходным кодом для работы с Secure Socket Layer (SSL) VPN. В этой статье мы установим и настроим OpenVPN сервер, а также научимся осуществлять к нему доступ из Windows, Mac OS, iOS и Android. Для этого мы выполним несколько простых шагов.

Необходимые условия

Прежде всего вам необходимо иметь сервер с Ubuntu 16.04.

Перед тем, как начать следовать шагам, описанным в этой статье, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя с привилегиями sudo на вашем сервере. Вы можете сделать это следуя инструкциям, описанным в статье о первичной настройке сервера на Ubuntu 16.04. В этой же статье описан процесс настройки файрвола; далее мы будем считать, что файрвол настроен на вашем сервере.

Когда вы будете готовы начать, зайдите на ваш сервер под созданным вами sudo-пользователем и следуйте шагам, описанным ниже.

Шаг 1. Установка OpenVPN

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

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

  1. sudo apt-get update
  2. sudo apt-get install openvpn easy-rsa

Необходимое программное обеспечение установлено и готово к настройке.

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

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

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

  1. make-cadir ~/openvpn-ca

Далее зайдём в эту директорию для начала настройки центра сертификации:

  1. cd ~/openvpn-ca

Шаг 3. Настройка переменных центра сертификации

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

  1. nano vars

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

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

~/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="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York City"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="admin@example.com"
export KEY_OU="Community"

. . .

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

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

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

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

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

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

  1. cd ~/openvpn-ca
  2. source vars

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

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

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

  1. ./clean-all

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

  1. ./build-ca

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

Вывод
Generating a 2048 bit RSA private key ..........................................................................................+++ ...............................+++ writing new private key to '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) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [admin@email.com]:

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

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

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

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

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

  1. ./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

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

  1. ./build-dh

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

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

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

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

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

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

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

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

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

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

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

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

Шаг 7. Настройка сервиса OpenVPN

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

Копирование файлов в директорию OpenVPN

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

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

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

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

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

Настройка конфигурации OpenVPN

Теперь, когда наши файлы находятся на своём месте, займёмся настройкой конфигурационного файла сервера:

  1. sudo nano /etc/openvpn/server.conf

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

Сначала найдём секцию HMAC поиском директивы tls-auth. Удалите “;” для того, чтобы раскомментировать строку с tls-auth. Далее добавьте параметр key-direction и установите его значение в “0”:

/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
key-direction 0

Далее найдём секцию шифрования, нас интересуют закомментированные строки cipher. Шифр AES-128-CBC обеспечивает хороший уровень шифрования и широко поддерживается другими программными продуктами. Удалите “;” для раскомментирования строки AES-128-CBC:

/etc/openvpn/server.conf
cipher AES-128-CBC

Под этой строкой добавьте строку auth и выберите алгоритм HMAC. Хорошим выбором будет SHA256:

/etc/openvpn/server.conf
auth SHA256

Наконец, найдите настройки user и group и удалите “;” для раскомментирования этих строк:

/etc/openvpn/server.conf
user nobody
group nogroup

(Опционально) Проталкивание изменений 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 использует порт 1194 и протокол UDP для соединения с клиентами. Если вам необходимо изменить порт из-за каких-либо ограничений для ваших клиентов, вы можете сделать это изменив настройку port. Если вы не хостите веб-контент на вашем OpenVPN сервере, вы можете использовать порт 443, поскольку этот порт обычно разрешён для использования в большинстве файрволов.

/etc/openvpn/server.conf
# Optional!
port 443

Используемый протокол может иметь ограничения по номеру порта. В этом случае измените proto с UDP на TCP:

/etc/openvpn/server.conf
# Optional!
proto tcp

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

(Опционально) Использование кастомного имени сертификата и ключа

Если во время использования команды ./build-key-server чуть выше вы указали параметр, отличный от server, измените настройки cert и key, чтобы они указывали на правильные файлы .crt и .key. Если вы использовали server, эти настройки должны выглядеть таким образом:

/etc/openvpn/server.conf
cert server.crt
key server.key

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

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

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

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

Сначала разрешим серверу перенаправлять трафик. Это ключевая функциональность нашего VPN сервера.

Настроим это в файле /etc/sysctl.conf:

  1. sudo nano /etc/sysctl.conf

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

/etc/sysctl.conf
net.ipv4.ip_forward=1

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

Для применения настроек к текущей сессии наберите команду:

  1. sudo sysctl -p

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

Если вы следовали статье о настройке Ubuntu 16.04, упомянутой в начале этой статьи, у вас должен быть установлен и настроен файрвол UFW. Вне зависимости от того, используете ли вы файрвол для блокировки нежелательного трафика (что вам стоит делать практически всегда), в этой статье нам потребуется файрвол для манипулирования с входящим на сервер трафиком. Мы должны изменить файл настроек для сокрытия соединений (masquerading).

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

  1. ip route | grep default

Публичный интерфейс должен следовать за словом “dev”. Например, в нашем случае этот интерфейс называется wlp11s0:

Вывод
default via 203.0.113.1 dev wlp11s0 proto static metric 600

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

  1. sudo nano /etc/ufw/before.rules

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

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

/etc/ufw/before.rules
#
# 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:

  1. sudo nano /etc/default/ufw

Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:

/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

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

Открытие порта OpenVPN и применение изменений

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

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

Даже мы добавим порт SSH на случай, если вы не сделали этого ранее.

  1. sudo ufw allow 1194/udp
  2. sudo ufw allow OpenSSH

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

  1. sudo ufw disable
  2. sudo ufw enable

Теперь наш сервер сконфигурирован для обработки трафика OpenVPN.

Шаг 9. Включение сервиса OpenVPN

Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.

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

  1. sudo systemctl start openvpn@server

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

  1. sudo systemctl status openvpn@server

Если всё получилось, вывод должен выглядеть примерно следующим образом:

Вывод
● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2 May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef] May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef] May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256 May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0 May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed

Вы также можете проверить доступность интерфейса OpenVPN tun0 следующей командой:

  1. ip addr show tun0

Вы должны увидеть конфигурацию интерфейса:

Вывод
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever

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

  1. sudo systemctl enable openvpn@server

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

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

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

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

  1. mkdir -p ~/client-configs/files

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

  1. chmod 700 ~/client-configs/files

Создание базовой конфигурации

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

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

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

  1. nano ~/client-configs/base.conf

Сделаем несколько изменений в этом файле.

Сначала найдите директиву remote. Эта директива сообщает клиенту адрес нашего сервера OpenVPN. Это должен быть публичный IP адрес вашего сервера OpenVPN. Если вы изменили порт, который слушает сервер OpenVPN, измените порт по умолчанию 1194 на ваше значение:

~/client-configs/base.conf
. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote server_IP_address 1194
. . .

Убедитесь, что протокол совпадает с настройками сервера:

~/client-configs/base.conf
proto udp

Далее раскомментируйте директивы user и group удаляя “;”:

~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Найдите директивы ca, cert и key. Закомментируйте эти директивы, так как мы будем добавлять сертификаты и ключи в самом файле:

~/client-configs/base.conf
# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Добавьте настройки cipher и auth согласно заданным в файле /etc/openvpn/server.conf:

~/client-configs/base.conf
cipher AES-128-CBC
auth SHA256

Далее добавьте директиву key-direction в любое место в файле. Она должна иметь значение “1” для корректной работы сервера:

~/client-configs/base.conf
key-direction 1

Наконец, добавьте несколько закомментированных строк. Мы ходим добавить эти строки в каждый файл конфигурации, но они будут включены только для клиентов на Linux, которые используют файл /etc/openvpn/update-resolv-conf. Этот скрипт использует утилиту resolvconf для обновление информации DNS на клиентах Linux.

~/client-configs/base.conf
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Если ваш клиент работает на Linux и использует файл /etc/openvpn/update-resolv-conf, вы должны раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.

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

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

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

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

  1. nano ~/client-configs/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

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

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

  1. chmod 700 ~/client-configs/make_config.sh

Шаг 11. Генерация конфигураций клиентов

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

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

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

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

  1. ls ~/client-configs/files
Вывод
client1.ovpn

Доставка конфигураций клиентам

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

Способ доставки файла зависит от операционной системы вашего устройства и программного обеспечения, которое вы захотите использовать для перемещения файла. Мы рекомендуем передавать файл по защищённому соединению, например, с использованием SFTP или SCP.

Ниже мы приводим пример передачи файла client1.ovpn с использованием SFTP. Следующую команду можно использовать на вашем локальном компьютере под управлением Mac OS или Linux. Она перемещает файл .ovpn в вашу домашнюю директорию:

  1. sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

Ниже представлено несколько ссылок на инструменты и статьи о безопасном переносе файлов с сервера на локальный компьютер:

Шаг 12. Установка файлов конфигураций клиентов

Теперь мы поговорим о том, как устанавливать клиентские профили VPN на Windows, Mac OS, iOS и Android. Процесс установки уникален для каждой платформы, поэтому пропускайте платформы, которые вы не планируете использовать.

Название соединения OpenVPN зависит от того, как вы называли свой .ovpn файл. В нашем примере это будет client1.ovpn.

Windows

Установка

Вы можете загрузить клиент для работы с OpenVPN для Windows со страницы загрузок OpenVPN. Выберите необходимую вам версию установщика.

Внимание: установка OpenVPN требует администраторской учётной записи.

После установки OpenVPN скопируйте ваш .ovpn файл в эту директорию:

C:\Program Files\OpenVPN\config

Запустите OpenVPN, клиент должен автоматически увидеть ваш профиль.

Клиент OpenVPN требует запуска с правами администратора даже для аккаунтов администратора. Для запуска сделайте щелчок правой кнопкой мыши на клиенте и выберите Run as administrator каждый раз при запуске клиента. Это также означает, что обычные пользователи должны будут вводить пароль администратора для использования OpenVPN.

Для того, чтобы приложение OpenVPN всегда запускалось с правами администратора, сделайте щелчок правой кнопкой мыши на иконке клиента и перейдите в раздел Properties. В нижней части вкладки Compatibility нажмите на кнопку Change settings for all users. В открывшемся окне выберите Run this program as an administrator.

Соединение

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

Для установки соединения сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее. В открывшемся контекстном меню выберите client1 (это наш профиль client1.ovpn) и нажмите Connect.

Откроется окно статуса, которое будет отображать лог соединения. При завершении соединения вы увидите соответствующее сообщение.

Закрыть VPN соединение можно точно так же: сделайте щелчок правой кнопкой мыши на иконке OpenVPN в системном трее, выберите профиль клиента и нажмите Disconnect.

Mac OS

Установка

Tunnelblick - это бесплатный OpenVPN клиент для Mac OS с открытым исходным кодом. Вы можете загрузить его со страницы загрузок Tunnelblick. Сделайте двойной щелчок на загруженном .dmg файле и следуйте инструкциям в процессе установки.

В конце процесса установки Tunnelblick спросит, есть ли у вас конфигурационные файлы. Проще всего ответить No и завершить установку Tunnelblick. Откройте Finder и сделайте двойной щелчок на client1.ovpn. Tunnelblick установит клиентский профиль. Для этого необходимы права администратора.

Соединение

Запустите Tunnelblick двойным щелчком из папки Applications. После запуска в панели меню в правой верхней части экрана появится иконка Tunnelblick. Для установки соединения нажмите на иконку, а затем Connect. Далее выберите соединение client1.

Linux

Установка

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

Наиболее универсальным способом установки соединения, тем не менее, является программное обеспечение OpenVPN.

В Ubuntu или Debian вы можете установить его точно так же, как и на сервере:

  1. sudo apt-get update
  2. sudo apt-get install openvpn

В CentOS вы можете активировать EPEL репозитории и затем ввести следующие команды:

  1. sudo yum install epel-release
  2. sudo yum install openvpn

Настройка

Сначала проверьте, содержит ли ваш дистрибутив скрипт /etc/openvpn/update-resolv-conf:

  1. ls /etc/openvpn
Вывод
update-resolve-conf

Далее отредактируйте полученный с сервера файл конфигурации клиента OpenVPN:

  1. nano client1.ovpn

Если вам удалось найти файл update-resolv-conf, раскомментируйте следующие строки файла:

client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Если вы используете CentOS, измените group с nogroup на nobody:

client1.ovpn
group nobody

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

Теперь вы можете соединиться с VPN используя команду openvpn следующим образом:

  1. sudo openvpn --config client1.ovpn

В результате вы подключитесь к серверу.

iOS

Установка

Найдите в iTunes App Store официальный клиент OpenVPN Connect и установите его. Для переноса файла конфигурации клиента на ваше устройство, подключите устройство к компьютеру.

Запустите iTunes на компьютере и выберите iPhone > apps. Найдите секцию File Sharing и нажмите на приложение OpenVPN. Перенесите ваш файл .ovpn в правую часть окна OpenVPN Documents.

Перенос файла OpenVPN на iOS

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

Импорт файла OpenVPN на iOS

Соединение

OpenVPN готов к использованию с новым профилем. Для установки соединения потяните слайдер Connect в позицию On. Для остановки соединения переместите этот же слайдер в положение Off.

Внимание

Переключатель VPN в приложении Settings нельзя использовать для установки соединения с VPN. Если вы попытаетесь это сделать, вы получите сообщение о том, что это возможно только в приложении OpenVPN.

Установка соединения OpenVPN на iOS

Android

Установка

Откройте Google Play Store. Найдите и установите официальное приложение OpenVPN Android OpenVPN Connect.

Передать профиль с компьютера на телефон можно подключив Android устройство к компьютеру через USB и скопировав файл. Вы также можете переместить файл профиля с помощью SD карты, скопировав профиль на карту и вставив карту в Android устройство.

Запустите приложение OpenVPN и нажмите на меню для импорта профиля.

Импорт файла OpenVPN на Android

Далее найдите файл в файловой системе (в нашем примере это /sdcard/Download/) и выберите найденный файл. Приложение сообщит, что профиль был импортирован.

Импорт файла OpenVPN на Android

Соединение

Для установки соединения нажмите кнопку Connect. Вам будет задан вопрос, доверяете ли вы приложению OpenVPN. Ответьте OK для установки соединения. Для остановки соединения зайдите в приложение OpenVPN и выберите Disconnect.

Установка соединения OpenVPN на Android

Шаг 13. Тестирование VPN соединения

После того, как всё установлено и настроено, убедимся, что всё работает правильно. Без установки соединения с VPN откройте браузер и зайдите на DNSLeakTest.

Этот сайт вернёт IP адрес, назначенный вам вашим Интернет-провайдером. Для того, чтобы проверить, какие DNS сервера используются, нажмите на Extended Test.

Теперь установите соединение, используя ваш VPN клиент и обновите страницу в браузере. Выдаваемый вам IP адрес должен быть совершенно другим. Теперь для всех в Интернете вы используете этот новый IP адрес. Нажмите Extended Test ещё раз, чтобы проверить ваши настройки DNS и убедитесь, что теперь вы используете DNS сервера вашего VPN.

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

Время от времени, вам может понадобиться отозвать клиентский сертификат для предотвращения доступа к серверу VPN&

Для этого зайдите в вашу директорию центра сертификации и введите команды:

  1. cd ~/openvpn-ca
  2. source vars

Далее используйте команду revoke-full с именем клиента, сертификат которого вы хотите отозвать:

  1. ./revoke-full client3

Вывод результатов работы этой команды будет оканчиваться ошибкой 23. Это нормально. В результате работы будет создан файл crl.pem в директории keys с необходимой для отзыва сертификата информацией.

Переместите этот файл в директорию /etc/openvpn:

  1. sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn

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

  1. sudo nano /etc/openvpn/server.conf

Добавьте в конец файла строку crl-verify. Сервер OpenVPN будет проверять список отозванных сертификатов каждый раз, когда кто-то устанавливает соединение с сервером.

/etc/openvpn/server.conf
crl-verify crl.pem

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

Перезапустите OpenVPN для завершения процесса отзыва сертификата:

  1. sudo systemctl restart openvpn@server

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

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

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

  2. Скопируйте новый список отозванных сертификатов в директорию /etc/openvpn перезаписав тем самым старый список.

  3. Перезапустите сервис OpenVPN.

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

Заключение

Поздравляем! Теперь вы можете безопасно выходить в Интернет, весь ваш трафик защищён от прослушки цензоров и злоумышленников.

Для конфигурации дополнительных клиентов повторите шаги 6 и 11-13 для каждого нового устройства. Для отзыва доступа того или иного клиента используйте шаг 14.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Default avatar
maxmikheev

translator


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
78 Comments
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Спасибо. Статья такая - что особо и думать не нужно.

Но хотелось бы почитать о технических деталях, генерации CA/ключей и их ролях и т.п.

Если udp менять на tcp при подключению к openvpn-серверу насколько проседает скорость?

потесть а потом отпишись нам)

В общем суть в том, что tcp over tcp использовать не нужно, только в случае, если udp заблокирован.

http://sites.inka.de/bigred/devel/tcp-tcp.html

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

добавить только порт и включить выключить фаирвол. Т.е. разбиритесь с сттатее базованя настройка сервера(там и фаирвол). +не рекомендовал бы делавть опционально с днс пункт. После него пропадает интернет через опенвпн на клиенте.

ufw allow ssh или если изменили порт то ufw allow номер порта

Ошибка на Шаг 9. Включение сервиса OpenVPN Мы готовы включит сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.

sudo systemctl start openvpn@server

в ответ пишет Job for openvpn@server.service failed because a timeout was exceeded. See “systemctl status openvpn@server.service” and “journalctl -xe” for details.

Spasbo za xaroshuyu statyu,

Tolko umenya odna problema voznikla s podklyucheniem RDP po VPN, podklyuchayus por RDP pishu ligin i parol i vse , zaveslo ves traffik. pomogite reshat problemu, Sposibo

Когда мы пишем правила для UFW, статья говорит добавить такую строчку:

-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE

Но по умолчанию OpenVPN выделяет для себя сетку 10.8.0.0/24. Поэтому для безопасности стоит заменить ту строку на

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

а как сделать чтоб ипишник на клиенте менялся на ипишник сервака?

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

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

Советую ‘*nat’ поменять на ‘*NAT’, потому что может команда не отрабатываться и будет ругаться на эту строку.

К опенвпну конектится но ипишник который который родной так и остался родным. Вывод не работает. Если вам надо ипишник сервера.

А если делаешь опционально пункт с днс еще и дотсуп пропадает к интернету через опенвпн.

С фаирволом я б рекомендовал поокуратней и разобратся по стате базованя настройка которая упоминаеться в самом верху.

Спасибо, все получилось. Правда были некоторые проблемы с запуском и еще некоторые пункты, но разрешил все. Сервер Ubuntu 16.04. Хорошая и подробная статья!

Можно дополнить вот этим:

  1. block-outside-dns в конфиг-файл OpenVPN-клиента что бы прирезать утечку DNS
  2. echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all что бы сервак не отзывался на пинги - усложнит обнаружение VPN
  3. net.ipv4.icmp_echo_ignore_all = 1 положить внутрь /etc/sysctl.conf с той же целью, что пункт 2, для того, что бы между ребутами жило
  4. -I FORWARD -i tun0 -o tun0 -j DROP Это в /etc/ufw/before.rules, если мы не хотим, что бы клиенты могли общаться друг с другом.

Итак, 2 + 3 слетает при перезапуске ufw. Вместо 2) и 3) я вписал внутрь /etc/ufw/before.rules: -A ufw-before-input -p icmp --icmp-type echo-request -j DROP Вместо аналогичной строки: -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT и после этого настройка сохраняется.

Подключается, но нет интернета и даже не пингуется сервер. Как исправить?

nano /etc/rc.local

добавляем строки до exit 0
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Ничего там не надо дописывать, посмотри внимательней вот в этом месте.

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

Я лично буковку -s не поставил перед 10.8.0.0/8 и правило у меня тупо не выполнялось и была такая же проблема как у тебя. Исправил и все стало норм.

Ну а за подсказку спасибо :) Именно изучая что делают написанные тобой строки, понял в чем ошибка у меня))

Все сделал по инструкции и твою запись пробовал добавлять, но интернет так и не появился( Есть еще варианты куда копать?

Прошел по туториалу, все работает, но только с файлом конфигурации client1.ovpn, при генерации сертификатов, ключей и файлов конфигураций для других клиентов (client2.ovpn, client3.ovpn, …), не может подключиться к серверу. write UDPv4: Can't assign requested address (code=49)

Огромнейшее-преогромнейшее человеческое спасибо.

Сделал всё по гайду, в Tunnelblick говорит, что passphrase не та. Заглянул в конфиг, там поле <key></key> пустое, это норма?

Добрый день. Все сделал как гласит статья, но в Android клиенте постоянно пишится Looking up DNS name, что я сделал не так?

Если вы все сделали как написано, но ip все равно тот же - в файл client1.ovpn нужно дописать redirect-gateway def1

Статья отличная, очень помогла.

Настроил сервер. Все работает отлично, покрайней мере на Андроиде, если сижу через десктоп браузер (Chrome), то большинство сайтов не открывается. Подскажите в чем проблема?

Статья замечательная, автору большое спасибо! Хоть и удалось настроить сервер не с первой попытки, но в целом все очень понятно. Пользуюсь OpenVPN чуть больше полугода, очень доволен результатом и стабильностью работы. Недавно у меня возник один вопрос, а так как я новичок в этом деле, то решил задать его здесь, вдруг кто поможет. Как настроить лимит трафика для каждого клиента по отдельности? К примеру для client1 надо 10 Гб, для client2 5 Гб и т.д. С ежемесячным обновлением счетчика трафика для каждого из клиентов по отдельности или для удобства, определенного списка клиентов. Заранее спасибо!

Отличная статья, спасибо автору. Столкнулся только с проблемой, что два клиента, подключенные к серверу - не видят друг друга. Как можно исправить? Мне не нужно, чтобы клиенты ходили в интернет через сервер. Мне нужно только чтобы они друг друга все видели. Чтобы у клиентов, подключенных по VPN образовалась своя локалка.

Попробуйте в конфиге сервере включить

topology subnet
client-to-client

Йееееее! Спасибо огромное!!!

а если мне нужно чтоб они и между собой общались, и наружу выходили? первое убирать?

подскажите, не могу добавить новых клиентов… root@zur02:~# cd ~/openvpn-ca root@zur02:~/openvpn-ca# source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/openvpn-ca/keys root@zur02:~/openvpn-ca# ./build-key client2 pkitool: Need a readable ca.crt and ca.key in /root/openvpn-ca/keys Try pkitool --initca to build a root certificate/key.

выйдите из root-а

Need a readable ca.crt and ca.key in /root/openvpn-ca/keys

WARNING: INSECURE cipher with block size less than 128 bit (64 bit). This allows attacks like SWEET32. Mitigate by using a --cipher with a larger block size (e.g. AES-256-CBC). не страшно конечно, можно и AES-128-CBC оставить.

Как теперь, используя используя получившийся vpn, настроить подключение к удаленному рабочему столу, который использует этот vpn. Необходимо подключение к win10 через RDP

спасибо за перевод! с первого раза не заработало. как оказалось, пункт с DNS все-таки обязательный, а не опциональный, иначе реальный адрес на адрес сервака не меняется. но после всей настройки и возвращения к нему все равно не заработало, наоборот инет напрочь пропал, хотя до настройки работал хотя бы с реальным адресом. грохнул профиль, перенастроился заново с этим пунктом и все работает. теперь вот меня другой вопрос инетересует — как бы этот VPN пробросить сразу через роутер, чтобы любое подключенное к роутеру устройство сразу работало через VPN? нашел лишний рутер, накатил на него прошивку OpenWRT и теперь гуглю, как там проброс в VPN сделать. пока результатов нет ;-)

Thanks for the tutorial. I went throught the tutorial and used TCP connection. But my configuration keeps restarting. What can I do? Sorry can’t write in Russian

Justin Ellingwood
DigitalOcean Employee
DigitalOcean Employee badge
October 31, 2017

@akmyradov2000 In that case, you might have more luck using the English version of this guide. The English version also has many more comments, so you might be able to find someone who has solved your problem.

После ввода команды: “sudo openvpn --config client1.ovpn” выдает ошибку:“Options error: You must define TUN/TAP device (–dev) Use --help for more information” Подскажите пожалуйста как исправить

This comment has been deleted

    Спасибо! Отличная статья, всё удалось настроить, всё заработало.

    Но есть один вопрос: после подключения по vpn есть доступ к другим устройствам локальной сети, но нет доступа к самому серверу, где развёрнут openVPN. Не подскажете, как открыть доступ к серверу с openVPN для клиентов подключённых по vpn?

    Вот тут есть статья по установке винды на ДО: https://teamhelps.pp.ua/top/ustanovka-windows-7-x86-na-digital-ocean/

    Пожалуйста помогите в чем может быть проблема.

    Ошибка вот:

    2018-01-21 20:36:15 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) 2018-01-21 20:36:15 TLS Error: TLS handshake failed

    Все сделал по инструкции, но при попытке подключиться вот такая ошибка:

    Sat Feb 17 13:57:13 2018 MANAGEMENT: >STATE:1518868633,RESOLVE,,,,,,
    Sat Feb 17 13:57:20 2018 RESOLVE: Cannot resolve host address: my-server-1:1194 ()
    Sat Feb 17 13:57:20 2018 Could not determine IPv4/IPv6 protocol
    Sat Feb 17 13:57:20 2018 SIGUSR1[soft,init_instance] received, process restarting
    Sat Feb 17 13:57:20 2018 MANAGEMENT: >STATE:1518868640,RECONNECTING,init_instance,,,,,
    Sat Feb 17 13:57:20 2018 Restart pause, 10 second(s)
    Sat Feb 17 13:57:30 2018 MANAGEMENT: >STATE:1518868650,RESOLVE,,,,,,
    

    По настройке сервер проблем не возникло, по тестам - там все работает, но вот с винды не могу зайти через OpenVPN GUI.

    Вот журнал:

    Tue Feb 20 22:47:32 2018 NOTE: --user option is not implemented on Windows Tue Feb 20 22:47:32 2018 NOTE: --group option is not implemented on Windows Tue Feb 20 22:47:32 2018 OpenVPN 2.4.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Sep 26 2017 Tue Feb 20 22:47:32 2018 Windows version 6.2 (Windows 8 or greater) 64bit Tue Feb 20 22:47:32 2018 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.10 Enter Management Password: Tue Feb 20 22:47:32 2018 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 Need hold release from management interface, waiting… Tue Feb 20 22:47:32 2018 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘state on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘log all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘echo all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold off’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold release’ Tue Feb 20 22:47:32 2018 MANAGEMENT: Client disconnected Tue Feb 20 22:47:32 2018 Insufficient key material or header text not found in file ‘[[INLINE]]’ (0/128/256 bytes found/min/max) Tue Feb 20 22:47:32 2018 Exiting due to fatal error

    Статья идеальна.

    Автоматический реконнект периодически происходит без сбоев.

    Но, при отсутствии трафика на Android, через какое-то время интернет пропадает.

    При ручном переподключении все восстанавливается.

    В чем может быть причина?

    Как теперь, используя используя получившийся vpn, настроить подключение к удаленному рабочему столу, который использует этот vpn. Необходимо подключение к win10 через RDP

    спасибо за перевод! с первого раза не заработало. как оказалось, пункт с DNS все-таки обязательный, а не опциональный, иначе реальный адрес на адрес сервака не меняется. но после всей настройки и возвращения к нему все равно не заработало, наоборот инет напрочь пропал, хотя до настройки работал хотя бы с реальным адресом. грохнул профиль, перенастроился заново с этим пунктом и все работает. теперь вот меня другой вопрос инетересует — как бы этот VPN пробросить сразу через роутер, чтобы любое подключенное к роутеру устройство сразу работало через VPN? нашел лишний рутер, накатил на него прошивку OpenWRT и теперь гуглю, как там проброс в VPN сделать. пока результатов нет ;-)

    Thanks for the tutorial. I went throught the tutorial and used TCP connection. But my configuration keeps restarting. What can I do? Sorry can’t write in Russian

    Justin Ellingwood
    DigitalOcean Employee
    DigitalOcean Employee badge
    October 31, 2017

    @akmyradov2000 In that case, you might have more luck using the English version of this guide. The English version also has many more comments, so you might be able to find someone who has solved your problem.

    This comment has been deleted

      Спасибо! Отличная статья, всё удалось настроить, всё заработало.

      Но есть один вопрос: после подключения по vpn есть доступ к другим устройствам локальной сети, но нет доступа к самому серверу, где развёрнут openVPN. Не подскажете, как открыть доступ к серверу с openVPN для клиентов подключённых по vpn?

      Вот тут есть статья по установке винды на ДО: https://teamhelps.pp.ua/top/ustanovka-windows-7-x86-na-digital-ocean/

      Пожалуйста помогите в чем может быть проблема.

      Ошибка вот:

      2018-01-21 20:36:15 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) 2018-01-21 20:36:15 TLS Error: TLS handshake failed

      Все сделал по инструкции, но при попытке подключиться вот такая ошибка:

      Sat Feb 17 13:57:13 2018 MANAGEMENT: >STATE:1518868633,RESOLVE,,,,,,
      Sat Feb 17 13:57:20 2018 RESOLVE: Cannot resolve host address: my-server-1:1194 ()
      Sat Feb 17 13:57:20 2018 Could not determine IPv4/IPv6 protocol
      Sat Feb 17 13:57:20 2018 SIGUSR1[soft,init_instance] received, process restarting
      Sat Feb 17 13:57:20 2018 MANAGEMENT: >STATE:1518868640,RECONNECTING,init_instance,,,,,
      Sat Feb 17 13:57:20 2018 Restart pause, 10 second(s)
      Sat Feb 17 13:57:30 2018 MANAGEMENT: >STATE:1518868650,RESOLVE,,,,,,
      

      По настройке сервер проблем не возникло, по тестам - там все работает, но вот с винды не могу зайти через OpenVPN GUI.

      Вот журнал:

      Tue Feb 20 22:47:32 2018 NOTE: --user option is not implemented on Windows Tue Feb 20 22:47:32 2018 NOTE: --group option is not implemented on Windows Tue Feb 20 22:47:32 2018 OpenVPN 2.4.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Sep 26 2017 Tue Feb 20 22:47:32 2018 Windows version 6.2 (Windows 8 or greater) 64bit Tue Feb 20 22:47:32 2018 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.10 Enter Management Password: Tue Feb 20 22:47:32 2018 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 Need hold release from management interface, waiting… Tue Feb 20 22:47:32 2018 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘state on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘log all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘echo all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold off’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold release’ Tue Feb 20 22:47:32 2018 MANAGEMENT: Client disconnected Tue Feb 20 22:47:32 2018 Insufficient key material or header text not found in file ‘[[INLINE]]’ (0/128/256 bytes found/min/max) Tue Feb 20 22:47:32 2018 Exiting due to fatal error

      Статья идеальна.

      Автоматический реконнект периодически происходит без сбоев.

      Но, при отсутствии трафика на Android, через какое-то время интернет пропадает.

      При ручном переподключении все восстанавливается.

      В чем может быть причина?

      Как теперь, используя используя получившийся vpn, настроить подключение к удаленному рабочему столу, который использует этот vpn. Необходимо подключение к win10 через RDP

      спасибо за перевод! с первого раза не заработало. как оказалось, пункт с DNS все-таки обязательный, а не опциональный, иначе реальный адрес на адрес сервака не меняется. но после всей настройки и возвращения к нему все равно не заработало, наоборот инет напрочь пропал, хотя до настройки работал хотя бы с реальным адресом. грохнул профиль, перенастроился заново с этим пунктом и все работает. теперь вот меня другой вопрос инетересует — как бы этот VPN пробросить сразу через роутер, чтобы любое подключенное к роутеру устройство сразу работало через VPN? нашел лишний рутер, накатил на него прошивку OpenWRT и теперь гуглю, как там проброс в VPN сделать. пока результатов нет ;-)

      Thanks for the tutorial. I went throught the tutorial and used TCP connection. But my configuration keeps restarting. What can I do? Sorry can’t write in Russian

      Justin Ellingwood
      DigitalOcean Employee
      DigitalOcean Employee badge
      October 31, 2017

      @akmyradov2000 In that case, you might have more luck using the English version of this guide. The English version also has many more comments, so you might be able to find someone who has solved your problem.

      This comment has been deleted

        Спасибо! Отличная статья, всё удалось настроить, всё заработало.

        Но есть один вопрос: после подключения по vpn есть доступ к другим устройствам локальной сети, но нет доступа к самому серверу, где развёрнут openVPN. Не подскажете, как открыть доступ к серверу с openVPN для клиентов подключённых по vpn?

        Вот тут есть статья по установке винды на ДО: https://teamhelps.pp.ua/top/ustanovka-windows-7-x86-na-digital-ocean/

        Пожалуйста помогите в чем может быть проблема.

        Ошибка вот:

        2018-01-21 20:36:15 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) 2018-01-21 20:36:15 TLS Error: TLS handshake failed

        Все сделал по инструкции, но при попытке подключиться вот такая ошибка:

        Sat Feb 17 13:57:13 2018 MANAGEMENT: >STATE:1518868633,RESOLVE,,,,,,
        Sat Feb 17 13:57:20 2018 RESOLVE: Cannot resolve host address: my-server-1:1194 ()
        Sat Feb 17 13:57:20 2018 Could not determine IPv4/IPv6 protocol
        Sat Feb 17 13:57:20 2018 SIGUSR1[soft,init_instance] received, process restarting
        Sat Feb 17 13:57:20 2018 MANAGEMENT: >STATE:1518868640,RECONNECTING,init_instance,,,,,
        Sat Feb 17 13:57:20 2018 Restart pause, 10 second(s)
        Sat Feb 17 13:57:30 2018 MANAGEMENT: >STATE:1518868650,RESOLVE,,,,,,
        

        По настройке сервер проблем не возникло, по тестам - там все работает, но вот с винды не могу зайти через OpenVPN GUI.

        Вот журнал:

        Tue Feb 20 22:47:32 2018 NOTE: --user option is not implemented on Windows Tue Feb 20 22:47:32 2018 NOTE: --group option is not implemented on Windows Tue Feb 20 22:47:32 2018 OpenVPN 2.4.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Sep 26 2017 Tue Feb 20 22:47:32 2018 Windows version 6.2 (Windows 8 or greater) 64bit Tue Feb 20 22:47:32 2018 library versions: OpenSSL 1.0.2l 25 May 2017, LZO 2.10 Enter Management Password: Tue Feb 20 22:47:32 2018 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 Need hold release from management interface, waiting… Tue Feb 20 22:47:32 2018 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340 Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘state on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘log all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘echo all on’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold off’ Tue Feb 20 22:47:32 2018 MANAGEMENT: CMD ‘hold release’ Tue Feb 20 22:47:32 2018 MANAGEMENT: Client disconnected Tue Feb 20 22:47:32 2018 Insufficient key material or header text not found in file ‘[[INLINE]]’ (0/128/256 bytes found/min/max) Tue Feb 20 22:47:32 2018 Exiting due to fatal error

        Статья идеальна.

        Автоматический реконнект периодически происходит без сбоев.

        Но, при отсутствии трафика на Android, через какое-то время интернет пропадает.

        При ручном переподключении все восстанавливается.

        В чем может быть причина?

        Приветствую. Все получилось. Спасибо.

        Сразу не подключился. Дело было в файрволе.

        Да и сейчас не решил, после перезагрузки всего сервера, сервис openvpn запускается, но чтобы подключится приходится делать service ufw restart . После чего все успешно… сам ufw как сервис включен в автозапуске, но его все равно надо запускать вручную.

        OpenVpn настраивал через TCP

        
        

        systemctl status ufw.service ● ufw.service - Uncomplicated firewall Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Thu 2018-03-15 20:13:31 +06; 15s ago Process: 3554 ExecStart=/lib/ufw/ufw-init start quiet (code=exited, status=1/FAILURE) Main PID: 3554 (code=exited, status=1/FAILURE)

        Mar 15 20:13:31 test systemd[1]: Starting Uncomplicated firewall… Mar 15 20:13:31 test ufw-init[3554]: ip6tables-restore: line 2 failed Mar 15 20:13:31 test ufw-init[3554]: ip6tables-restore: line 2 failed Mar 15 20:13:31 test systemd[1]: ufw.service: Main process exited, code=exited, status=1/FAILURE Mar 15 20:13:31 test systemd[1]: Failed to start Uncomplicated firewall. Mar 15 20:13:31 test systemd[1]: ufw.service: Unit entered failed state. Mar 15 20:13:31 test systemd[1]: ufw.service: Failed with result ‘exit-code’.

        Добрый день. Статья супер, всё настроил, всё работает. Но проблема в домашенм ноуте. При подключении по впн серверу, пинги на сайты идут, но не могу зайти ни на один сайт, пробовал и с винды и с убунту. Сервер рабочий, конфигурация тоже. Проблема точно дома, поскольку с рабочей машины в офисе всё работает. Может дело в билайне, и он что то режет (в офисе другой провайдер). Что вообще он может резать? прошу помощи кто чем может. Укажите направление.

        При создании базовой конфигурации клиента вводим IP-адрес сервера, но при периодическом использовании сервера (восстановлении из Snapshot) IP-адрес меняется. Как учесть это при настройке? Если можно по простому, я начинающий…

        ~/client-configs/base.conf

        remote server_IP_address 1194

        Супер! Все прошло как по маслу! Автору огромный респект!

        Отличная статья, спасибо за материал! Все сделал, как написано — VPN работает. Однако обратил внимание, что в логах VPN-клиента постоянно появляются вот такие записи

        Authenticate/Decrypt packet error: bad packet ID (may be a replay): [ #28319136 ] -- see the man page entry for --no-replay and --replay-window for more info or silence this warning with --mute-replay-warnings
        

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

        Завелось, после добавления пуш днс. Но! Подключается, имена ресолвятся, пинг внутри сети идёт, но больше ничего не работает. Проверял конфиг на пк и айфоне. Куда смотреть? Файрволы откл. Пробовал и udp и tcp

        Решилось запуском файрвола, если внимательно почитать, тут об этом написано ) но, после его отключения всё работает тоже!

        Всё работает отлично! Но возник вопрос в следующем. Для телефона устанавливать ВПН на весь трафик я не могу. Но телеграм нужен рабочий. Как запустить SOCKS5 параллельно?

        Можешь воспользоваться dante-server для создания SOCKS5 proxy, тоже ставил на днях, работает вполне уверенно и параллельно с openvpn.

        $ wget http://ppa.launchpad.net/dajhorn/dante/ubuntu/pool/main/d/dante/dante-server_1.4.1-1_amd64.deb
        

        Установить его

        $ apt-get install gdebi-core
        $ gdebi dante-server_1.4.1-1_amd64.deb
        

        И немного поправить конфиг для себя

        $ nano /etc/danted.conf
        

        Чтобы выглядел подобным образом (порт можешь выбрать любой доступный)

        danted.conf
        logoutput: syslog /var/log/danted.log
        internal: eth0 port = 1337
        external: eth0
        socksmethod: username
        user.privileged: root
        user.unprivileged: nobody
        client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        log: error
        }
        socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
        command: connect
        log: error
        method: username
        }
        

        Создать пользователя для доступа к прокси

        $ useradd --shell /usr/sbin/nologin usersocks
        $ passwd usersocks
        

        Добавить правило файрвола UFW на перенаправление трафика для порта

        $ ufw allow 1337/tcp
        

        Осталось перезапустить сервер

        $ service danted restart
        

        И добавить настройки в тг, удачи

        Подскажите, пожалуйста, что делать, если я не могу скачать client1.ovpn? Он действительно есть на сервере, но когда пишу sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/, ничего не получается, как я понимаю, из-за отключенного входа по паролю.

        “Ничего не получается” - это не багрепорт, это просто печальная история. Попробуйте scp вместо sftp. Сложно гадать о причинах проблемы не видя сообщение об ошибке.

        This comment has been deleted

          Сделал все по инструкции, но при попытке подключиться к серверу через Tunnelblick вижу следующую ошибку: 2018-05-06 19:51:34 OpenSSL: error:0906D06C:PEM routines:PEM_read_bio:no start line 2018-05-06 19:51:34 OpenSSL: error:140AD009:SSL routines:SSL_CTX_use_certificate_file:PEM lib

          В конфигурационном файле есть строки -----BEGIN RSA PRIVATE KEY----- … -----END RSA PRIVATE KEY-----

          в чем может быть проблема? Спасибо

          Проблема была в том, что мой CA не могд подписать сертификат для client1:

          Certificate is to be certified until May 4 08:30:37 2028 GMT (3650 days) Sign the certificate? [y/n]:y failed to update database TXT_DB error number 2

          и соответственно файл с конфигурацией клиента на содержал необходимой информации. Если вместо client1 использовать client2…clientN, то все работает нормально и соединение устанавливается корректно.

          Отличная статья! Правда в моём случае пришлось донастроить, т.к. провайдер перехватывает DNS-запросы и перенаправляет на свои DNS сервера (т.н. DNS Leaking). Если у вас похожая ситуация, нужно добавить в ~/client-configs/base.conf параметр:

          # Block DNS servers on other network adapters to
          # prevent DNS leaks.
          block-outside-dns
          

          Для уже существующих *.ovpn файлов можно просто добавить туда, перегенерировать профиль не обязательно.

          Как сделать так чтобы сервер видел клиентов? Клиенты видят и пингуют друг друга и сервер, сервер же никого из них “не видит”. Мне нужно чтобы сервисы запущенные на сервере и на клиентах были доступны внутри тоннеля. Если сервер в тоннеле это 10.8.0.1 а клиент 10.8.0.2, они могли соединяться друг с другом через конкретный указанный порт внутри этой подсети. Сейчас этого не происходит.

          Не работает! OpenVPN на винде делает вид, что все ок, но на самом деле интернет отсутствует напрочь

          Автору, в разделе про клиентскую конфигурацию есть проблема, которая стоила мне 2 дней нервов. В начале в файл добавляется участок для линукс-клиентов, после чего скрипт должен вставить туда сертификат: cat ${BASE_CONFIG}
          <(echo -e ‘<ca>’)
          Здесь не делается перенос на новую строку, таким образом тег <ca> в файле оказывается на закоментированной строке и клиент ругается, что у него нет ca-сертификата. Решается заменой на ‘\n<ca>’

          Говно собачье! Уже который час на эту срань просрал!

          sudo systemctl start openvpn@server

          в ответ пишет Job for openvpn@server.service failed because a timeout was exceeded. See “systemctl status openvpn@server.service” and “journalctl -xe” for details.

          На шаге 11 после ./make_config.sh client1 получаю

          ./make_config.sh: line 20: /dev/fd/63: Permission denied ./make_config.sh: line 22: /home/user/openvpn-ca/keys/ca.crt: Permission denied ./make_config.sh: line 24: /dev/fd/63: Permission denied ./make_config.sh: line 26: /home/user/openvpn-ca/keys/mework1.crt: Permission denied ./make_config.sh: line 28: /dev/fd/63: Permission denied ./make_config.sh: line 30: /home/user/openvpn-ca/keys/mework1.key: Permission denied ./make_config.sh: line 32: /dev/fd/63: Permission denied ./make_config.sh: line 34: /home/user/openvpn-ca/keys/ta.key: Permission denied ./make_config.sh: line 36: /dev/fd/63: Permission denied

          Всем привет! Может кто сталкивался с такой проблемой. Настроил все по статье, на windows и androide все прекрасно работает, а вот на ubunte - ip адрес изменяется, но не меняются DNS сервера.

          Есть еще невероятно простой способ, с помощью графического приложения https://github.com/delfer/ssheller Код открыт, работает под Windows, macOS и Linux. Не требуется никакого доп. софта. И сервер настроит, и файл подключения скачает. И очень хорошо протестировано на DO.

          После команды gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf пишет: gzip: tee.gz: No such file or directory gzip: /etc/openvpn/server.conf.gz: No such file or directory Подскажите, в чем проблема, пожалуйста.

          Хорошая статья. Однако, если мы проталкиваем адреса DNS серверов, то неплохо добавить в файл базовой конфигурации клиентов:

          ignore-unknown-option block-outside-dns
          block-outside-dns
          

          На Linux и без них все работает нормально, а вот в Windows происходит утечка DNS.

          доброго дня.

          получил ошибку, что

          certificate is not yet valid:

          как починить, кто знает?

          Для всех клиентов задаю разные страны но IP показывается для клиентов всех один и тот же. Как исправить ?

          в Debian 9 утечка DNS несмотря на : script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf Что делать ?

          ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1) Sun Jan 27 15:41:52 2019 Exiting due to fatal error

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

          Наверное имелось ввиду TLS

          Есть только cipher AES-256-CBC. Возможно, Вам стоит обновить статью

          Здравствуйте, поскажите что исправить для Android OpenVPN Connect При импортировании профиля получаю ошибку: failed to parse profile: option_error: remote option no specified Работу настроил через tcp 443

          Не смог подключиться c linox Options error: Unrecognized option or missing parameter(s) in client1.ovpn:45: server] (2.3.10)

          Try DigitalOcean for free

          Click below to sign up and get $200 of credit to try our products over 60 days!

          Sign up

          Join the Tech Talk
          Success! Thank you! Please check your email for further details.

          Please complete your information!

          Become a contributor for community

          Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

          DigitalOcean Documentation

          Full documentation for every DigitalOcean product.

          Resources for startups and SMBs

          The Wave has everything you need to know about building a business, from raising funding to marketing your product.

          Get our newsletter

          Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

          New accounts only. By submitting your email you agree to our Privacy Policy

          The developer cloud

          Scale up as you grow — whether you're running one virtual machine or ten thousand.

          Get started for free

          Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

          *This promotional offer applies to new accounts only.