Home » Linux » CentOS » Настроить openvpn на CentOS 7

Настроить openvpn на CentOS 7

В современном интернете вопрос анонимности встает с каждым годом все острее. Запреты на доступ к контенту вынуждают пользователей искать обходные пути, одним из которых является использование приватных тоннелей. Установка на CentOS openvpn сервера для подключения удаленных клиентов является одной из реализаций шифрованного vpn канала. Этой задачей мы и займемся в текущей статье — поднимем шифрованный тоннель и подключим клиентов.

Введение — что такое vpn server?

Упомянутое во вступлении применение технологии vpn и openvpn сервера в частности не ограничивается созданием каналов для анонимного трафика пользователей. Более того, я думаю это не основная сфера применения данных технологий. Давайте поподробнее познакомимся с этими вещами, чтобы иметь полное представление о том, что мы будем настраивать.

VPN — набор технологий, которые позволяют организовать логическую сеть поверх других. Чаще всего в роли других сетей выступает Интернет. Если простыми словами, то с помощью VPN можно организовать единую локальную сеть разделенных интернетом сегментов сети. Так как Интернет — общедоступная сеть, то трафик внутри созданной логической сети шифруется различными средствами для организации защиты передаваемых данных.

OpenVPN — одна из реализаций технологии VPN с открытым исходным кодом, а значит бесплатная. С ее помощью можно объединять в единую сеть компьютеры в том числе и находящиеся за NAT, что очень удобно. Openvpn поддерживает все популярные на сегодняшний день операционные системы, в том числе и Windows.

Среди малого и среднего бизнеса сервер openvpn очень популярен благодаря своей бесплатности, кроссплатформенности, быстроте и гибкости настроек. Лично я предпочитаю именно его для объединения удаленных локальных сетей. Его же предпочитают использовать vpn-провайдеры для оказания своих услуг по организации анонимного серфинга в интернете.

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

Объединение офисов с помощью openvpn

У нас имеется офис с шлюзом CentOS 7, на который мы будем устанавливать openvpn сервер. И есть филиал с таким же шлюзом, где будет установлен openvpn client для подключения сети филиала к офису:

установка openvpn

Описание схемы сети
Имя Centos-server PC1 Centos-client PC2
Внешний ip 192.168.1.25 192.168.1.26
Локальный ip 192.168.10.1 192.168.10.50 192.168.20.1 192.168.20.50
Комментарий Сервер openvp и шлюз в офисе Компьютер с Windows 7 в офисе Клиент openvp и шлюз в филиале Компьютер с Windows 7 в филиале

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

Наша задача в данном случае будет сводиться к тому, чтобы компьютеры PC1 и PC2 увидели друг друга и могли совместно использовать свои сетевые ресурсы в обе стороны. То есть как за сервером, так и за клиентом openvpn мы должны видеть сеть.

Хочу отметить, что конфигурация openvpn кроссплатформенная и отлично переносится с одной системы на другую, необходимо только пути проверить, так как в каждой системе они свои. Моя инструкция подойдет для настройки openvpn сервера на любой операционной системе, отличаться будут только специфичные для каждой системы команды установки и проверки, но сама суть настройки vpn будет такой же.

Данный материал я создавал на тестовом стенде, который специально собрал для написания статьи. Но все настройки взяты с реально работающих серверов, причем разных систем, в том числе и freebsd. Для практического применения нужно просто поменять IP адреса на свои. У меня на стенде 192.168.1.25 и 192.168.1.26 по сути внешние IP адреса, которые смотрят в интернет.

Где скачать openvpn

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

Где можно скачать openvpn
Исходники openvpn-2.4.5.zip
Openvpn client Windows XP 32 bit openvpn-install-2.3.18-I002-i686.exe
Openvpn client Windows XP 64 bit openvpn-install-2.3.18-I002-x86_64.exe
Openvpn client Windows Vista, 7, 8, 10 openvpn-install-2.4.5-I601.exe
Openvpn Portable OpenVPNPortable_1.8.2.paf.exe

Сразу же прокомментирую по поводу portable версии openvpn. На текущий момент актуальной портированной версии openvpn не существует. Та версия, на которую я дал ссылку была выпущена 2014-03-26 и проект с тех пор закрыт. В некоторых случаях эта версия работает, но не всегда и не везде. Я специально по этому поводу почитал форум Community Openvpn и нашел там неутешительные ответы. Разработчики говорят, что portable версия openvpn не поддерживается и выпускать ее они даже не собираются. А жаль, это было бы удобно.

Для Linux систем дистрибутив проще всего получить в системных репозиториях и устанавливать с помощью стандартных установщиков пакетов.

Установка openvpn на CentOS 7

Теперь вернемся к нашей задаче. Я подразумеваю, что у вас уже есть установленный и настроенный сервер CentOS 7. Если еще нет, то можете воспользоваться моими материалами. В них раскрыты следующие темы:

Устанавливаем openvpn на оба наших сервера, которые являются шлюзами в своих сегментах сети. Первым делом подключаем репозиторий epel к centos 7:

# yum -y install epel-release

Выполняем непосредственно установку:

# yum -y install openvpn

Создание сертификатов

Для работы сервера openvpn необходимо создать соответствующие сертификаты. Для этого воспользуемся программой Easy-RSA, которая генерирует сертификаты с помощью утилиты openssl. Все работы в этом разделе выполняем только на centos-server.

Создаем директорию для ключей:

# mkdir /etc/openvpn/keys

Устанавливаем архиватор zip:

# yum -y install unzip zip

Скачиваем и устанавливаем утилиту Easy-RSA:

# cd /etc/openvpn/keys
# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

Если получаете сообщение:

-bash: wget: command not found

То устанавливаете wget:

# yum -y install wget

Продолжаем:

# unzip master.zip
# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3

Создаем структуру публичных PKI ключей:

# mv vars.example vars
# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
 Your newly created PKI dir is: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki

Создайте удостоверяющий центр CA:

# ./easyrsa build-ca
Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 .+++
 .........................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key.GKwCGouHpy'
 Enter PEM pass phrase:
 Verifying - Enter PEM pass phrase:
 -----
 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.
 -----
 Common Name (eg: your user, host, or server name) [Easy-RSA CA]:serveradmin.ru
CA creation complete and you may now import and sign cert requests.
 Your new CA certificate file for publishing is at:
 /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

Не забудьте указанный пароль. Его нужно будет вводить каждый раз при создании нового сертификата openvpn.

Мы получили 2 ключа:

  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key
  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/ca.crt

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

Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:

# ./easyrsa gen-req server nopass
Note: using Easy-RSA configuration from: ./vars
 Generating a 2048 bit RSA private key
 ........................+++
 ..............................................................................................+++
 writing new private key to '/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key.vCUQuueIih'
 -----
 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.
 -----
 Common Name (eg: your user, host, or server name) [server]:
Keypair and certificate request completed. Your files are:
 req: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/reqs/server.req
 key: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/server.key

Подписываем запрос на получение сертификата у нашего CA:

# ./easyrsa sign-req server server
Note: using Easy-RSA configuration from: ./vars
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
commonName = server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /etc/openvpn/keys/easy-rsa-master/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :PRINTABLE:'server'
Certificate is to be certified until Sep 10 00:31:21 2025 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

Нам еще пригодится ключ Диффи-Хелмана, генерируем его:

# ./easyrsa gen-dh

По завершению работы скрипта получаем файл dh сертификата — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/dh.pem.

Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи:

# cp pki/ca.crt /etc/openvpn/ca.crt
# cp pki/dh.pem /etc/openvpn/dh.pem
# cp pki/issued/server.crt /etc/openvpn/server.crt
# cp pki/private/server.key /etc/openvpn/server.key

Создадим ключ для клиента openvpn:

# ./easyrsa gen-req client nopass
# ./easyrsa sign-req client client

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

  •  /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/client.crt
  • /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/client.key

Клиенту, которым у нас является шлюз филиала нужно будет передать следующий набор файлов — client.crt, client.key, ca.crt.

Настройка openvpn на CentOS 7

Теперь приступаем к настройке. Создаем файл конфигурации openvpn:

# mcedit /etc/openvpn/server.conf
port 13555 # я предпочитаю использовать нестандартные порты для работы
proto udp # протокол может быт и tcp, если есть необходимость в этом
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem

server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
push "route 192.168.20.0 255.255.255.0" # передаем маршрут клиентам

ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip
client-to-client # позволяет клиентам openvpn подключаться друг к другу
client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов

keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3

Создаем необходимые директории:

# mkdir /etc/openvpn/ccd && mkdir /var/log/openvpn

Создаем файл конфигурации клиента в папке, указанной в параметре client-config-dir :

mcedit /etc/openvpn/ccd/client
iroute 192.168.20.0 255.255.255.0

Здесь client — имя сертификата пользователя. Параметр iroute означает, что за подсеть 192.168.20.0/24 отвечает именно этот клиент. Если в openvpn не передать эту настройку, то сеть, находящуюся за клиентом будет не видно, при этом сам клиент будет видеть всю сеть, которую обслуживает сервер. Такой вариант подходит для подключения удаленных сотрудников.

Выбор устройства openvpn — TAP или TUN

Чуть подробнее остановлюсь на этом моменте. В моей конфигурации я использую tun интерфейс. В чем отличие tun от tap можно прочитать на википедии. Прокомментирую своими словами. Если вам нужно объединить две разные локальные сети в одну условно общую, но с разной адресацией, то вам нужен tun. То есть в нашем случае мы объединяем две сети 192.168.10.0/24 и 192.168.20.0/24 для взаимного совместного доступа.

Если же у вас стоит задача объединить 2 удаленные сети в единое адресное пространство, например сделать и в офисе и в филиале единую сеть 192.168.10.0/24, то тогда бы мы использовали tap интерфейс и указывали бы на компьютерах в обоих сетях не пересекающиеся адреса из одной подсети. В таком состоянии openvpn работает в режиме моста. По мне так удобнее первый вариант. Я еще не сталкивался с задачей, где бы мне нужен был tap. Вернемся к настройке.

Запускаем сервер:

# systemctl start openvpn@server

Если сервер не запустился, а в логе ошибка:

TCP/UDP: Socket bind failed on local address [undef]: Permission denied

Значит вам нужно либо правильно настроить, либо отключить SELinux. В данном материале я не хочу касаться настройки SELinux, поэтому просто отключаем его:

# mcedit /etc/sysconfig/selinux

меняем значение

SELINUX=disabled

Чтобы изменения вступили в силу, перезагружаемся:

# reboot

Пробуем снова запустить openvpn сервер:

# systemctl start openvpn@server

Проверяем, запустился или нет:

# netstat -tulnp | grep 13555

udp 0 0 0.0.0.0:13555 0.0.0.0:* 2472/openvpn

Отлично, запустился на указанном порту.

Добавляем сервер openvpn в автозагрузку:

# systemctl enable openvpn@server

ln -s '/usr/lib/systemd/system/openvpn@.service' '/etc/systemd/system/multi-user.target.wants/openvpn@server.service'

Теперь внимательно проверим корректность всех настроек на сервере. Сначала посмотрим информацию о сетевых интерфейсах:

centos-netstat

Обращаем внимание на адреса туннеля vpn. Теперь проверяем статические маршруты:

centos-ifconfig

Тут тоже все в порядке. Траффик из подсети филиала 192.168.20.0/24 будет маршрутизироваться в тоннель. С настройкой сервера закончили, идем теперь на клиент.

Настройка в CentOS 7 клиента openvpn

На centos-client отключаем SELinux, создаем в директории /etc/openvpn файл конфигурации client.conf:

# mcedit /etc/openvpn/client.conf
dev tun
proto udp
remote 192.168.1.25 13555
client
resolv-retry infinite
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
route 192.168.10.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
status /var/log/openvpn/openvpn-status.log 1
status-version 3
log-append /var/log/openvpn/openvpn-client.log

Не забываем скопировать в /etc/openvpn сохраненные ранее ключи ca.crt, client.crt, client.key.

Обращаю внимание на параметр route в данном конфиге. Его можно здесь не указывать, сделав конфиг более унифицированным для множества клиентов. Вместо этого данную настройку можно передавать с сервера openvpn, указав в файле настроек клиента параметр push route следующим образом:

push "route 192.168.10.0 255.255.255.0"

Создаем каталог для логов:

# mkdir /var/log/openvpn

Запускаем openvpn client:

# systemctl start openvpn@client

Добавляем в автозагрузку:

# systemctl enable openvpn@client

Теперь смотрим картину настроек на клиенте:

openvpn-client-ifconfig

openvpn-client-netstat

Все в порядке, подключение к vpn серверу есть, маршруты прописаны верно.

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

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

net.ipv4.ip_forward = 1

в файл /etc/sysctl.conf и применить настройку:

# sysctl -p

Если у вас этого не сделано, то трафик между интерфейсами ходить не будет. Ниже мои конфиги iptables.

Centos-server:

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=192.168.1.25

# Локалка
export LAN=eth1
export LAN_IP_RANGE=192.168.10.0/24

# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# разрешаем трафик для loopback и локалки
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT

# разрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Разрешаем OpenVPN
$IPT -A INPUT -i tun+ -j ACCEPT
$IPT -A OUTPUT -o tun+ -j ACCEPT
$IPT -A FORWARD -i tun+ -j ACCEPT
# Разрешаем доступ из внутренней сети в vpn
$IPT -A FORWARD -i $LAN -o tun+ -j ACCEPT

# Разрешаем доступ из внутренней сети наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT

# Маскарадинг
$IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN_IP_RANGE -j MASQUERADE

# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным.
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

# Открываем порт для openvpn
$IPT -A INPUT -i $WAN -p udp --dport 13555 -j ACCEPT

# Записываем правила
/sbin/iptables-save > /etc/sysconfig/iptables

В сentos-client настройки абсолютно такие же, кроме переменных WAN, LAN и LAN_IP_RANGE.

Подробнее о настройке iptables читайте в соответствующем материале.

Если ваш openvpn клиент не подключается, то в первую очередь проверяйте настройки firewall — входящие подключения к серверу и исходящие клиента. Обратите внимание на номер порта и тип (TCP или UDP) если вы их меняли. У меня были затупы, когда никак не мог разобраться, почему нет соединения. Оказывалось, что я менял порт c UDP на TCP, но по привычке на фаерволе оставлял UDP.

Теперь давайте проверим, как бегают пакеты в нашей vpn сети. Заходим на centos-client (192.168.20.1) и пингуем centos-server (192.168.10.1) и pc1 (192.168.10.50):

centos-client-ping

Заходим на pc2 (192.168.20.50) и пингуем centos-server и pc1:

pc2-ping

Теперь в обратную сторону. Заходим на pc1 (192.168.10.50) и пингуем centos-client (192.168.20.1) и pc2 (192.168.20.50):

pc1-ping

И напоследок пропингуем с vpn сервера подсеть клиента:

centos-server-ping

В завершение темы объединения удаленных офисов, проверим доступ к общим сетевым ресурсам. Расшарим папку на PC2 и зайдем на нее с PC1:

openvpn-share

Все получилось. Мы реально объединили удаленные офисы в единую логическую сеть с помощью openvpn сервера.

Настройка openvpn client в windows

Теперь рассмотрим вариант подключения к нашей логической сети удаленного сотрудника с рабочей станцией windows. Допустим, мы объединили наши офисы в единую сеть, доступ работает в обе стороны. Нам необходимо, чтобы удаленный пользователь смог подключиться либо к обоим сетям, либо выборочно только к основному офису, либо только к филиалу.

Первым делом идем на сервер и создаем для клиента сертификаты.

# cd /etc/openvpn/keys/easy-rsa-master/easyrsa3
# ./easyrsa gen-req user1 nopass
# ./easyrsa sign-req client user1

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

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

# cd /etc/openvpn/ccd
# mcedit user1
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.20.0 255.255.255.0"

Этими параметрами мы передаем клиенту маршруты к обоим сетям офисов. Если нужно подключать клиента только к какой-то одной сети, то оставляйте одну сеть, вторую удаляйте.

Теперь нужно скачать openvpn client под нашу версию windows. Ссылки для скачивания я давал в самом начале статьи. Дальше выполняем установку клиента. Обращаю внимание, что запускать установщик нужно обязательно с правами администратора:

установка openvpn client в windows 7

Приступаем к настройке клиента в windows. Для этого нам понадобится файл конфигурации. Можно взять уже готовый config, который мы создавали ранее и немного изменить его. Файл конфигурации openvpn клиента должен выглядеть вот так:

dev tun
proto udp
remote 192.168.1.25
port 13555
client
resolv-retry infinite
ca ca.crt
cert user1.crt
key user1.key
persist-key
persist-tun
comp-lzo

У нас нет задачи видеть сеть за клиентом, да и он скорее всего не будет являться шлюзом, поэтому параметра route в конфиге нет. Плюс убраны пути для логов — openvpn будет создавать их в папке по-умолчанию. Сохраняем конфигурацию под именем openvpn.ovpn в папку C:\Program Files\OpenVPN\config, туда же копируем файлы сертификатов и запускаем OpenVPN GUI от имени администратора!

openvpn запуск от администратора

Это важно, без прав администратора openvpn client для правильной маршрутизации не сможет прописать необходимые  маршруты.

Ищем серый мониторчик в трее, нажимаем правой кнопкой мыши на него и выбираем «Подключиться».

openvpn client подключение

Во время подключения мониторчик будут гореть желтым цветом. Как только подключение будет установлено, цвет сменится на зеленый. Это означает, что openvpn клиент успешно создал туннель и можно начинать работать по vpn.

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

--connect "openvpn.ovpn"

Для этого выбираем ярлык на рабочем столе OpenVPN GUI, выбираем его и нажимаем правой кнопкой мыши, открываем «Свойства».  На вкладке «Ярлык» в поле «Объект» в самом конце дописываем указанные параметры. Вся строка должна выглядеть следующим образом:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect "openvpn.ovpn"

openvpn client автоподключение

Теперь при запуске ярлыка openvpn будет автоматически подключаться к серверу и устанавливать vpn соединение.

Мы подключились к корпоративной vpn сети, объединяющую 2 офиса. Давайте попробуем получить доступ к компьютерам внутри этой сети.  Пингуем все машины из нашей схемы:

192.168.10.1 192.168.10.50 192.168.20.1 192.168.20.50

openvpn client проверка сети

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

openvpn client настройка в windows

Доступ есть, все в порядке.

Заключение

Теперь подведем итоги того, что мы сделали:

  1. В первую очередь настроили сервер openvpn на CentOS 7. Для этого создали инфраструктуру для удостоверяющего центра СА, с помощью которого мы создаем сертификаты.
  2. Затем с помощью этого центра сформировали сертификаты для сервера и клиента, в роли которых выступает головной офис компании и его филиал.
  3. Потом мы настроили openvpn сервер в офисе компании и подключили к нему в качестве клиента сервер филиала. Проверили это соединение, взаимную доступность узлов обоих сетей.
  4. В завершении сформировали сертификат для удаленного сотрудника и настроили ему подключение openvpn клиента в windows. Проверили доступность всех узлов обоих сетей.

По этой схеме можно добавить любое количество филиалов или удаленных сотрудников к общей сети. Я с крупными сетями не работал, но лично подключал до 5-ти удаленных филиалов к головной сети офисов, плюс удаленных пользователей к ним. У пользователей маршрутами настраивал доступ к той или иной сети. Единственная проблема, которая тут может возникнуть, это если нумерация подключаемых сетей будет совпадать. Но тут уже ничего не поделаешь, придется ее где-то менять.

Видео

Помогла статья? Есть возможность отблагодарить автора

Дополнительные материалы по CentOS

Рекомендую полезные материалы по CentOS:
Настройки системы
  • Установка
  • Базовая настройка
  • Настройка времени
  • Настройка сети
  • Настройка репозиториев
  • Настройка iptables
Установка CentOS 7 в конфигурации minimal или netinstall с загрузочной флешки или по сети на диск или raid раздел.
Базовая настройка CentOS 7 для работы с любым функционалом. Приведены практические советы по улучшению безопасности и удобства администрирования.
Как установить точное время на сервере CentOS, настроить часовой пояс, синхронизировать время с помощью ntpdate и ntpd и другое.
Подробное описание настройки сети в CentOS 7 - задать ip адрес, dhcp, отключить ipv6, dns, hostname, статические маршруты и др.
Установка репозиториев epel, rpmforge и др. Добавление, удаление, обновление rpm репозиториев в CentOS.
Рассмотрены основные моменты настройки iptables в Centos 7 - установка, добавление правил, проброс портов, nat, логирование и д.р.
Настройка программных комплексов
 
  • Прокси сервер
  • Шлюз
  • Asterisk
  • Asterisk+Freepbx
  • Сервер VPN
  • Web сервер Apache
  • Web сервер Nginx
  • Почтовый сервер
Подробное описание настройки прокси сервера на базе CentOS 7 со связкой squid+AD+sams2, реализован запрет доступа по url и группам пользователей.
Простая и быстрая настройка шлюза на базе CentOS 7 для организации доступа в интернет из локальной сети.
Описание установки и настройки asterisk - популярной современной sip атс. Описан расширенный функционал, покрывающий большинство потребностей стандартного офиса в современной телефонии.
Подробное описание установки voip сервера asterisk и панели управления freepbx на CentOS 7.
Установка и настройка OpenVPN сервера на CentOS для объединения офисов и подключения удаленных пользователей
Настройка web сервера CentOS 7 на базе связки http сервера apache, php и сервера db mysql, или коротко - установка lamp.
Установка и настройка высокопроизводительного web сервера на базе nginx и php fpm. В качестве кэша используется APC.

Описание установки и настройки почтового сервера iRedMail на основе готовой сборки на CentOS 7. Обзор основных возможностей и рекомендации по настройке.

Самостоятельная настройки почтового сервера postfix + dovecot а так же дополнительных полезных модулей для полноценной и удобной работы почты.

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

Настройка отдельных программ
 
  • Zabbix
  • Phpmyadmin
  • Webmin
  • Ruby
  • Обновление php
  • Vsftpd
  • Bind
  • Unison
  • Observium
  • Syslog-NG
Видео и подробное описание установки и настройки Zabbix 3.2, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание установки и настройки панели управления phpmyadmin на веб сервер apache и nginx под управлением Centos 7.
Подробное описание установки и настройки Webmin на CentOS 7 для удаленного подключения и управления сервером.
Подробное описание установки языка Ruby последней версии на веб сервер под управлением CentOS 7.
Подробное описание установки или обновления php 7 на CentOS 7. Рассмотрен вариант отката обновления и возврата на php 5.6 или 5.4.
Подробное описание с видео установки и настройки ftp сервера vsftpd, примеры с локальными и виртуальные пользователями в mysql.
Настройка DNS сервера BIND (Named) в CentOS 7. Рассмотрены наиболее популярные конфигурации, в том числе подробное логирование.
Установка Unison в CentOS 7 для двухсторонней синхронизации файлов.
Инструкция по установке и настройке сервера мониторинга Observium на CentOS 7. В качестве примера в конце добавлено одно устройство для мониторинга.
Настройка сервера для централизованного сбора логов с удаленных устройств и серверов с помощью программы syslog-ng.
Разное
  • Настройка ssl в Apache
  • Бэкап с помощью rsync
Настройка работы веб сервера apache с виртуальными хостами по протоколу https с использованием бесплатного ssl сертификата.
Подробное описание настройки бэкапа с помощью rsync на примере скрипта инкрементного архива на системе Centos, Debian, Ubuntu, Windows.

129 комментариев

  1. Sprinter

    А как сделать так, чтоб можно было выбирать какое впн подключение запустить?
    Т.е. есть у меня несколько мест куда я хочу подключаться по требованию. Как сделатьтак,чтоб можно было выбирать в какое место мне подключиться в текущий момент? Как в OpenVPN GUI под виндой?

    • Zerox

      //serveradmin.ru/kak-sdelat-odnovremenno-neskolko-openvpn-podklyucheniy/
      Здесь рассказал об этом.

      • Sprinter

        С Windows проблем не возникает.
        А вот как такое же сделать под CentOS?

        P.S. Огромное Вам спасибо, очень много полезной информации.

        • EdTeach

          да какбы все просто, все Ваши клиентские конфиги хранятся в в папке /etc/openvpn когда запускаете впн просто укажите имя клиентского конфига который вам необходим systemctl start client1@openvpn или systemctl start client2@openvpn

  2. Даниил
    Даниил

    дошел до создания структуру публичных PKI ключей при выполнении
    # ./easyrsa init-pki — выдает следующее

    Note: using Easy-RSA configuration from: ./vars
    ./easyrsa: line 289: openssl: command not found

    Easy-RSA error:

    Missing or invalid OpenSSL
    Expected to find openssl command at: openssl
    скажите что я делаю не правильно?

  3. PBX

    Как отозвать сертификат?

  4. Sprinter

    Добрый день.
    В процессе настройки, после того, как отключил SELINUX, и сделал перезагрузку, выловил это:
    failed to load selinux policy freezing

    Как это можно исправить?

    • Zerox

      Первый раз такое вижу. А что еще делал на сервере? Я всегда отключаю SELinux и никогда такой ошибки не было. Эта ошибка хорошо гуглится, попробуй разные варианты. Самое простое, это во время выбора ядра для загрузки, выбрать загрузку с параметрами и указать там доп параметр enforcing=0. Так ты сможешь хотя бы загрузиться.

      • Sprinter

        Промазал строчкой.
        Вместо SELINUX=disabled
        исправил SELINYXTYPE=disabled
        От чего он и упал напроч при загрузке.
        Пришлось редактировать загрузчик и исправлять все обратно

    • Sprinter

      Прошу прощения, не тот параметр исправил в текстовом файле…

  5. Zerox

    Статья полностью актуальна. Только что простым копипастом за 15 минут настроил openvpn сервер.

  6. Рустам
    Рустам

    если прописывать push «route …» — тогда в роутах не создаются автоматом роуты. а вот если push опустить — то все норм. в чем может быть проблема? спасибо

    • Zerox

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

      • Рустам
        Рустам

        вот так как я описал — у меня все работает. если в клиенте ничего не писать, а писать в сервере две строчки и пуш и роут. Тогда клиент подхватывает роуты которые ему пушит сервак.

    • Рустам
      Рустам

      вроде понял, если конечно правильно понял: в client.conf — вообще ни route, ни push… не указываем. а в server.conf — пишем:
      route 192.168.20.0 255.255.255.0
      push «route 192.168.20.0 255.255.255.0»
      route 192.168.30.0 255.255.255.0
      push «route 192.168.30.0 255.255.255.0»
      так?

      • Zerox

        Эти строки по сути дублируют друг друга :)) Они одно и то же делают, просто синтаксис чуть разный. Вообще, если я не путаю, с push я писал прокидывание маршрутов клиенту в файле конфигурации клиента, а без push глобально в общем конфиге для всех. Но могу что-то путать. Я давно уже осмысленно не настраивал рабочие конфигурации openvpn.

        • Рустам
          Рустам

          )) нет. у меня все как-то по другому)
          если в конфиге сервака я пришу пуш «роут 192.168.20.0 255.255.255.0», то тогда в netstat -nr — не видно роута 192.168.20.0 вообще. если не пишу пуш, а пишу роут — тогда клиент не получает роут)

  7. Аноним
    Аноним

    Бред какой то копирую ваше правило для iptables

    Bad argument `tun+’

  8. Аноним
    Аноним

    Да поднят, использовал конфиг iptables из статьи по настройке iptables для centos.
    Еще один вопрос, когда на openvpn клиенте подымаю демон openvpn у меня сразу отваливатся 2 сетевая карта с доступом в локалку
    Как только стопаю опенвпн все нормально

  9. komron

    У меня чьё та на Сервер удаленного офиса, который стоит CentOS после установки OpenVPN адаптер чье та не появляется. Расскажу что я делал:
    На Главный офис где установлен серверная часть OpenVPN я делал всё по инструкцию, который написано в начале статьи, но когда пришел очередь удаленного офиса я просто установил OpenVPN сервер, создал ключи и сертификаты для него на сервере и скинул их в нужное место, но после запуске systemctl start(enable) openvpn@client адаптер tan не появляется

    • Zerox

      Нужно смотреть логи системы и самого openvpn на наличие ошибок. Если tun интерфейс не создается, значит какие-то ошибки.

  10. komron

    Да вы правы, но это же 2 или 3-й раз как всегда на серверный часть всё нормально, а на клиентском при вводе ifconfig есть только два сетевых адаптеров но адаптер от OpenVPN — а нету. А по сути при вводе каких команд адаптер должен появиться? А разве после yum -y install openvpn или после ввода systemctl start openvpn@client она не должна появиться? Помогите пожалуйста в долгу не останусь обещаю… И ещё клиенты которые подключены на сервер филиал без проблем подключаются к Интернету и на основном офисе тоже.

  11. Серж

    здравствуйте, у меня tun0 на vpn-клиенте не создается, в логах ошибка TLS key negotiation failed to occur within 60 seconds , никак не пойму что ему надо(((

  12. Дима

    Здравствуйте.
    Интересная статья, спасибо автору !

    Только вот не могу ни как настроить/наладить ВПН подключение.
    Подскажите что у меня не правильно.

    ПО СТЕНДУ:
    1 VM Сервер на центосе 7 для ВПН
    1 VM windows 7 клиент с которого и будем выходить в инет по впн.

    Сеть 192,168,1,0 — моя домашняя локалка через gw которой 1,1 я выхожу в инет.
    Сеть 172,16,0,0 — для впн

    Все VM развернуты ВМвареворкстэйшен

    У всех VM в свойствах на сетевых адаптерах — bridge.

    Что мне выбрать из TAP или TUN ???
    И как это правильно выставить в настройках.

    Пробовал по разному. Выставляю TUN подключение работает, на винде коннект поднимается, пробую TAP не работает.
    Если я правильно понял, так как у меня все на VM мне нужно выставить TAP.

    МОИ КОНФИГИ;

    Server

    port 1234
    proto tcp
    dev tun
    ca ca.cert
    cert server.crt
    key server.key
    dh dh.pem
    server 172.16.1.0 255.255.255.0
    push route «192.168.1.0 255.255.255.0»
    push «dhcp-option dns 8.8.8.8»
    push «dhcp-option dns 8.8.4.4»
    route 192.168.1.0 255.255.255.0
    server-bridge 172.16.0.8 255.255.255.0 172.16.0.10 172.16.0.50 — с этой строчкой сервис впн вообще не поднимается. Ее использовал для моста. Без нее поднимается но инета нет.
    persist-key
    persist-tun
    keepalive 10 20
    status /etc/openvpn/log/status.log
    verb 9
    mute 20

    CLIENT

    dev tap
    port 1234
    proto tcp
    remote 192.168.1.45
    client
    resolv-retry infinite
    ca ca.cert
    cert user.crt
    key user.key
    persist-key
    persist-tun

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

    • Дима

      Ок, VPN наладил. Подскажите как пробросить инет ? Чтобы клиентская машина могла выходить через openvpn в инет.

  13. Руслан
    Руслан

    Здравствуйте, всё получилось, но у меня, да и в Вашей статье зайти на любой комп можно только по ip. А как сделать чтобы по имени? И чтобы в сетевом окружении отображались ПК? То есть настроить распознавание имён машин в удаленной локальной сети?

    • Zerox

      Это достаточно сложная задача и нужно понимать, как работает netbios в windows. Тут надо разбираться, я не помню подробностей. Возможно, достаточно будет настройки WINS сервера, а может для работы отображения компьютеров в сетевом окружении потребуется проброс широковещательного трафика, который винда периодически рассылает для поиска соседей.

      Забыл еще нюанс. Выше написано про отображение компьютеров в сетевом окружении. Обращение по имени это уже вопрос настройки DNS сервера. При подключении по vpn нужно передавать пользователю свой dns сервер, который будет уметь резолвить нужные имена в ip.

      В общем, это 2 совершенно разные задачи.

      • Руслан
        Руслан

        Ответил Вам в другом посте)) Проблему решил заведением удаленного клиента в домен. Сразу же появились все принтеры и компы в сетевом окружении. Правда не совсем понял, как это работает. И ещё в конфиге клиента добавил строку
        route 192.168.3.0 MASK 255.255.255.0. Т.е. в локальную сеть

  14. Денис

    Доброго времени!
    Не могли бы подсказать, при старте сервиса openvpn ложиться ssh, почему такое может возникать?

    • Zerox

      Что значит ложится? Вырубается служба ssh или пропадает сетевой доступ? В принципе, эти сервисы между собой никак не связаны. Надо смотреть логи, проверять сеть, когда возникают проблемы.

      • Денис

        пропадает доступ по ssh и не возможно подключиться пока не отключишь openvpn

        • Zerox

          Что-то с маршрутизацией скорее всего. Надо смотреть, что меняется в маршрутах после запуска openvpn. Возможно подсети как-то конфликтуют в конфигах или что-то еще. Это явная ошибка в настройках.

  15. Максим
    Максим

    Спасибо за статью. Написано хорошо, большую работу проделали. На практике не проверял, правда. Пока присматриваюсь к openvpn и думаю как его можно было бы применить к моей очень простой структуре и не слишком ли это сложно будет. Мне непонятно почему там нужны client сертификаты, это же реальное усложнение. Есть ли возможность без них обойтись? Я понимаю, что это дополнительная безопасность, но для меня это уже избыточно. Ведь, например, если рассмотреть обычный доступ к сайту банковскому, будь то личный или даже корпоративный счет маленького ООО или сайт платежей там по https доступ осуществляется и клиентам никаких сертификатов не раздают. И это абсолютно не скомпрометированная схема, она станет таковой только если логин-пароль потеряешь. Private key имеет только web сервер. На стороне клиента никаких client private key и client crt нет. Ну, в хранилище сертификатов у клиента, естественно, находится root СА сертификат в доверенных корневых центрах, но он там лежит с момента установки винды, даже не нужно его туда импортировать. Но если мы свой CA поднимаем, конечно, без импорта CA сертификата не обойтись. Но клиентские можно не выписывать? Это даст определенную дополнительную гибкость, я на лету буду подключать любое устройство, которое ко мне в руки попадет или приду в гости и подключусь к дому или офису. CA crt можно и на сайте расшарить, а вот client private key выкидывать в инет не хочется. Что еще за dh.pem? Он тоже избыточен, хотя особых забот не несет, поскольку клиенту его передавать не нужно. Вот, если сравнивать с IKEv2 и SSTP на винде(их я настраивал), там есть возможность оба настроить и так и сяк — выдавая клиентские сертификаты(вариант усиленной безопасности) и обходясь без них как в схеме с https. А openVPN так может работать? Еще вопрос, скажем, если сервер DHCP отдельно поднят в офисе на другой машине, конфликтов не возникнет? Там можно как-то настройки поменять и разграничить, обозначить ВПН серверу, что ip выдает отдельный DHCP сервер. Также интересно если CA поднят на винде, можно ли передать ему сформированный запрос и подписанный ответ обратно подсунуть openvpn на centos, нормально им прожуется? И интересно еще, конечно, ввести в домен centOS, чтоб доменные credentials использовать. А домен конечно на винде поднят.

    • Zerox

      Куча вопросов, не знаю, как на все ответить. Если не нужны сертификаты, можно использовать pptp или l2tp, по сути то же самое, даже настраивать проще. Готовый клиент во всех популярных системах уже есть. Все остальное дело техники. Можно настроить.

  16. Максим
    Максим

    основной вопрос был в том можно ли openvpn без клиентских сертификатов использовать? Какие другие варианты есть без клиентских сертификатов я знаю, это все настраивал — pptp, l2tp, IKEv2, SSTP. Последние 2 имеют хорошую гибкость, там можно настраивать и с клиентскими сертификатами и без. Но нужен такой ВПН, который сможет бегать по 443 порту, то есть проникать в зафильтрованных сетях. Из упомянутых это только SSTP, но под него нет клиента на Android. Есть нечто платное но подозреваю, что вообще там через проксирование сделано, а не нативно напрямую. Openvpn же может бегать через 443 порт и клиент на андроиде бесплатный есть. Можно ли openVPN поднять без клиентских сертификатов? Это основной вопрос. И кстати, предложенные 2 варианта pptp, l2tp не используют концепцию асимметричного шифрования, в отличие от IKEv2, SSTP, openvpn, https. А только эта концепция на текущий момент достаточно надежна, остальное весьма уязвимо.

    • Zerox

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

  17. Максим
    Максим

    Разочарован уровнем ответов. Зачем вообще статью писать если в гугле можно все найти? Я думал автор понимает концепцию, но выходит, что просто меанические действия умеет исполнять и в действительности не понимает что делает. Нет знаний о шифровании, просто механически генерит сертификаты, а зачем? Что они делают не знает. Так почему не 100 сертов сгенерил, а только 10. Со 100 сертами то может безопаснее бы было? Чем больше тем безопаснее, генери не задумываясь.

    • Zerox

      Какие проблемы. Делаешь свой сайт, показываешь, как нужно писать классные статьи и ответы высокого уровня. Я захожу к тебе и учусь у тебя как надо. Но почему-то ты у меня на сайте, а не я у тебя.

      Мне видится использование сертификатов более удобным, чем пароли, поэтому я постоянно пользуюсь сертификатами и даже не интересуюсь, может ли openvpn работать без них. Мне это не надо. Если это надо тебе, изучи сам вопрос, а не проси меня это сделать за тебя.

  18. Максим
    Максим

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

  19. Лев

    автору спасибо за огромную работу!
    может и без сертификатов со стороны клиента, только нужно указать в клиентском конфиге ca.crt
    все написано
    https://openvpn.net/index.php/open-source/documentation/howto.html#auth
    Using alternative authentication methods

    подскажите, плиз. Сервер/клиент win-платформа, туннель пингуется в обе стороны, серверная подсеть клиенту передана, роутинг на клиента указан (обратка), но пинга нет ни туда ни обратно. Где копать?

    • Zerox

      А сам роутинг между сетевыми интерфейсами на сервере включен? Честно говоря, не знаю, где это на винде настраивается. Я никогда шлюзы на винде не делал.

  20. Лев

    На сервере 1 интерфейс, на него с роутера идет проброс уличного порта

    • Zerox

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

  21. Степан
    Степан

    Подскажите, как поднять два OpenVPN сервера на одном IP.
    Один для tcp, другой для udp подключений.

    • Zerox

      У меня нет готовой инструкции, но это делается без проблем. Я неоднократно запускал несколько vpn серверов на одном сервере. Для этого нужно сделать разные имена конфигов, изменить параметры порта или tcp/udp и изменить стартовые скрипты. При этом сертификаты могут быть одни и те же для сервера.

  22. Вадим

    добрый вечер,при запуске вылитае ошибка, подскажите пожалуйста
    [root@localhost easyrsa3]# systemctl start openvpn@server
    Job for openvpn@server.service failed because the control process exited with error code. See «systemctl status openvpn@server.service» and «journalctl -xe» for details.

    • Zerox

      Надо набрать в консоли
      systemctl status openvpn@server.service
      и посмотреть текст ошибки.

      • Вадим

        извините за беспокойство, это nano не сейвнуло конфигурационный файл, спасибо за Ваши статьи, очень упростили жизнь

      • Алексей
        Алексей

        У меня такая же ошибка. Как ее исправить? Вот текст ошибки:

        openvpn@server.service — OpenVPN Robust And Highly Flexible Tunneling Application On server
        Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
        Active: failed (Result: exit-code) since Mon 2017-06-26 10:41:40 MSK; 6min ago
        Process: 56316 ExecStart=/usr/sbin/openvpn —cd /etc/openvpn/ —config %i.conf (code=exited, status=1/FAILURE)
        Main PID: 56316 (code=exited, status=1/FAILURE)

        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Starting OpenVPN Robust And Hig….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service: main pr…E
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Failed to start OpenVPN Robust ….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Unit openvpn@server.service ent….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service failed.
        Hint: Some lines were ellipsized, use -l to show in full.

  23. Дмитри
    Дмитри

    Здравствуйте, я уже достаточно долго бьюсь над созданием сервера openvpn по вашей статье.

    У меня есть сервер, который имеет одну сетевую карту eth0.
    Сделал проброс порта на роутере порта 1194 на этот сервер.
    Но я никак не могу увидеть сеть со стороны сервера от клиента.

    net.ipv4.ip_forward = 1
    push «route 192.168.1.0 255.255.255.0» # передаем маршрут клиентам

    Необходимое прописано.

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

    • Zerox

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

  24. Дмитрий
    Дмитрий

    На клиенте

    IPv4 таблица маршрута
    ===========================================================================
    Активные маршруты:
    Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
    0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.166 10
    10.0.0.0 255.255.255.0 On-link 10.0.0.4 276
    10.0.0.4 255.255.255.255 On-link 10.0.0.4 276
    10.0.0.255 255.255.255.255 On-link 10.0.0.4 276
    127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
    127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
    127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
    192.168.0.0 255.255.255.0 On-link 192.168.0.166 266
    192.168.0.166 255.255.255.255 On-link 192.168.0.166 266
    192.168.0.255 255.255.255.255 On-link 192.168.0.166 266
    192.168.1.0 255.255.255.0 10.0.0.1 10.0.0.4 20
    224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
    224.0.0.0 240.0.0.0 On-link 192.168.0.166 266
    224.0.0.0 240.0.0.0 On-link 10.0.0.4 276
    255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
    255.255.255.255 255.255.255.255 On-link 192.168.0.166 266
    255.255.255.255 255.255.255.255 On-link 10.0.0.4 276
    ===========================================================================

    На сервере:

    [root@openvpn-vm ~]# ip ro
    default via 192.168.1.1 dev eth0 proto static metric 100
    10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.1
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.199 metric 100
    [root@openvpn-vm ~]# iptables -L -nv
    Chain INPUT (policy ACCEPT 7421 packets, 662K bytes)
    pkts bytes target prot opt in out source destination
    72 7406 ACCEPT all — tun+ * 0.0.0.0/0 0.0.0.0/0

    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    1443 76908 ACCEPT all — tun+ * 0.0.0.0/0 0.0.0.0/0
    0 0 ACCEPT all — * * 10.0.0.0/24 192.168.1.0/24
    0 0 ACCEPT all — * * 192.168.1.0/24 10.0.0.0/24

    Chain OUTPUT (policy ACCEPT 1562 packets, 152K bytes)
    pkts bytes target prot opt in out source destination

    Конфиг сервера:
    mode server
    daemon vpn-server
    port 1194 # я предпочитаю использовать нестандартные порты для работы
    proto udp # протокол может быт и tcp, если есть необходимость в этом
    dev tun
    topology subnet

    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/server.crt
    key /etc/openvpn/server.key
    dh /etc/openvpn/dh.pem

    server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
    #route 192.168.0.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
    push «route 192.168.1.0 255.255.255.0» # передаем маршрут клиентам
    #push «redirect-gateway def1» # Перенаправлять default gateway на vpn-сервер. Если не нужно — закомментировать.
    #push «redirect-gateway»

    ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet — ip
    client-to-client # позволяет клиентам openvpn подключаться друг к другу
    client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов

    keepalive 10 120
    comp-lzo
    persist-key
    persist-tun
    status /var/log/openvpn/openvpn-status.log
    log /var/log/openvpn/openvpn.log
    verb 3

    Конфиг клиента:
    dev tun
    proto udp
    remote xxxx.net 1194
    client
    ca C:\\OpenVPN\\sauto\\ca.crt
    cert C:\\OpenVPN\\sauto\\fedorov.crt
    key C:\\OpenVPN\\sauto\\fedorov.key
    #route 192.168.1.0 255.255.255.0
    persist-key
    persist-tun
    comp-lzo
    verb 3

    Конфиг iptables (многое что перепробовал, сейчас пытаюсь без всякиъ блокираторов траффика делать)
    #!/bin/bash
    #
    export IPT=»iptables»

    # Очистка всех цепочек iptables
    $IPT -F
    $IPT -F -t nat
    $IPT -F -t mangle
    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X

    export LAN_RANGE=192.168.1.0/24
    export OPENVPN_RANGE=10.0.0.0/24

    # Allow TUN interface connections to OpenVPN server
    $IPT -A INPUT -i tun+ -j ACCEPT

    # Allow TUN interface connections to be forwarded through other interfaces
    $IPT -A FORWARD -i tun+ -j ACCEPT

    $IPT -A FORWARD -s $OPENVPN_RANGE -d $LAN_RANGE -j ACCEPT
    $IPT -A FORWARD -s $LAN_RANGE -d $OPENVPN_RANGE -j ACCEPT

    #iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE
    iptables -A POSTROUTING -s 192.168.1.0/24 -t nat -o tun0 -j MASQUERADE

    # Записываем правила
    #/sbin/iptables-save > /etc/sysconfig/iptables

    • Дмитрий
      Дмитрий

      Нашел на забугорном сайте настройки iptables

      iptables -A INPUT -i eth0 -m state —state NEW -p udp —dport 1194 -j ACCEPT
      iptables -A INPUT -i tun+ -j ACCEPT
      iptables -A FORWARD -i tun+ -j ACCEPT
      iptables -A FORWARD -i tun+ -o eth0 -m state —state RELATED,ESTABLISHED -j ACCEPT
      iptables -A FORWARD -i eth0 -o tun+ -m state —state RELATED,ESTABLISHED -j ACCEPT
      iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
      iptables -A OUTPUT -o tun+ -j ACCEPT

  25. riviera89

    Здравствуйте у меня такая беда делал всё по статье всё работает за исключением одной мелочи когда я пингую сервер шлюз всё хорошо пинги проходят а когда пытаюсь пропинговать windows 7 со включенным брендмауером пинги не проходят но если брендмауер выключить то всё хорошо что можно исправить чтобы всё работало со включенным брендмауером помогите плиз мучаюсь уже 2 неделю

    • Zerox

      Не понял, в чем проблема? На windows фаервол блокирует пинги. Его либо настроить надо, чтобы он пропускал пинги, либо отключить. Это не проблема со связью.

  26. Алексей
    Алексей

    Здравствуйте!
    Спасибо за статью. Я только с нее начал изучать Centos. Только у меня проблема возникла в процессе настройки.
    У вас написано: Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:

    # ./easyrsa gen-req server nopass

    У меня в результате после команды пишет: -bash: ./easyrsa: No such file or directory

    Что сделать, чтобы у меня было бы так как у вас в статье?

    • Zerox

      В тексте ошибки же все написано. Указанный фал не найден. Вы выполняете команду, будучи в каталоге, где нет файла easyrsa. Нужно перейти в каталог с ним.

      • Алексей
        Алексей

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

        добрый вечер,при запуске вылитае ошибка, подскажите пожалуйста
        [root@localhost easyrsa3]# systemctl start openvpn@server
        Job for openvpn@server.service failed because the control process exited with error code. See «systemctl status openvpn@server.service» and «journalctl -xe» for details.

        Ответить

        Zerox 16.05.2017 at 23:13
        Надо набрать в консоли
        systemctl status openvpn@server.service
        и посмотреть текст ошибки.

        Ответить

        Вадим 16.05.2017 at 23:44
        извините за беспокойство, это nano не сейвнуло конфигурационный файл, спасибо за Ваши статьи, очень упростили жизнь

        Ответить

        Алексей 26.06.2017 at 10:56
        У меня такая же ошибка. Как ее исправить? Вот текст ошибки:

        openvpn@server.service — OpenVPN Robust And Highly Flexible Tunneling Application On server
        Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
        Active: failed (Result: exit-code) since Mon 2017-06-26 10:41:40 MSK; 6min ago
        Process: 56316 ExecStart=/usr/sbin/openvpn —cd /etc/openvpn/ —config %i.conf (code=exited, status=1/FAILURE)
        Main PID: 56316 (code=exited, status=1/FAILURE)

        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Starting OpenVPN Robust And Hig….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service: main pr…E
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Failed to start OpenVPN Robust ….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: Unit openvpn@server.service ent….
        Jun 26 10:41:40 centos.ruvds.com systemd[1]: openvpn@server.service failed.
        Hint: Some lines were ellipsized, use -l to show in full.

  27. Evg

    Доброго времени суток. Большое спасибо за столь подробное написание статьи!
    Только столкнулся с такой проблемой, подключаюсь удаленным клиентом (на Windows) к серверу, подключение проходит, маршрут нужный прописывается. Но, не пингуется и не доступна сеть за сервером, хотя интерфейс сервера подключенный к локальной сети пингуется. Перенаправление трафика между интерфейсами включен и в iptables все настроено. Можете подсказать в чем может быть проблема или в какую сторону копать? Заранее спасибо!

    • Zerox

      Проблемы тут может быть 3, хотя по всем трем вы написали, что все в порядке. Но нужно проверять каждый нюанс в отдельности:
      1. Что маршруты верно указаны и реально работают.
      2. Что фаервол настроен правильно и реально все пропускает. Можно включить его логирование для разбора этой ситуации.
      3. Убедиться, что форвард пакетов между сетевыми интерфейсами точно включен и работает.
      4. Убедиться, что в сети за сервером на конечных машинах тоже настроен фаервол и он не блочит запросы. Например, включенный фаервол винды по-умолчанию не пропускает пинги.
      5. На машинах за сервером должен быть указан шлюз по-умолчанию именно vpn сервер, либо иным образом корректно настроены все маршруты. То есть проверять маршруты нужно не только на стороне клиента, который подключается по vpn, но и на стороне локальной сети, к которой должен быть доступ. Иначе может возникнуть ситуация, что клиент корректно обращается в локальную сеть и его пакеты долетают, а вот ответы назад не приходят.

      • Evg

        Спасибо за помощь! Все получилось.

        • Zerox

          В чем была проблема?

          • Evg

            Проблема оказалась в 3 дневной усталости и по итогу невнимательности =) В iptables форвард не так был настроен. Сегодня «свежим» взглядом ещё раз пробежался по скрипту и нашел ошибку. Еще раз спасибо =)

  28. Davidov

    Спасибо за статью! Очень полезно. Один из вопросов, как заставить весь трафик клиента идти в тоннель в обход локального подключения к интернету?

    • Zerox

      Гугли вот этот параметр:
      push redirect-gateway def1
      Его нужно передать клиенту, чтобы он весь траффик пускал через vpn.

      • Davidov

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

        На свежеустановленной системе iptables некорректно обрабатывает конфиги данные в статье (в этой и в соседних про настройку сервера и firewall).
        Конкретнее, iptables игнорирует все настройки что ниже этих строк (раздел *filter)
        INPUT DROP
        OUTPUT DROP
        FORWARD DROP

        Пока не изменить здесь значение на ACCEPT, сервер даже сам не может выйти в интернет хотя ниже в конфиге это разрешено.

        • Zerox

          C firewall надо разбираться, чтобы работало без ошибок.
          Еще надо не забыть настроить NAT на openvpn интерфейсе на сервере. Без этого клиенты не смогут выходить в интернет по vpn, используя в качестве шлюза vpn сервер.

          • Davidov

            Не удалось никак заставить работать iptables корректно. Так как времени экспериментировать у меня больше не было вернул 6 цент, все настройки легли сразу и заработали верно, а интернет клиентам шарится через две опции:
            В скрипт добавляется строка: $IPT -t nat -A POSTROUTING -s tun0 -o $WAN -j MASQUERADE
            В конфиг openvpn сервера добавляется: push «redirect-gateway def1»

            Ещё раз спасибо огромное за серию статей! Мне это сильно помогло.

            • Zerox

              В centos 7 по-умолчанию используется firewalld. Это обертка управления над iptables. Возможно из-за этого не получилось сразу настроить iptables. У меня об этом рассказано в статье про настройку iptables.

  29. Евгений

    Добрый день! Возможно ли подключиться к OpenVPN серверу клиентом модема, например TP-Link. Там, на сколько понял, нет выбора сертификата с которым можно будет подключиться.

  30. Алуксандр
    Алуксандр

    добрый день
    спасибо за статью
    возникла одна проблема при установке которую не могу ни нагуглить ни сам решить

    [root@Openvpn easyrsa3]# ./easyrsa sign-req server server

    Note: using Easy-RSA configuration from: ./vars
    Usage: rand [options] num
    where options are
    -out file — write to file
    -engine e — use engine e, possibly a hardware device.
    -rand file:file:… — seed PRNG from files
    -base64 — base64 encode output
    -hex — hex encode output

    You are about to sign the following certificate.
    Please check over the details shown below for accuracy. Note that this request
    has not been cryptographically verified. Please be sure it came from a trusted
    source or that you have verified the request checksum with the sender.

    Request subject, to be signed as a server certificate for 3650 days:

    subject=
    commonName = server

    Type the word ‘yes’ to continue, or any other input to abort.
    Confirm request details: yes
    Using configuration from ./openssl-1.0.cnf
    Enter pass phrase for /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/private/ca.key:
    Check that the request matches the signature
    Signature ok
    The Subject’s Distinguished Name is as follows
    commonName :PRINTABLE:’server’
    ERROR: adding extensions in section default
    140605755951008:error:22097082:X509 V3 routines:DO_EXT_NCONF:unknown extension name:v3_conf.c:124:
    140605755951008:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:93:name=copy_extensions, value=copy

    Easy-RSA error:

    signing failed (openssl output above may have more detail)
    подскажите пожалуйста что я делаю не так

    • Алуксандр
      Алуксандр

      пробовал обновить openssl (не помогло)
      # openssl version
      OpenSSL 1.0.1e-fips 11 Feb 2013
      # yum -y install gcc
      # yum -y install gcc-c++
      # yum install make

      # cd /usr/local/src
      # wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
      # tar -zxf openssl-1.0.2-latest.tar.gz
      # cd openssl-1.0.2a
      # ./config
      # make
      # make test
      # make install
      # mv /usr/bin/openssl /root/
      # ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

      # openssl version
      OpenSSL 1.0.2l 25 May 2017

    • Zerox

      Надо гуглить ошибку и смотреть, в чем может быть проблема. Так трудно что-то советовать. У меня обычно все штатно проходит, без проблем.

      • Алуксандр
        Алуксандр

        говорят в easyrsa надо исправить
        источник #https://github.com/OpenVPN/easy-rsa/commit/bc586578b4d6318e1a00317e5a14a19311649eac#diff-231cb43897d7aa2a98dfda5720c2b40fL537#

        — EASYRSA_EXTRA_EXTS=»
        + local extra_exts=»
        и
        — print «$EASYRSA_EXTRA_EXTS» | \
        + print «$extra_exts» | \
        но у меня уже исправленно хз проблама была в 2015 году и в новой версии должны были поправить но ничего не работает
        centos 3 раза перебивал
        походу дело в скрипте
        Может у кого есть рабочий архив — поделитесь пожалуйста
        Коллеги пожалуйста у кого есть

  31. Salozavr

    Добрый день. Получилось выпустить клиентов через openvpn. Но возникла проблема с подключением с android устройств (на маках не пробовал). Подскажите плыз, может кто-то сталкивался с проблемой подключения на andorid?

    log:

    2017-11-09 13:45:50 New OpenVPN Status (USER_VPN_PASSWORD->LEVEL_WAITING_FOR_USER_INPUT): 
    2017-11-09 13:45:59 Создание конфигурации…
    2017-11-09 13:45:59 New OpenVPN Status (VPN_GENERATE_CONFIG->LEVEL_START): 
    2017-11-09 13:45:59 New OpenVPN Status (VPN_GENERATE_CONFIG->LEVEL_START): 
    2017-11-09 13:45:59 started Socket Thread
    2017-11-09 13:45:59 Статус сети: CONNECTED  to WIFI "Wi-Fi-Name"
    2017-11-09 13:45:59 Debug state info: CONNECTED  to WIFI "Wi-Fi-Name", pause: userPause, shouldbeconnected: true, network: SHOULDBECONNECTED 
    2017-11-09 13:45:59 Debug state info: CONNECTED  to WIFI "Wi-Fi-Name", pause: userPause, shouldbeconnected: true, network: SHOULDBECONNECTED 
    2017-11-09 13:45:59 P:Initializing Google Breakpad!
    2017-11-09 13:45:59 Current Parameter Settings:
    2017-11-09 13:45:59   config = '/data/user/0/de.blinkt.openvpn/cache/android.conf'
    2017-11-09 13:45:59 Ожидание 0s секунд между попыткой подключения
    2017-11-09 13:45:59   mode = 0
    2017-11-09 13:45:59   show_ciphers = DISABLED
    2017-11-09 13:45:59   show_digests = DISABLED
    2017-11-09 13:45:59   show_engines = DISABLED
    2017-11-09 13:45:59   genkey = DISABLED
    2017-11-09 13:45:59   key_pass_file = '[UNDEF]'
    2017-11-09 13:45:59   show_tls_ciphers = DISABLED
    2017-11-09 13:45:59   connect_retry_max = 0
    2017-11-09 13:45:59 Connection profiles [0]:
    2017-11-09 13:45:59   proto = udp
    2017-11-09 13:45:59   local = '[UNDEF]'
    2017-11-09 13:45:59   local_port = '1194'
    2017-11-09 13:45:59   remote = 'Server_IP'
    2017-11-09 13:45:59   remote_port = 'Server_Port'
    2017-11-09 13:45:59   remote_float = DISABLED
    2017-11-09 13:45:59   bind_defined = DISABLED
    2017-11-09 13:45:59   bind_local = ENABLED
    2017-11-09 13:45:59   bind_ipv6_only = DISABLED
    2017-11-09 13:45:59   connect_retry_seconds = 2
    2017-11-09 13:45:59   connect_timeout = 120
    2017-11-09 13:45:59   socks_proxy_server = '[UNDEF]'
    2017-11-09 13:45:59   socks_proxy_port = '[UNDEF]'
    2017-11-09 13:45:59   tun_mtu = 1500
    2017-11-09 13:45:59   tun_mtu_defined = ENABLED
    2017-11-09 13:45:59   link_mtu = 1500
    2017-11-09 13:45:59   link_mtu_defined = DISABLED
    2017-11-09 13:45:59   tun_mtu_extra = 0
    2017-11-09 13:45:59   tun_mtu_extra_defined = DISABLED
    2017-11-09 13:45:59   mtu_discover_type = -1
    2017-11-09 13:45:59   fragment = 0
    2017-11-09 13:45:59   mssfix = 1450
    2017-11-09 13:45:59   explicit_exit_notification = 0
    2017-11-09 13:45:59 Connection profiles END
    2017-11-09 13:45:59   remote_random = DISABLED
    2017-11-09 13:45:59   ipchange = '[UNDEF]'
    2017-11-09 13:45:59   dev = 'tun'
    2017-11-09 13:45:59   dev_type = '[UNDEF]'
    2017-11-09 13:45:59   dev_node = '[UNDEF]'
    2017-11-09 13:45:59   lladdr = '[UNDEF]'
    2017-11-09 13:45:59   topology = 1
    2017-11-09 13:45:59   ifconfig_local = '[UNDEF]'
    2017-11-09 13:45:59   ifconfig_remote_netmask = '[UNDEF]'
    2017-11-09 13:45:59   ifconfig_noexec = DISABLED
    2017-11-09 13:45:59   ifconfig_nowarn = ENABLED
    2017-11-09 13:45:59   ifconfig_ipv6_local = '[UNDEF]'
    2017-11-09 13:45:59   ifconfig_ipv6_netbits = 0
    2017-11-09 13:45:59   ifconfig_ipv6_remote = '[UNDEF]'
    2017-11-09 13:45:59   shaper = 0
    2017-11-09 13:45:59   mtu_test = 0
    2017-11-09 13:45:59   mlock = DISABLED
    2017-11-09 13:45:59   keepalive_ping = 0
    2017-11-09 13:45:59   keepalive_timeout = 0
    2017-11-09 13:45:59   inactivity_timeout = 0
    2017-11-09 13:45:59   ping_send_timeout = 0
    2017-11-09 13:45:59   ping_rec_timeout = 0
    2017-11-09 13:45:59   ping_rec_timeout_action = 0
    2017-11-09 13:45:59   ping_timer_remote = DISABLED
    2017-11-09 13:45:59   remap_sigusr1 = 0
    2017-11-09 13:45:59   persist_tun = DISABLED
    2017-11-09 13:45:59   persist_local_ip = DISABLED
    2017-11-09 13:45:59   persist_remote_ip = DISABLED
    2017-11-09 13:45:59   persist_key = DISABLED
    2017-11-09 13:45:59   passtos = DISABLED
    2017-11-09 13:45:59   resolve_retry_seconds = 60
    2017-11-09 13:45:59   resolve_in_advance = DISABLED
    2017-11-09 13:45:59   username = '[UNDEF]'
    2017-11-09 13:45:59   groupname = '[UNDEF]'
    2017-11-09 13:45:59   chroot_dir = '[UNDEF]'
    2017-11-09 13:45:59   cd_dir = '[UNDEF]'
    2017-11-09 13:45:59   writepid = '[UNDEF]'
    2017-11-09 13:45:59   up_script = '[UNDEF]'
    2017-11-09 13:45:59   down_script = '[UNDEF]'
    2017-11-09 13:45:59   down_pre = DISABLED
    2017-11-09 13:45:59   up_restart = DISABLED
    2017-11-09 13:45:59   up_delay = DISABLED
    2017-11-09 13:45:59   daemon = DISABLED
    2017-11-09 13:45:59   inetd = 0
    2017-11-09 13:45:59   log = DISABLED
    2017-11-09 13:45:59   suppress_timestamps = DISABLED
    2017-11-09 13:45:59   machine_readable_output = ENABLED
    2017-11-09 13:45:59   nice = 0
    2017-11-09 13:45:59   verbosity = 4
    2017-11-09 13:45:59   mute = 0
    2017-11-09 13:45:59   gremlin = 0
    2017-11-09 13:45:59   status_file = '[UNDEF]'
    2017-11-09 13:45:59   status_file_version = 1
    2017-11-09 13:45:59   status_file_update_freq = 60
    2017-11-09 13:45:59   occ = ENABLED
    2017-11-09 13:45:59   rcvbuf = 0
    2017-11-09 13:45:59   sndbuf = 0
    2017-11-09 13:45:59   sockflags = 0
    2017-11-09 13:45:59   fast_io = DISABLED
    2017-11-09 13:45:59   comp.alg = 0
    2017-11-09 13:45:59   comp.flags = 0
    2017-11-09 13:45:59   route_script = '[UNDEF]'
    2017-11-09 13:45:59   route_default_gateway = '[UNDEF]'
    2017-11-09 13:45:59   route_default_metric = 0
    2017-11-09 13:45:59   route_noexec = DISABLED
    2017-11-09 13:45:59   route_delay = 0
    2017-11-09 13:45:59   route_delay_window = 30
    2017-11-09 13:45:59   route_delay_defined = DISABLED
    2017-11-09 13:45:59   route_nopull = DISABLED
    2017-11-09 13:45:59   route_gateway_via_dhcp = DISABLED
    2017-11-09 13:45:59   allow_pull_fqdn = DISABLED
    2017-11-09 13:45:59   route 0.0.0.0/0.0.0.0/vpn_gateway/default (not set)
    2017-11-09 13:45:59   management_addr = '/data/user/0/de.blinkt.openvpn/cache/mgmtsocket'
    2017-11-09 13:45:59   management_port = 'unix'
    2017-11-09 13:45:59   management_user_pass = '[UNDEF]'
    2017-11-09 13:45:59   management_log_history_cache = 250
    2017-11-09 13:45:59   management_echo_buffer_size = 100
    2017-11-09 13:45:59   management_write_peer_info_file = '[UNDEF]'
    2017-11-09 13:45:59   management_client_user = '[UNDEF]'
    2017-11-09 13:45:59   management_client_group = '[UNDEF]'
    2017-11-09 13:45:59   management_flags = 4390
    2017-11-09 13:45:59   shared_secret_file = '[UNDEF]'
    2017-11-09 13:45:59   key_direction = (null)
    2017-11-09 13:45:59   ciphername = 'BF-CBC'
    2017-11-09 13:45:59   ncp_enabled = ENABLED
    2017-11-09 13:45:59   ncp_ciphers = 'AES-256-GCM:AES-128-GCM'
    2017-11-09 13:45:59   authname = 'SHA1'
    2017-11-09 13:45:59   prng_hash = 'SHA1'
    2017-11-09 13:45:59   prng_nonce_secret_len = 16
    2017-11-09 13:45:59   keysize = 0
    2017-11-09 13:45:59   engine = DISABLED
    2017-11-09 13:45:59   replay = ENABLED
    2017-11-09 13:45:59   mute_replay_warnings = DISABLED
    2017-11-09 13:45:59   replay_window = 64
    2017-11-09 13:45:59   replay_time = 15
    2017-11-09 13:45:59   packet_id_file = '[UNDEF]'
    2017-11-09 13:45:59   test_crypto = DISABLED
    2017-11-09 13:45:59   tls_server = DISABLED
    2017-11-09 13:45:59   tls_client = ENABLED
    2017-11-09 13:45:59   key_method = 2
    2017-11-09 13:45:59   ca_file = '[[INLINE]]'
    2017-11-09 13:45:59   ca_path = '[UNDEF]'
    2017-11-09 13:45:59   dh_file = '[UNDEF]'
    2017-11-09 13:45:59   cert_file = '[[INLINE]]'
    2017-11-09 13:45:59   extra_certs_file = '[UNDEF]'
    2017-11-09 13:45:59   priv_key_file = '[[INLINE]]'
    2017-11-09 13:45:59   pkcs12_file = '[UNDEF]'
    2017-11-09 13:45:59   cipher_list = '[UNDEF]'
    2017-11-09 13:45:59   tls_verify = '[UNDEF]'
    2017-11-09 13:45:59   tls_export_cert = '[UNDEF]'
    2017-11-09 13:45:59   verify_x509_type = 2
    2017-11-09 13:45:59   verify_x509_name = 'Server_IP'
    2017-11-09 13:45:59   crl_file = '[UNDEF]'
    2017-11-09 13:45:59   ns_cert_type = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_ku[i] = 0
    2017-11-09 13:45:59   remote_cert_eku = '[UNDEF]'
    2017-11-09 13:45:59   ssl_flags = 0
    2017-11-09 13:45:59   tls_timeout = 2
    2017-11-09 13:45:59   renegotiate_bytes = -1
    2017-11-09 13:45:59   renegotiate_packets = 0
    2017-11-09 13:45:59   renegotiate_seconds = 3600
    2017-11-09 13:45:59   handshake_window = 60
    2017-11-09 13:45:59   transition_window = 3600
    2017-11-09 13:45:59   single_session = DISABLED
    2017-11-09 13:45:59   push_peer_info = DISABLED
    2017-11-09 13:45:59   tls_exit = DISABLED
    2017-11-09 13:45:59   tls_auth_file = '[UNDEF]'
    2017-11-09 13:45:59   tls_crypt_file = '[UNDEF]'
    2017-11-09 13:45:59   client = ENABLED
    2017-11-09 13:45:59   pull = ENABLED
    2017-11-09 13:45:59   auth_user_pass_file = '[UNDEF]'
    2017-11-09 13:45:59 OpenVPN 2.5-icsopenvpn [git:icsopenvpn-d51333c645c12713+] android-21-arm64-v8a [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Jun 26 2017
    2017-11-09 13:45:59 library versions: OpenSSL 1.1.0f  25 May 2017, LZO 2.10
    2017-11-09 13:45:59 MANAGEMENT: Connected to management server at /data/user/0/de.blinkt.openvpn/cache/mgmtsocket
    2017-11-09 13:45:59 MANAGEMENT: CMD 'hold release'
    2017-11-09 13:45:59 MANAGEMENT: CMD 'proxy NONE'
    2017-11-09 13:45:59 MANAGEMENT: CMD 'bytecount 2'
    2017-11-09 13:45:59 MANAGEMENT: CMD 'state on'
    2017-11-09 13:46:00 MANAGEMENT: CMD 'password [...]'
    2017-11-09 13:46:00 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
    2017-11-09 13:46:00 Control Channel MTU parms [ L:1621 D:1212 EF:38 EB:0 ET:0 EL:3 ]
    2017-11-09 13:46:00 Data Channel MTU parms [ L:1621 D:1450 EF:121 EB:406 ET:0 EL:3 ]
    2017-11-09 13:46:00 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
    2017-11-09 13:46:00 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
    2017-11-09 13:46:00 TCP/UDP: Preserving recently used remote address: [AF_INET]Server_IP:Port
    2017-11-09 13:46:00 Socket Buffers: R=[212992->212992] S=[212992->212992]
    2017-11-09 13:46:00 MANAGEMENT: CMD 'needok 'PROTECTFD' ok'
    2017-11-09 13:46:00 UDP link local (bound): [AF_INET][undef]:1194
    2017-11-09 13:46:00 UDP link remote: [AF_INET]Server_IP:Port
    2017-11-09 13:46:00 MANAGEMENT: >STATE:1510227960,WAIT,,,,,,
    2017-11-09 13:46:00 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:00 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:00 MANAGEMENT: >STATE:1510227960,AUTH,,,,,,
    2017-11-09 13:46:00 TLS: Initial packet from [AF_INET]Server_IP:Port, sid=83571245 634e1803
    2017-11-09 13:46:00 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
    2017-11-09 13:46:00 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
    2017-11-09 13:46:00 VERIFY OK: depth=1, CN=Server_Name
    2017-11-09 13:46:00 VERIFY X509NAME ERROR: CN=server, must be Server_IP
    2017-11-09 13:46:00 OpenSSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
    2017-11-09 13:46:00 TLS_ERROR: BIO read tls_read_plaintext error
    2017-11-09 13:46:00 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
    2017-11-09 13:46:00 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
    2017-11-09 13:46:00 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 2
    2017-11-09 13:46:00 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 2
    2017-11-09 13:46:00 Ожидание 2s секунд между попыткой подключения
    2017-11-09 13:46:00 TLS Error: TLS object -> incoming plaintext read error
    2017-11-09 13:46:00 TLS Error: TLS handshake failed
    2017-11-09 13:46:00 TCP/UDP: Closing socket
    2017-11-09 13:46:00 SIGUSR1[soft,tls-error] received, process restarting
    2017-11-09 13:46:00 MANAGEMENT: >STATE:1510227960,RECONNECTING,tls-error,,,,,
    2017-11-09 13:46:05 MANAGEMENT: CMD 'hold release'
    2017-11-09 13:46:05 MANAGEMENT: CMD 'proxy NONE'
    2017-11-09 13:46:05 MANAGEMENT: CMD 'bytecount 2'
    2017-11-09 13:46:05 MANAGEMENT: CMD 'state on'
    2017-11-09 13:46:06 Control Channel MTU parms [ L:1621 D:1212 EF:38 EB:0 ET:0 EL:3 ]
    2017-11-09 13:46:06 Data Channel MTU parms [ L:1621 D:1450 EF:121 EB:406 ET:0 EL:3 ]
    2017-11-09 13:46:06 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
    2017-11-09 13:46:06 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
    2017-11-09 13:46:06 TCP/UDP: Preserving recently used remote address: [AF_INET]Server_IP:Port
    2017-11-09 13:46:06 Socket Buffers: R=[212992->212992] S=[212992->212992]
    2017-11-09 13:46:06 MANAGEMENT: CMD 'needok 'PROTECTFD' ok'
    2017-11-09 13:46:06 UDP link local (bound): [AF_INET][undef]:1194
    2017-11-09 13:46:06 UDP link remote: [AF_INET]Server_IP:Port
    2017-11-09 13:46:06 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:06 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:06 MANAGEMENT: >STATE:1510227966,WAIT,,,,,,
    2017-11-09 13:46:07 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
    2017-11-09 13:46:07 New OpenVPN Status (AUTH->LEVEL_CONNECTING_SERVER_REPLIED): ,,,,,
    2017-11-09 13:46:07 MANAGEMENT: >STATE:1510227966,AUTH,,,,,,
    2017-11-09 13:46:07 TLS: Initial packet from [AF_INET]Server_IP:Port, sid=7da2882a af2f0b57
    2017-11-09 13:46:07 VERIFY OK: depth=1, CN=Server_Name
    2017-11-09 13:46:07 VERIFY X509NAME ERROR: CN=server, must be Server_IP
    2017-11-09 13:46:07 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
    2017-11-09 13:46:07 New OpenVPN Status (RECONNECTING->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): tls-error,,,,,
    2017-11-09 13:46:07 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 2
    2017-11-09 13:46:07 New OpenVPN Status (CONNECTRETRY->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): 2
    2017-11-09 13:46:07 Ожидание 2s секунд между попыткой подключения
    2017-11-09 13:46:07 OpenSSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
    2017-11-09 13:46:07 TLS_ERROR: BIO read tls_read_plaintext error
    2017-11-09 13:46:07 TLS Error: TLS object -> incoming plaintext read error
    2017-11-09 13:46:07 TLS Error: TLS handshake failed
    2017-11-09 13:46:07 TCP/UDP: Closing socket
    2017-11-09 13:46:07 SIGUSR1[soft,tls-error] received, process restarting
    2017-11-09 13:46:07 MANAGEMENT: >STATE:1510227967,RECONNECTING,tls-error,,,,,
    2017-11-09 13:46:12 MANAGEMENT: CMD 'hold release'
    2017-11-09 13:46:12 MANAGEMENT: CMD 'proxy NONE'
    2017-11-09 13:46:12 MANAGEMENT: CMD 'bytecount 2'
    2017-11-09 13:46:12 MANAGEMENT: CMD 'state on'
    2017-11-09 13:46:13 Control Channel MTU parms [ L:1621 D:1212 EF:38 EB:0 ET:0 EL:3 ]
    2017-11-09 13:46:13 Data Channel MTU parms [ L:1621 D:1450 EF:121 EB:406 ET:0 EL:3 ]
    2017-11-09 13:46:13 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-client'
    2017-11-09 13:46:13 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1541,tun-mtu 1500,proto UDPv4,cipher BF-CBC,auth SHA1,keysize 128,key-method 2,tls-server'
    2017-11-09 13:46:13 TCP/UDP: Preserving recently used remote address: [AF_INET]Server_IP:Port
    2017-11-09 13:46:13 Socket Buffers: R=[212992->212992] S=[212992->212992]
    2017-11-09 13:46:13 MANAGEMENT: CMD 'needok 'PROTECTFD' ok'
    2017-11-09 13:46:13 UDP link local (bound): [AF_INET][undef]:1194
    2017-11-09 13:46:13 UDP link remote: [AF_INET]Server_IP:Port
    2017-11-09 13:46:13 MANAGEMENT: >STATE:1510227973,WAIT,,,,,,
    2017-11-09 13:46:13 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:13 New OpenVPN Status (WAIT->LEVEL_CONNECTING_NO_SERVER_REPLY_YET): ,,,,,
    2017-11-09 13:46:13 TLS Error: Unroutable control packet received from [AF_INET]Server_IP:Port (si=3 op=P_CONTROL_V1)
    2017-11-09 13:46:15 TLS Error: Unroutable control packet received from [AF_INET]Server_IP:Port (si=3 op=P_ACK_V1)
    2017-11-09 13:46:16 TLS Error: Unroutable control packet received from [AF_INET]Server_IP:Port (si=3 op=P_CONTROL_V1)
    2017-11-09 13:46:19 TLS Error: Unroutable control packet received from [AF_INET]Server_IP:Port (si=3 op=P_ACK_V1)
    2017-11-09 13:46:22 TLS Error: Unroutable control packet received from [AF_INET]Server_IP:Port (si=3 op=P_CONTROL_V1)
    • Salozavr

      Вопрос снят, это все настройки самого клиента на android.
      Но если кто ткнет носом на статейку как правильно создать конфигурационный файл для клиентов на моб (android, ios)? буду очень признателен. Так как моб клиенты, почему-то не видят filename.ovpn.

  32. Mad

    Подскажите какие программы и модули нужны. Не могу подписать сертификат сервера

  33. Bear

    При выполнении ./easyrsa sign-req server server
    выдает ошибки:
    ERROR: on line 16 of config file ‘/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/extensions.temp’
    140617769633696:error:02001002:system library:fopen:No such file or directory:bss_file.c:175:fopen(‘/etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/index.txt.attr’,’rb’)
    140617769633696:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:182:
    140617769633696:error:0E078072:configuration file routines:DEF_LOAD:no such file:conf_def.c:195:
    140617769633696:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def.c:345:line 16

    В сети не нашел ответа из-за чего возникают данные ошибки. Может подскажите причину и метод решения?

    • Bear

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

      сервер сконфигурировал:
      port 882 # я предпочитаю использовать нестандартные порты для работы
      proto udp # протокол может быт и tcp, если есть необходимость в этом
      dev tun

      ca /etc/openvpn/server/ca.crt
      cert /etc/openvpn/server/server.crt
      key /etc/openvpn/server/server.key
      dh /etc/openvpn/server/dh.pem

      server 192.168.10.0 255.255.255.0 # подсеть для туннеля, может быть любой
      route 192.168.0.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn
      push «dhcp-option DNS 192.168.0.220» # передаем маршрут клиентам

      ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet — ip
      client-to-client # позволяет клиентам openvpn подключаться друг к другу
      client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов

      keepalive 10 120

      comp-lzo

      persist-key
      persist-tun
      status /var/log/openvpn/openvpn-status.log
      log /var/log/openvpn/openvpn.log
      verb 3

      Клиент:
      client
      dev tun
      proto udp

      remote 109.202.11.243 882

      resolv-retry infinite

      nobind

      user nobody
      group nobody

      persist-key
      persist-tun

      comp-lzo
      verb 3

      ca /path/to/ca.crt
      cert /path/to/client.crt
      key /path/to/client.key

      в итоге. при подключении выдает ошибку:
      Wed Dec 26 10:53:22 2017 UDP link local (bound): [undef]
      Wed Dec 26 10:53:22 2017 UDP link remote: [AF_INET]109.202.11.243:882
      Wed Dec 26 10:53:22 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
      Wed Dec 26 10:53:24 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
      Wed Dec 26 10:53:29 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
      Wed Dec 26 10:53:36 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
      Wed Dec 26 10:53:52 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
      Wed Dec 26 10:54:22 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
      Wed Dec 26 10:54:22 2012 TLS Error: TLS handshake failed
      Wed Dec 26 10:54:22 2012 TCP/UDP: Closing socket
      Wed Dec 26 10:54:22 2012 SIGUSR1[soft,tls-error] received, process restarting

      • Zerox

        В принципе, в логе все написано, куда копать:
        Wed Dec 26 10:53:52 2017 read UDP [ECONNREFUSED]: Connection refused (code=111)
        Wed Dec 26 10:54:22 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
        Я часто вижу подобные ошибки и они действительно сетевые, но не всегда лежат на поверхности. Нужно все аккуратно проверять и пробовать подключаться из разных мест. Я частенько не могу подключиться через мобильных операторов, как раз ошибка TLS выскакивает. Может на фаерволе что-то не так сделано, правила перепутаны, переадресации или пробросы какие-то. В общем, надо аккуратно во всем разбираться на месте.

      • 911

        Столкнулся с этой же проблемой.

        • Bear

          как успехи? сумел понять почему интерфейс не поднимается? я нет, лог чист.

          • Александр
            Александр

            Уважаемый, я смотрел, интерфейс tun уже имелся на серваке еще до всякого OPenVPN
            лежит где то тут /dev/net/tun он размером 0 права 666 может создать и наступит счастье?
            Но вряд ли..

  34. Zerox

    Только что настроил все по статье. Она актуальна.

    • Олег

      Нашел проект на гитхабе по установке openvpn, на мой взгляд с точки зрения безопасности и быстродействия, в свете версии 2.4 у них оч грамотно сделан скрипт. При небольшом допиливании их скрипта адаптировал под себя.
      https://github.com/Angristan/OpenVPN-install

      • Zerox

        Мощный скрипт. Не хватило терпения все осмысленно проверить. Что там полезного есть, если в двух словах? Всякие dns блоки и настройка iptables меня не интересуют. В самом конфиге server.conf чего-то интересного и полезного не увидел. В общем, не очень понял, для чего это.

        • Олег

          Вместо DH — ECDH, TLS-Auth, шифрация — AES-GCM. Все это есть только на 2.4. Ну и полноценный скрипт по генерации конфигов для юсеров. Что не понравилось — скрипт трогает штатный юнит systemd — соответственно при обновлении все слетит и как следствие запуск нескольких демонов на разных портах невозможен. Да и настройку ипитаблес зря они в скрипт прилепили. Если будете смотреть — смотрите сразу ветку openvpn-2.4-update.

          • Zerox

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

    • Mva

      Подскажи что надо исправить чтоб работал клиент под Андроидом. При подключении на андроиде пропадает интренет. Делал все по статье. Необходимо обеспечить подключение смартфонов и планшетов к рабочей сети, удаленная работа в сети предприятия

  35. VJ

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

    • Zerox

      Зависит от того, как клиенты получают интернет. В общем случае, если у них пропал интернет, значит либо изменился шлюз по-умолчанию, либо на самом шлюзе что-то изменилось, что привело к пропаже интернета.

  36. VJ

    Бьюсь вторую неделю и не могу найти где косяк, нет интернета с клиента. В связи с чем вот мой iptables Может сможете подсказать где косяк. А то не могу понять.

    #!/bin/bash

    export IPT=»iptables»

    # Внешний интерфейс
    export WAN=eth0
    export WAN_IP=109.*.*.*

    # Локальная сеть
    export LAN1=eth1
    export LAN1_IP_RANGE=192.*.*.*/24

    # Очищаем правила
    $IPT -F
    $IPT -F -t nat
    $IPT -F -t mangle
    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X

    # Запрещаем все, что не разрешено
    $IPT -P INPUT DROP
    $IPT -P OUTPUT DROP
    $IPT -P FORWARD DROP

    # Разрешаем localhost и локалку
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A INPUT -i $LAN1 -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT
    $IPT -A OUTPUT -o $LAN1 -j ACCEPT

    # Рзрешаем пинги
    $IPT -A INPUT -p icmp —icmp-type echo-reply -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type destination-unreachable -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type time-exceeded -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type echo-request -j ACCEPT

    # Разрешаем OpenVPN
    $IPT -A INPUT -i tun+ -j ACCEPT
    $IPT -A OUTPUT -o tun+ -j ACCEPT
    $IPT -A FORWARD -i tun+ -j ACCEPT

    # Разрешаем доступ из внутренней сети в vpn
    $IPT -A FORWARD -i $LAN1 -o tun+ -j ACCEPT

    # разрешаем установленные подключения
    $IPT -A INPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A OUTPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -p all -m state —state ESTABLISHED,RELATED -j ACCEPT

    # Отбрасываем неопознанные пакеты
    $IPT -A INPUT -m state —state INVALID -j DROP
    $IPT -A FORWARD -m state —state INVALID -j DROP

    # Отбрасываем нулевые пакеты
    $IPT -A INPUT -p tcp —tcp-flags ALL NONE -j DROP

    # Закрываемся от syn-flood атак
    $IPT -A INPUT -p tcp ! —syn -m state —state NEW -j DROP
    $IPT -A OUTPUT -p tcp ! —syn -m state —state NEW -j DROP

    # Блокируем доступ с указанных адресов
    #$IPT -A INPUT -s 84.122.21.197 -j REJECT

    # Разрешаем доступ из локалки наружу
    $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
    # Закрываем доступ снаружи в локалку
    $IPT -A FORWARD -i $WAN -o $LAN1 -j ACCEPT

    # Пробрасываем внешний порт на локальный адрес и порт
    $IPT -t nat -A PREROUTING -d 109.*.*.*/32 -p tcp -m tcp —dport 25 -j DNAT —to-destination 192.*.*.*:25

    # Включаем NAT
    $IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
    $IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE

    # открываем доступ к SSH
    $IPT -A INPUT -i $WAN -p tcp —dport 22 -j ACCEPT
    #$IPT -A INPUT -i $WAN -p tcp —dport 25 -j ACCEPT

    # Открываем доступ к почтовому серверу
    $IPT -A INPUT -p tcp -m tcp —dport 25 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 465 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 110 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 995 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 143 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 993 -j ACCEPT

    #Открываем доступ к web серверу
    #$IPT -A INPUT -p tcp -m tcp —dport 80 -j ACCEPT
    #$IPT -A INPUT -p tcp -m tcp —dport 443 -j ACCEPT

    $IPT -A INPUT -i $LAN1 -p tcp —dport 80 -j ACCEPT
    $IPT -A INPUT -i $LAN1 -p tcp —dport 443 -j ACCEPT

    #Открываем порт VPN сервера
    $IPT -A INPUT -p udp -m udp —dport 882 -j ACCEPT

    #Открываем доступ к DNS серверу
    #$IPT -A INPUT -i $WAN -p udp —dport 53 -j ACCEPT

    # Включаем логирование
    $IPT -N block_in
    $IPT -N block_out
    $IPT -N block_fw

    $IPT -A INPUT -j block_in
    $IPT -A OUTPUT -j block_out
    $IPT -A FORWARD -j block_fw

    $IPT -A block_in -j LOG —log-level info —log-prefix «—IN—BLOCK»
    $IPT -A block_in -j DROP
    $IPT -A block_out -j LOG —log-level info —log-prefix «—OUT—BLOCK»
    $IPT -A block_out -j DROP
    $IPT -A block_fw -j LOG —log-level info —log-prefix «—FW—BLOCK»
    $IPT -A block_fw -j DROP

    # Сохраняем правила
    /sbin/iptables-save > /etc/sysconfig/iptables

    скрипт сервера ВПН взят от сюда

  37. komron

    Привет! У меня такая ошибка
    Tue Apr 03 16:25:34 2018 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.

    ВНИМАНИЕ: Не проверен метод проверки сервера — translate google

    помогите! 🙂

    • Zerox

      А чем помочь то? Это просто предупреждение, не ошибка. Плюс дана ссылка, где можно прочитать о чем идет речь. Если не понимаешь, о чем идет речь, просто не обращай внимание. Это не страшно 🙂

  38. komron

    это на windows так говорит, когда хотел подключить удалённый комп. Между двум просто супер работает

  39. Александр
    Александр

    Здравствуйте уважаемый. Спасибо за мануал.
    Благодаря Вам быстро настроил сервер и решил задачу подклбчения IP телефонов удаленных сотрудников.
    И когда все было сделано, обновление прошивки телефонов добавило к Open Vpn разделу поля юзер и пароль. 🙂
    Что наводит на подозрения , о возможности идентификации клиента либо вообще без сертификатов, либо без клиентских?
    Но , тогда не понятно где и как на сервере задавать user-пароль?
    Если это важно телефоны GXP1620 , в них есть PPoE и OpenVpn подключения, сервер Centos 7.
    Из глюков : пропал доступ к web морде Elastix . но его удалось легко восстановить
    Еще раз спасибо за Вашу работу.

    • Zerox

      Я настраивал на этих аппаратах openvpn. Интересная возможность, которая на удивление еще и работает нормально, без глюков. Главное подобрать параметры opevpn сервера под требования телефона, так как на телефоне клиент не настраивается.

      • Александр
        Александр

        😀 Знаете , я не знал об этих сложностях , мне , в виду отсутствия инструментария на стороне «клиента» , сложнее было угадать параметры на нем и логику его подключения. Но , вроде , правда работает стабильно . Теперь нужно к провайдеру по vpn подключиться и можно закрывать порты на роутере.
        Подключение тупых «железяк» вообще отдельная тема, не слишком освещенная. Вот, к примеру, у этого же телефона есть PPoe, а у меня на роутере, о счастье, есть функция PPoE server. Удачно? Ну приемлемо, только эта хрень на роутере , по моему, не работает вообще. Мне не удалось ее завести ни на 480 , ни на 470, ни на 604W моделях TP-Link. Есть правда и PPTP и работающий, но его нет на телефоне.
        Кстати , если интересно, скриншоты настроек телефона могу скинутьБ если скажете куда.

  40. Александр
    Александр

    Итак, благодаря Вашей статье есть сервер удаленного доступа, как теперь сделать его клиентом к другому серваку?
    Адаптер то 1 tun0 и шифрование TLS нужно на нем же запустить клиента. Клиент получит адрес, и.. не глюкнет ли вся конструкция ?

  41. Александр
    Александр

    Решил проблему SoftEther VPN Client

    • Александр
      Александр

      Нет , показалось 😀 Вопрос с запуском клиета в Open VPN сервере доступа по прежнему актуален, тем более , что версия удаленного сервера может быть иной, в моем случае провайдер прелдлагает отразец настроек с сертификатом в тексте конфига. То есть tun адаптер занят обслуживанием входящих подключений + для исходящего подключения нужно «совместиться» с требованиями удаленного сервера доступа 🙁

      • Zerox

        А в чем конкретно проблема? Можно отдельно запускать клиент и сервер, причем сколько угодно клиентов и серверов. У каждого будет свой конфиг и свой интерфейс tun1, tun2 и т.д.

        Создаете в директории с openvpn 2 конфига, один client.conf, второй server.conf Настраиваете в конфигах все, что надо, только разные tun интерфейсы указываете. Потом запускаете отдельно сервер, отдельно клиент:

        systemctl start openvp@server
        systemctl start openvp@client

        • Александр
          Александр

          Спасибо за ответ, но можно уточнить:
          Для сервера указывали tun — в системе появился tun0
          Для клиента в конфиге пишем , что tun1 ?

  42. VJ

    я так понимаю мне не поможете?!

    • Zerox

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

  43. Igor

    Добрый день.столкнулся с проблемой на сервере почему то интерфейс eth0 видит tun0. для чистоты эксперимента iptables отключал, net.ipv4.ip_forward = 1 прописал , что может быть еще?

  44. Васёк

    SELINUX=disabled
    ламер…

  45. Артур

    Спасибо, делал по статье, всё работает.
    Один вопрос: как прописать на сервере статический маршрут в сеть клиента? то есть:
    мне нужен доступ со стороны centos openvpn сервера в сеть клиента. Команда ip route add — всё работает, пингутеся, всё ок. Но после перезагрузки роут пропадает.
    в network-scripts делал файл route-tun0 — не работает (при этом там же файл route-eth0 на выдуманный маршрут — работает).
    Как ещё можно прописать статический маршрут для tun0 интерфейса? спасибо.

    • Артур

      Всё оказалось просто (хотя полдня потратил на поиск )))
      надо в server.conf указать указать сеть клиента:
      route 192.168.1.0 255.255.255.0,
      где 192.168.1.0 сеть клиента

  46. VJ

    можете подсказать , как сделать чтоб по каждому пользователю подключившемуся по vpn велся лог действий в сети?

    • Zerox

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

      • VJ

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

        • Zerox

          Вы же подключаете людей по сертификатам. Для каждого сертификата можно назначить статичный ip через ccd. А дальше уже по ip собирать статистику. Либо через лог-файл статуса брать информацию о подключенных клиентах и их ip. Там это все фиксируется.

  47. Den

    Добрый день.
    Настроил все по вашему ману, но задача у меня не много иная не до конца все работает есть vds сервер с белым айпи есть клиенты zyxel kenetic с юсб модемами серыми айпи за натом провайдера за zyxel есть видео регистраторы к котором надо попадать по белому айпи vds/
    VDS OPENVPN сервер ip 94.x.x.x
    openvpn Тунель ip 10.0.0./24 пинги работаю в обе стороны
    внутренняя сеть zyxel 192.168.8.0/24
    видеорегистратор за zyxelом 192.168.8.100
    так вот у меня не пингуеться с сервера сам регистратор 192.168.8.100
    и как с внешнего айпи по нужному порту про кинуть в впн на видеорегистратор.

    [spoiler]
    server.conf
    port 1313 # я предпочитаю использовать нестандартные порты для работы
    proto tcp # протокол может быт и tcp, если есть необходимость в этом
    dev tun

    ca /etc/openvpn/ca.crt
    cert /etc/openvpn/server.crt
    key /etc/openvpn/server.key
    dh /etc/openvpn/dh.pem

    server 10.0.0.0 255.255.255.0 # подсеть для туннеля, может быть любой
    route 192.168.8.0 255.255.255.0 # указываем подсеть, к которой будем обращаться$
    push «route 10.0.0.0 255.255.255.0» # передаем маршрут клиентам
    # push «route 192.168.8.0 255.255.255.0″
    ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet — ip
    client-to-client # позволяет клиентам openvpn подключаться друг к другу
    client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками к$

    keepalive 10 120
    #comp-lzo
    persist-key
    persist-tun
    status /var/log/openvpn/openvpn-status.log
    log /var/log/openvpn/openvpn.log
    verb 3
    [/spoiler]

    [spoiler]
    iptables
    #!/bin/bash
    #
    # Объявление переменных
    export IPT=»iptables»

    # Интерфейс который смотрит в интернет
    export WAN=eth0
    export WAN_IP=94.X.X.X

    # Очистка всех цепочек iptables
    $IPT -F
    $IPT -F -t nat
    $IPT -F -t mangle
    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X

    # Установим политики по умолчанию для трафика, не соответствующего ни одному из$
    $IPT -P INPUT DROP
    $IPT -P OUTPUT DROP
    $IPT -P FORWARD DROP

    # разрешаем локальный траффик для loopback
    $IPT -A INPUT -i lo -j ACCEPT
    $IPT -A OUTPUT -o lo -j ACCEPT

    # Разрешаем исходящие соединения самого сервера
    $IPT -A OUTPUT -o $WAN -j ACCEPT
    # Разрешаем OpenVPN
    $IPT -A INPUT -i tun+ -j ACCEPT
    $IPT -A OUTPUT -o tun+ -j ACCEPT
    $IPT -A FORWARD -i tun+ -j ACCEPT
    # Разрешаем доступ из внутренней сети в vpn
    #$IPT -A FORWARD -i $WAN -o tun+ -j ACCEPT
    # Маскарадинг
    $IPT -t nat -A POSTROUTING -o tun0 -j MASQUERADE
    #$IPT -t nat -A POSTROUTING -o $WAN -s tun0 -j MASQUERADE

    # Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
    # Пропускать все уже инициированные соединения, а также дочерние от них
    $IPT -A INPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    # Пропускать новые, а так же уже инициированные и их дочерние соединения
    $IPT -A OUTPUT -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    # Разрешить форвардинг для уже инициированных и их дочерних соединений
    $IPT -A FORWARD -p all -m state —state ESTABLISHED,RELATED -j ACCEPT
    # Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
    $IPT -I FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp-mss-to-pmtu

    # Отбрасывать все пакеты, которые не могут быть идентифицированы
    # и поэтому не могут иметь определенного статуса.
    $IPT -A INPUT -m state —state INVALID -j DROP
    $IPT -A FORWARD -m state —state INVALID -j DROP

    # Приводит к связыванию системных ресурсов, так что реальный
    # обмен данными становится не возможным, обрубаем
    $IPT -A INPUT -p tcp ! —syn -m state —state NEW -j DROP
    $IPT -A OUTPUT -p tcp ! —syn -m state —state NEW -j DROP

    # Рзрешаем пинги
    $IPT -A INPUT -p icmp —icmp-type echo-reply -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type destination-unreachable -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type time-exceeded -j ACCEPT
    $IPT -A INPUT -p icmp —icmp-type echo-request -j ACCEPT
    # Открываем порт для ssh
    $IPT -A INPUT -i $WAN -p tcp —dport 1327 -j ACCEPT
    $IPT -A INPUT -i $WAN -p tcp —dport 1313 -j ACCEPT
    $IPT -A INPUT -i $WAN -p udp —dport 1313 -j ACCEPT
    # Открываем порт для DNS
    #$IPT -A INPUT -i $WAN -p udp —dport 53 -j ACCEPT
    # Открываем порт для NTP
    #$IPT -A INPUT -i $WAN -p udp —dport 123 -j ACCEPT

    # Логирование
    # Все что не разрешено, но ломится отправим в цепочку undef

    $IPT -N undef_in
    $IPT -N undef_out
    $IPT -N undef_fw
    $IPT -A INPUT -j undef_in
    $IPT -A OUTPUT -j undef_out
    $IPT -A FORWARD -j undef_fw
    # Логируем все из undef

    $IPT -A undef_in -j LOG —log-level info —log-prefix «— IN — DROP »
    $IPT -A undef_in -j DROP
    $IPT -A undef_out -j LOG —log-level info —log-prefix «— OUT — DROP »
    $IPT -A undef_out -j DROP
    $IPT -A undef_fw -j LOG —log-level info —log-prefix «— FW — DROP »
    $IPT -A undef_fw -j DROP

    # Записываем правила
    /sbin/iptables-save > /etc/sysconfig/iptables

    [/spoiler]

    • Zerox

      В своих конфигурациях вы сами разбирайтесь, я искать ошибки не буду. Скажу только, что это реально. Я сам так делаю. Есть сервер с белым ip, есть дачные дома с серыми ip через мобильную связь. Эти дома подключаются по vpn к серверу. На сервере настроен проброс на эти регистраторы. Проброс получается двойной. Сначала с белого ip на роутер с серым ip, а потом с этого роутера на регистратор. Если все сделать аккуратно и правильно, будет работать. Нужно проверять все элементы — сервер, модемы в домах, настраивать маршруты.

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

Ваш e-mail не будет опубликован.