Софт-Портал

Openvpn Linux

Рейтинг: 4.7/5.0 (387 проголосовавших)

Категория: Linux

Описание

Настройка OpenVPN

Настройка OpenVPN

Нам надо соединить удаленного сотрудника к рабочей сети. Это делается в том числе с помощью VPN, в нашем случае, OpenVPN. Это бесплатный, достаточно надежный и не очень сложный в настройке сервер и клиент VPN.

Структура нашей сети такая:

  • Сеть: 192.168.10.0/24
  • IP-адрес внешнего интерфейса сервера OpenVPN: 444.333.222.111
  • Порт, на котором "висит" OpenVPN: 1194 udp (стандартный для OpenVPN)
  • IP-адрес DNS внутренней сети: 192.168.10.100
  • Сеть VPN: 10.8.0.0/24 (стандартная для OpenVPN)
  • Удаленный сотрудник без определенного адреса

Начальная установка простая для любой популярной операционной системы:

  • CentOS: yum install openvpn (правда, это я немного лукавлю насчет просто, читайте ниже)
  • FreeBSD: cd /usr/ports/security/openvpn -> make -> make install
  • Windows: ну тут уж все специалисты!

Пожалуй, не скажу ничего про Mac OS, т.к. не сталкивался лично.

Установка OpenVPN в Linux

Я использую CentOS, поэтому могу описать установку именно для этого Linux.

Как и везде, скачать пакет и установить не есть гуд, т.к. его будет труднее обновлять. А т.к. " yum install openvpn " выдаст фиг, надо нам подключить репозиторий.

Вариант 1 - попробовать поставить репозиторий с самого openvpn.net:

# cd /etc/yum.repos.d
# wget http://repos.openvpn.net/repos/yum/conf/repos.openvpn.net-CentOS6-snapshots.repo
# yum install openvpn

Эти команды см. в файле http://repos.openvpn.net/repos/yum/conf/repos.openvpn.net-CentOS6-snapshots.txt.

Скоре всего, это у вас не прокатит :)

Вариант 2 - репозиторий RPMForge

# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

# rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm

# rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

Проверим, чего наставили:

Особо не увлекайтесь всякими репозиториями :) Чем меньше их, тем лучше.

Итак, чтобы вы ни делали, вы должны успешно выполнить команду:

# yum install openvpn

Installed:
openvpn.i386 0:2.3-3

Dependency Installed:
pkcs11-helper.i686 0:1.08-1.el6.rf

Первичная настройка OpenVPN

Независимо от того, на FreeBSD, Linux или Windows, общие шаги по созданию необходимой инфраструктуры для OpenVPN практически одинаковы.

Копируем файл конфигурации:

# cp /usr/share/doc/openvpn-*/sample-config-files/server.conf /etc/openvpn/

Копируем пакет управления RSA ключами из поставки OpenVPN в /etc/openvpn/easy-rsa :

# cp /usr/share/doc/openvpn-*/easy-rsa/2.0/ /etc/openvpn/
# cd /etc/openvpn/easy-rsa
# cp openssl-1.0.0.cnf openssl.cnf
# mkdir keys

Редактируем файл /etc/openvpn/rsa-keys/vars :

export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="Company"
export KEY_EMAIL="abuse@company-domain.com"
export KEY_EMAIL=abuse@company-domain.com
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=Office
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

Далее следует экспортировать переменные KEY_*, они необходимы для работы скриптов build-*, генерирующих сертификаты. На этом шаге могу отметить, что у меня не сразу получилось экспортировать переменные из файла /etc/openvpn/easy-rsa/keys. пришлось делать скрипт с экспортом системной переменной $PATH, но, как мне кажется, это чисто у меня такая проблема была (в Windows-версии C:Program FilesOpenVPNeasy-rsavars.bat переменные экспортировались без проблем):

# cd /etc/openvpn/easy-rsa
# ./vars

Дополнение: прочел следующее на http://www.lissyara.su/?id=1549. Внимание! Если у вас по умолчанию не баш, то перед следующими операциями нужно набрать в консоли "sh", советую для "100-%-ного" результата всё же наверняка сделайте это, даже если у вас шелл sh. Загружаем переменные в оболочку (для выхода из режима sh ввести exit):
# cd /etc/openvpn/easy-rsa
# sh
#. /vars

В Windows откройте командную строку "cmd" :

cd "C:Program FilesOpenVPNeasy-rsa
vars.bat

Отмечу на всякий случай, что если вы не можете выполнить какой-либо скрипт, вероятнее всего у него просто нет прав на запуск, например, при запуске ./build-ca я сначала получил такое сообщение:

Please edit the vars script to reflect your configuration,
then source it with "source ./vars".
Next, to start with a fresh PKI configuration and to delete any
previous certificates and keys, run "./clean-all".
Finally, you can run this tool (pkitool) to build certificates/keys.

О чем это? А просто-напросто переменные из файла vars не экпортировались, т.к. vars не выполнился, т.к. ему нужны права на запуск, т.е. "chmod +x vars". Мне пришлось дать права на запуск нескольким файлам, в том числе:
build-ca, clean-all, pkitool, vars, whichopensslcnf.

Удаляем все предыдущие файлы ключей и сертифкатов из директории /etc/openvpn/easy-rsa/keys (эта директория указана в переменной KEY_DIR файла vars):

# chmod +x clean-all
# ./clean-all

Создаем сертификат подлинности (Certificate Authority) сервера:

# chmod +x build-ca
# chmod +x pkitool
# ./build-ca

++++++
. ++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Company]:
Organizational Unit Name (eg, section) [Office]:
Common Name (eg, your name or your server's hostname) [changeme]:VPNServer
Name [changeme]:Name
Email Address [abuse@company-domain.com]:

Ок, мы вроде бы все сделали.

Будьте внимательны при заполнени данных сертификатов, поле Common Name обязательно к заполнению, причем для сервера оно должно быть одно, а для клиента другое. Например в поле Common Name при генерации сертификата X.509 для сервера можно написать "server", а для клиента соотвественно "client".

Создаем сертификат X.509 для сервера.

# chmod +x build-key-server
# ./build-key-server server
Generating a 1024 bit RSA private key
.++++++
. ++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [RU]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Company]:
Organizational Unit Name (eg, section) [Office]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:IAmServer
Email Address [abuse@company-domain.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'RU'
localityName :PRINTABLE:'Moscow'
organizationName :PRINTABLE:'Company'
organizationalUnitName:PRINTABLE:'Office'
commonName :PRINTABLE:'server'
name :PRINTABLE:'IAmServer'
emailAddress :IA5STRING:'abuse@company-domain.com'
Certificate is to be certified until Apr 7 12:15:29 2022 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

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

# chmod +x build-dh
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

Создаем сертификаты для удаленного клиента:

# ./build-key-pass Client1
Generating a 1024 bit RSA private key
. ++++++
. ++++++
writing new private key to 'Client1.key'
.


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

На последок генерируем общий для клиента и сервера TLS-ключ, служащий дополнительной защитой. TLS предоставляет возможности аутентификации и безопасной передачи данных через Интернет с использованием криптографических средств. Часто происходит лишь аутентификация сервера, в то время как клиент остается неаутентифицированным. Для взаимной аутентификации каждая из сторон должна поддерживать инфраструктуру открытого ключа (PKI), которая позволяет защитить клиент-серверные приложения от перехвата сообщений, редактирования существующих сообщений и создания поддельных (источник: wikipedia).

openvpn --genkey --secret ta.key

В результате в папке /etc/openvpn/easy-rsa/keys мы имеем следующие файлы:

ca.crt - главный сертификат подлинности (Certificate Authority), этот файл нужен и клиенту и серверу
dh1024.pem - ключ Диффи Хельмана, этот файл нужен только серверу
server.crt - сертификат X.509 сервера (стандарт X.509 ITU-T является фундаментальным стандартом, лежащим в основе всех остальных, используемых в Инфраструктуре Открытых Ключей (ИОК). Основное его назначение - определение формата электронного сертификата и списков отозванных сертификатов), нужен только серверу
server.key - ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
client1.crt - сертификат X.509 клиента, нужен только клиенту
client1.key - ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
ta.key - TLS-ключ, нужен и клиенту и серверу

Серверу - одно, клиенту - другое

Теперь в папку /etc/openvpn/keys на будущем сервере OpenVPN скопируем файлы ca.crt, dh1024.pem, server.crt, server.key и ta.key:

# mkdir /etc/openvpn/keys
# cp /etc/openvpn/easy-rsa/keys/ca.crt dh1024.pem server.crt server.key ta.key /etc/openvpn/keys

В папку будущего клиента /etc/openvpn/client1 скопируем файлы ca.crt, client1.crt, client1.key и ta.key:

# mkdir /etc/openvpn/client1
# cp /etc/openvpn/easy-rsa/keys/ca.crt client1.crt client1.key ta.key /etc/openvpn/client1

Теперь подкаталог "client1" можно скопировать в папку конфигурации будущего удаленного клиента Windows.

В принципе, в папке /etc/openvpn/easy-rsa/keys/ все файлы можно оставить, на всякий случай :) Права на доступ к папке openvpn лучше обновить до правильных:

# chown -R root:wheel /etc/openvpn

Конфиг сервера OpenVPN

Расположение файла конфигурации сервера: " /etc/openvpn/config/server.conf " (для Windows: " C:Program FilesOpenVPNconfigserver.ovpn ").

Пример файла конфигурации сервера OpenVPN (подходит для Windows, Linux, FreeBSD с минимальными изменениями):

# на сайте разработчиков рекомендуется использовать udp в том числе
# по соображениям безопасности
proto udp

ca "/etc/openvpn/keys/ca.crt"
cert "/etc/openvpn/keys/server.crt"
key "/etc/openvpn/keys/server.key" # Этот файл хранить в секрете!

# включаем TLS аутификацию
tls-server
# указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-auth "/etc/openvpn/keys/ta.key" 0
# таймаут до реконекта
tls-timeout 120
auth MD5

# задаем IP-адрес сервера и маску подсети
server 10.8.0.0 255.255.255.0

# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть за OpenVPN сервером (сеть 192.168.10.0/24)
push "route 192.168.10.0 255.255.255.0"

route 192.168.10.0 255.255.255.0

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
# Фактически означает, что даже в интернет вы будете ходить через
# рабочий интернет-шлюз. Имейте это ввиду!
# После отключения от VPN-соединения вполне возможно вам будет необходимо
# выполнить команду в консоли cmd: ipconfig /renew .
push "redirect-gateway def1 bypass-dhcp"

# Сообщаем удаленному клиенту адрес внутреннего DNS-сервера
# чтобы клиент мог по именам обращаться к компьютерам локальной сети
push "dhcp-option DNS 192.168.10.100"

# удерживать соединение (полезно при работе через nat, proxy и т.п.)
keepalive 10 120

# включаем шифрацию пакетов
cipher BF-CBC

# включить сжатие (если есть проблемы при соединении - выключите эту опцию на клиенте и сервере)
comp-lzo

# максимум клиентов
max-clients 5

;user nobody
;group nobody

# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUNTAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun

# клиенты могут "видеть" друг друга
client-to-client

log "/etc/openvpn/log/openvpn.log"
log-append "/etc/openvpn/log/openvpn.log"

# уровень детализации отчетов
verb 3

Примечания к конфигурационному файлу сервера OpenVPN

В данном конфиге будут только два различия в версиях сервера для Unix или для Windows.

1. Пути расположения файлов конфигурации, сертификатов и пр. в конфиге для Windows должны прописываться так:

dh "C:Program FilesOpenvpnconfigdh1024.pem"

а в Linux/FreeBSD так:

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

;user nobody
;group nobody

а в Linux/FreeBSD (по желанию или по соображениям безопасности, но режиме отладки самого сервера OpenVPN можно сначала запускать сервер OpenVPN под админом, чтобы в случае проблем не грешить на права доступа, но потом обязательно сменить запуск на nobody. ) раскомментированы:

user nobody
group nobody

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

Автозапуск сервера OpenVPN в Linux/FreeBSD

Для автоматического запуска сервера OpenVPN можно использовать следующий скрипт (# - комментарий), например, start_openvpn.sh (не забудьте сделать его исполняемым " chmod +x start_openvpn.sh "):

#!/bin/sh
dir=/etc/openvpn/config
modprobe tun
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --cd $dir --daemon --config /etc/openvpn/config/server.conf
# кстати, здесь можно запускать несколько серверов OpenVPN одновременно:
# openvpn --cd $dir --daemon --config /etc/openvpn/config/server2.conf

либо такой (например, во FreeBSD):

openvpn_enable="YES"
openvpn_if="tun" #
openvpn_configfile="/etc/openvpn/config/server.conf"
openvpn_dir="/etc/openvpn" # --cd directory

Конфиг клиента OpenVPN на Windows XP

Файлы клиента берем из папки /etc/openvpn/client1 на сервере и копируем их в папку " C:Program FilesOpenVPNconfig " на клиенте.

Расположение файла конфигурации клиента: " C:Program FilesOpenVPNconfigclient1.ovpn " (для Linux/FreeBSD расположение, полагаю, где-либо в домашней папке юзера, к примеру, " /home/vpn/client1.ovpn" ).

Пример файла конфигурации клиента OpenVPN :

# IP-адрес и порт сервера OpenVPN)
remote 444.333.222.111 1194

ca "C:Program FilesOpenVPNconfigca.crt"
cert "C:Program FilesOpenVPNconfigclient1.crt"
key "C:Program FilesOpenVPNconfigclient1.key"

tls-client
tls-auth "C:Program FilesOpenVPNconfigta.key" 1
auth MD5

#Это еще одна защита, на этот раз от "man in the middle" атаки
ns-cert-type server

Также надо настроить брандмауэр для того, чтобы внешние клиенты OpenVPN могли "видеть" сеть "за NAT". Я приведу часть конфига iptables работающего шлюза CentOS / Squid (внутренняя сеть 192.168.10.0/24):

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

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

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

# cd /etc/openvpn/easy-rsa/2.0/
#. /etc/openvpn/easy-rsa/2.0/vars
# ./revoke-full client25


error 23 at 0 depth lookup:certificate revoked

После успешного выполнения последней команды (вы должны увидеть последнюю строчку) в директории /etc/openvpn/easy-rsa/2.0/keys будет создан файл файл crl.pem (CRL - certificate revocation list - список отозванных сертификатов). Скопируйте его в директорию, где у вас находятся остальные файлы, имеющие отношение к работающему серверу OpenVPN. По идее, это директория /etc/openvpn. На всякий случай, проверьте существование в этой директории старого файла crl.pem (есть хорошая практика - сначала сделать резервную копию). Учтите, что в команде подразумеваются относительные пути, а не абсолютные:

# cp keys/crl.pem /etc/openvpn/

А теперь укажем нашему серверу проверять список отозванных сертификатов каждый раз при подключении нового клиента. Для этого надо добавить в конфиг сервера (возможно, /etc/openvpn/server.conf) одну строчку:

Перезагрузим сервер OpenVPN:

# service openvpn restart

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

Авторизуйтесь для добавления комментариев!

Openvpn linux:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    Настраиваем OpenVPN клиент Linux на примере Ubuntu

    Ubuntu → Настраиваем OpenVPN клиент Linux на примере Ubuntu

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

    Установим пакет OpenVPN:


    Поднимем права до root:


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


    Нам остаётся скачать c OpenVPN сервера, где живет наш удостоверяющий центр, 4 файла:

    И положить их в директорию /etc/openvpn рядом с файлом client.conf


    т.к. это у нас обычный пользователь, то он должен ходить в нашу локальную сеть, а в интрнет через свое подключение, выясним как ходят пакеты для этого выполним трассировку пакета в локальную сеть:
    traceroute 172.16.1.20
    traceroute to 172.16.1.20 (172.16.1.20), 30 hops max, 60 byte packets
    1 172.16.10.1 (172.16.10.1) 4.066 ms 8.001 ms 7.974 ms
    2 172.16.1.20 (172.16.1.20) 7.952 ms 7.931 ms 7.910 ms
    Видно что пакет ушел на адрес 172.16.10.1 и с интерфеса eth1 в локальную сеть к целевому IP

    Выполним трассировку к google.ru. получаем ответ вида:
    traceroute google.ru
    traceroute to google.ru (173.194.32.159), 30 hops max, 60 byte packets
    1 111.111.111.111 (111.111.111.111) 1.360 ms 1.252 ms 1.177 ms
    2 46.61.227.225 (46.61.227.225) 1.865 ms 1.271 ms 1.707 ms
    3 95.167.90.39 (95.167.90.39) 18.209 ms 95.167.90.37 (95.167.90.37) 18.170 ms 95.167.90.39 (95.167.90.39) 18.496 ms
    4 74.125.146.86 (74.125.146.86) 17.827 ms 17.984 ms 17.946 ms
    5 216.239.42.97 (216.239.42.97) 17.771 ms 18.058 ms 18.319 ms
    6 216.239.42.83 (216.239.42.83) 17.765 ms 216.239.42.49 (216.239.42.49) 19.130 ms 19.004 ms
    7 72.14.236.242 (72.14.236.242) 19.287 ms 18.554 ms 18.802 ms
    8 173.194.32.159 (173.194.32.159) 18.025 ms 18.269 ms 18.224 ms
    Видно что ответ вылетел черз шлюз сети к которой подключен клиент, а не через наш VPN канал

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

    перезапустить OpenVPN клиента и повторить трасисровку пакетов
    traceroute 172.16.1.20
    traceroute to 172.16.1.20 (172.16.1.20), 30 hops max, 60 byte packets
    1 172.16.10.1 (172.16.10.1) 4.066 ms 8.001 ms 7.974 ms
    2 172.16.1.20 (172.16.1.20) 7.952 ms 7.931 ms 7.910 ms В локальную сеть пакеты ходят без изменений, тут ничего не поменялось

    traceroute google.ru
    traceroute to google.ru (173.194.122.248), 30 hops max, 60 byte packets
    1 172.16.10.1 (172.16.10.1) 6.115 ms 11.448 ms 11.500 ms
    2 222.222.222.222 (222.222.222.222) 11.614 ms 11.649 ms 11.676 ms
    3 10.158.192.1 (10.158.192.1) 11.691 ms 11.705 ms 11.719 ms
    4 v811.m9-3.caravan.ru (212.24.42.49) 11.729 ms 11.744 ms 11.751 ms
    5 msk-ix-gw1.google.com (195.208.208.232) 11.736 ms 15.341 ms 15.350 ms
    6 66.249.94.100 (66.249.94.100) 15.346 ms 5.884 ms 8.451 ms
    7 72.14.252.22 (72.14.252.22) 49.777 ms 49.787 ms 49.796 ms
    8 173.194.122.248 (173.194.122.248) 49.510 ms 49.620 ms 49.671 m А тут видно что пакет попал на наш OpenVPN сервер и вылетел во внешний мир через интерфейс eth0
    Значит и эта маршрутизация работает правильно

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

    7 комментариев
    • tehnos
    • 9 мая 2016, 12:02
    • v

    Сделал все по инструкции — клиент не работает.Интерфейс tun0 не создается. Выкладываю лог:
    Mon May 9 12:02:42 2016 WARNING: No server certificate verification method has been enabled. See openvpn.net/howto.html#mitm for more info.
    Mon May 9 12:02:42 2016 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
    Mon May 9 12:02:42 2016 WARNING: file '/etc/openvpn/client1.key' is group or others accessible
    Mon May 9 12:02:42 2016 WARNING: file '/etc/openvpn/ta.key' is group or others accessible

    Здравствуйте.
    Интерфейс tun0 у вас не создался потому что openvpn не запустился!
    1) Сертификат ca.crt скопирован?
    2) проверьте права доступа к файлам ключей, должны быть 600

    • tehnos
    • 9 мая 2016, 21:41
    • ^
    • v

    ca.crt скопирован, конечно.Переделал права на 600. В логе:
    Mon May 9 21:36:01 2016 WARNING: No server certificate verification method has been enabled. See openvpn.net/howto.html#mitm for more info.
    Mon May 9 21:36:01 2016 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts

    Это 3уведомнение информационное и не должно создавать проблему.
    Фаерволл не блокирует соединение с сервером?

    • tehnos
    • 10 мая 2016, 13:44
    • v

    Тестирую на двух виртуальных машинах VirtualBox с Xubuntu. На одной сервер openvpn, сделан по Вашей инструкции и нормально работает, на второй — клиент, тут даже интерфейс tun не поднимается, хотя все делаю по инструкции. В хосте в винде открыт порт 1194. Никак не пойму в чем проблема!

    повысите уровень логирования на клиенте до 4, если вы копировали мой конфиг, то там он 0.
    Я эту инструкцию копировал, не далее как в эту субботу и все завелось вообще без ругани.

    • tehnos
    • 10 мая 2016, 17:47
    • v

    Заработало. Разобрался. Провайдер порты блокировал.

    Есть что добавить? Регистрируйся и оставляй комментарии!

    21 читатель
    44 топика

    • Artful / Настройка OpenVPN клиента на Windows 10

    10 августа 2016, 23:30 | 3 комментария

  • Flyer / Настраиваем OpenVPN сервер Linux на примере Ubuntu

    21 июля 2016, 12:35 | 22 комментария

  • FreeUser / Настройка шлюза локальной сети, на базе Ubuntu 12.04

    23 июня 2016, 06:51 | 144 комментария

  • asimus / Статья: Теория развития маленькой ИТ компании и концепция разделение труда

    20 июня 2016, 20:18 | 1 комментарий

  • Miang / Интегрируем iRedmail (Debian/Ubuntu) c Active Directory (Windows Server 2003/2008/2008R2/2012beta) (В разном пространстве имен!)

    6 июня 2016, 23:43 | 165 комментариев

  • asimus / Настройка MikroTik RouterBoard RB951G-2HnD (MikroTik+L2TP Beeline)

    27 мая 2016, 06:46 | 53 комментария

  • Artful / Вход ssh по ключу ( Linux/Unix )

    24 мая 2016, 10:35 | 6 комментариев

  • tehnos / Настраиваем OpenVPN клиент Linux на примере Ubuntu

    10 мая 2016, 17:47 | 7 комментариев

  • Artful / Настройка DNS+DHCP сервера для локальной сети+динамическое обновление DNS зон, под управлением Ubuntu 12.04

    22 апреля 2016, 16:49 | 286 комментариев

  • Artful / Настраиваем VPN сервер L2TP и IPsec на Mikrotik RouterOS

    20 апреля 2016, 15:43 | 8 комментариев

  • Artful / Создаем установочный USB диск Windows 10

    9 апреля 2016, 11:33 | 2 комментария

  • vlad / Настройка Squid прокси-сервера + поддержка IPv6 на Ubutnu

    30 марта 2016, 18:58 | 22 комментария

  • Artful / Использование DDNS в MikroTik на примере changeip.com

    30 марта 2016, 18:46 | 4 комментария

  • Enot87 / Настройка MikroTik RouterBoard RB951G-2HnD (MikroTik+Beeline WEB авторизация)

    30 марта 2016, 14:16 | 6 комментариев

  • Artful / Postfix как почтовый шлюз для MS Exchange 2003

    17 марта 2016, 08:02 | 93 комментария

  • Установка и настройка OpenVPN в CentOS

    Linux.yaroslavl.ru Установка и настройка OpenVPN в CentOS

    Довольно популярная задача — установить OpenVPN на Linux-сервере. Зачем это нужно? Например, когда вы находитесь в публичной сети (например, подключены к гостевой Wi-Fi ресторана), и не хотите, чтобы вас проснифали. Например, когда не хотите палить свой действительный IP-адрес посещаемым сайтам. Еще вариант — когда сетевое оборудование блокирует некоторые порты, а нужно, чтобы все работало. Давайте сэкономим время и без лишней головной боли поставим OpenVPN на примере CentOS 5.6.

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

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

    Редактируем /etc/openvpn/easy-rsa/vars, вводим свои данные:

    Собственно, создаем ключи:

    Копируем созданные ключи в рабочий каталог OpenVPN:

    Пришло время заполнить основной конфигурационный файл /etc/openvpn/openvpn.conf

    Обратите внимание на то, что мы задаем подсеть 1.1.1.0/24 в качестве подсети VPN, IP-адрес сервера в данном случае будет 1.1.1.1. Также нужно правильно указать путь до ключа и сертификатов. Работаем по протоколу TCP по порту 1194. Шифрование включено (tls-server).

    Теперь создаем ключ для клиента:

    Допустим, что на клиенте установлена Windows. Тогда для работы OpenVPN клиента нужно будет положить получившиеся файлы ca.crt. client01.crt. client01.key и server.ovpn в каталог C:\Program Files\OpenVPN\config. Содержимое server.ovpn примерно следующее:

    Чтобы весь трафик при подключении к VPN шел через VPN-сервер (это заставляет клиента изменить шлюз по умолчанию на vpn-сервер), нужно добавить следующую строчку в основной конфиг openvpn.conf:

    Tags: openvpn linux centos установка настройка openvpn.conf client server easy-rsa

    Установка и настройка OpenVPN-сервера в Debian - Debian Help

    Home • Статьи • Установка и настройка OpenVPN-сервера в Debian

    Установка и настройка OpenVPN-сервера в Debian Список разделов

    VPN (Virtual Private Network) — виртуальная частная сеть. VPN - система, позволяющая организовать некую виртуальную сеть объединяющую несколько удалённых друг от друга сетей в единое целое посредством сторонней сети, которая при этом может не обеспечивать безопасность. К примеру, объединение сетей филиалов в одну посредством интернета. Безопасность и надёжность обеспечивается за счёт средств криптографии.

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

    В куда менее профессиональном варианте - для доступа к закрытым сайтам из офиса. Если злой админ закрыл доступ к нужным вам сайтам и при этом чисто случайно у вас дома работает сервер под Debian 6, то вы можете настроить VPN-тоннель со своей рабочей машины до VPN-сервера у вас дома и наслаждаться интернетом без ограничений.

    В данном руководстве мы будем настраивать VPN на основе OpenVPN под управлением Linux Debian 6. Кроме того в тексте приведены длинные выдержки из логов, так как когда настраиваешь первый раз не известно как должно выглядеть нормальное содержимое лога. Также будем рассчитывать, что вы уже настроили сеть .

    Проверка

    Вторая команда не дала никакого вывода на моем сервере, но работе VPN это не помешало.

    Установка OpenVPN-сервера

    Предполагаем, что на сервере все действия производятся из-под рута.

    В итоге на сервере использовались следующие версии ПО: Debian 6.0.7, OpenVPN 2.1.3-2, OpenSSL 0.9.8o

    Генерация ключей

    Создаём директорию под ключи:

    В нее копируем утилиты и конфиги для работы с ключами:

    UPD. Если у вас более новая версия OpenVPN и easy-rsa в поставке нет, то вы можете увидеть следующее сообщение об ошибке:

    cp: cannot stat '/usr/share/doc/openvpn/examples/easy-rsa/2.0/*': No such file or directory

    Не стоит пугаться. Достаточно установить его из репозитория:

    и скопировать файлы из другой директории:

    Делается это для того, чтобы после обновления OpenVPN-сервера сделанные нами изменения не перезаписались.

    Переходим в эту директорию:

    В файле vars настраиваем параметры ключа:

    Нас интересует только следующий блок:

    Меняем на что-нибудь вроде:

    Очищаем от старых сертификатов и ключей папку keys/server :

    Generating a 1024 bit RSA private key
    . ++++++
    . ++++++
    writing new private key to 'ca.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [Leningradskaya]:
    Locality Name (eg, city) [SaintPetersburg]:
    Organization Name (eg, company) [Firm]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) [Firm CA]:debgate
    Name []:vasya
    Email Address [[email protected] ]:

    В квадратных скобках указываются значения по умолчанию, те которые были заданы в файле vars. В таких строках можно просто нажимать клавишу “Ввод”.

    Генерируем ключ сервера:

    Generating a 1024 bit RSA private key
    . ++++++
    . ++++++
    writing new private key to 'server.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [Leningradskaya]:
    Locality Name (eg, city) [SaintPetersburg]:
    Organization Name (eg, company) [Firm]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) [server]:
    Name []:
    Email Address [[email protected] ]:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName :PRINTABLE:'RU'
    stateOrProvinceName :PRINTABLE:'Leningradskaya'
    localityName :PRINTABLE:'SaintPetersburg'
    organizationName :PRINTABLE:'Firm'
    commonName :PRINTABLE:'server'
    emailAddress :IA5STRING:[email protected] '
    Certificate is to be certified until Mar 24 14:50:43 2023 GMT (3650 days)
    Sign the certificate? [y/n]:y

    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

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

    Генерируем сертификат клиента:

    Generating a 1024 bit RSA private key
    . ++++++
    . ++++++
    writing new private key to 'user.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [RU]:
    State or Province Name (full name) [LO]:
    Locality Name (eg, city) [SaintPetersburg]:
    Organization Name (eg, company) [Firm]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) [user]:
    Name []:
    Email Address [[email protected] ]:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName :PRINTABLE:'RU'
    stateOrProvinceName :PRINTABLE:'LO'
    localityName :PRINTABLE:'SaintPetersburg'
    organizationName :PRINTABLE:'Firm'
    commonName :PRINTABLE:'user'
    emailAddress :IA5STRING:[email protected] '
    Certificate is to be certified until Mar 28 13:30:46 2023 GMT (3650 days)
    Sign the certificate? [y/n]:y

    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    Если вы создаёте VPN для корпоративной сети не пренебрегайте паролями. Также для каждого клиента нужно сгенерировать отдельные ключи. Однако можно использовать и один ключ для множества клиентов, однако у данного варианта есть недостатки.

    Обратите внимание, что значения полей Common Name для сервера и клиента должны быть различными.

    Генерируем ключ Диффи — Хеллмана:

    Generating DH parameters, 1024 bit long safe prime, generator 2
    This is going to take a long time

    Наконец, последний ключ для tls-аутификации:

    После этого в директории /etc/openvpn/easy-rsa/keys/ образовалось достаточно некоторое количество файлов часть из которых нужна серверу, а часть - клиенту.

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

    Клиенту же понадобятся следующие ключи:

    user.crt
    user.key
    ca.crt
    ta.key

    Ключ ta.key понадобится для tls-аутентификации, которую мы будем настраивать на втором этапе.

    Настройка OpenVPN-сервера

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

    Правим конфигурационный файл VPN-сервера в Debian:

    Задаем следующие параметры:

    За счёт указанных параметров мы выбираем порт, протокол, тип соединения, указываем сертификаты, задаём параметры VPN-сети, указываем файл в котором хранить параметры соединений (чтобы можно было их восстановить после переподключения клиента), задаём параметры поддержания соединения, просим использовать сжатие передаваемых данных, указываем серверу при перезагрузке не подключаться к ресурсам которые могут быть недоступны из-за понижения привилегий, задаём файл статуса (содержит информацию о подключенных клиентах), лог-файл и уровень подробности отладочной информации.
    Если нужно больше отладочной информации, то для параметра verb можно установить значение вплоть до 9. В большинстве случаев вам должно хватить значения 5 или максимум 6.

    После этого для проверки запустите сервер из командной строки:

    Хотя скорее всего после установки openvpn в Debian, демон будет уже запущен и чтобы он нам не мешался, его стоит остановить:

    Если все хорошо, после запуска сервера в логе должно оказаться примерно следующее:

    Sat Mar 30 19:04:57 2013 OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Feb 21 2012
    Sat Mar 30 19:04:57 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
    Sat Mar 30 19:04:57 2013 Diffie-Hellman initialized with 1024 bit key
    Sat Mar 30 19:04:57 2013 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
    Sat Mar 30 19:04:58 2013 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
    Sat Mar 30 19:04:58 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
    Sat Mar 30 19:04:58 2013 ROUTE default_gateway=10.78.88.1
    Sat Mar 30 19:04:58 2013 TUN/TAP device tun0 opened
    Sat Mar 30 19:04:58 2013 TUN/TAP TX queue length set to 100
    Sat Mar 30 19:04:58 2013 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
    Sat Mar 30 19:04:58 2013 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
    Sat Mar 30 19:04:58 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
    Sat Mar 30 19:04:58 2013 Listening for incoming TCP connection on [undef]
    Sat Mar 30 19:04:58 2013 TCPv4_SERVER link local (bound): [undef]
    Sat Mar 30 19:04:58 2013 TCPv4_SERVER link remote: [undef]
    Sat Mar 30 19:04:58 2013 MULTI: multi_init called, r=256 v=256
    Sat Mar 30 19:04:58 2013 IFCONFIG POOL: base=10.8.0.4 size=62
    Sat Mar 30 19:04:58 2013 IFCONFIG POOL LIST
    Sat Mar 30 19:04:58 2013 user,10.8.0.4
    Sat Mar 30 19:04:58 2013 MULTI: TCP INIT maxclients=1024 maxevents=1028
    Sat Mar 30 19:04:58 2013 Initialization Sequence Completed

    Настройка OpenVPN-клиента

    Я использовал дистрибутив Linux Mint 14 основанный на Ubuntu, который в свою очередь основан на Debian. На клиенте действия выполнялись под непривилегированным пользователем с применением команды sudo.

    Напомню, клиенту нужно передать следующие ключи:

    Затем на клиентской машине расположить их в директории /etc/openvpn/ .

    Копируем файл с примерной конфигурацией клиента в нужную директорию:

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

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

    После этого, если все нормально то в консоли ничего не должно появляться и не должно отображаться приглашения командной строки. В логе клиента /var/log/openvpn.log долно появиться примерно следующее:

    Mon Apr 1 19:25:08 2013 OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Oct 8 2012
    Mon Apr 1 19:25:08 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
    Mon Apr 1 19:25:08 2013 LZO compression initialized
    Mon Apr 1 19:25:08 2013 Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
    Mon Apr 1 19:25:08 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
    Mon Apr 1 19:25:08 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
    Mon Apr 1 19:25:08 2013 Local Options hash (VER=V4): '69109d17'
    Mon Apr 1 19:25:08 2013 Expected Remote Options hash (VER=V4): 'c0103fa8'
    Mon Apr 1 19:25:08 2013 Attempting to establish TCP connection with [AF_INET]109.172.12.237:1194 [nonblock]
    Mon Apr 1 19:25:09 2013 TCP connection established with [AF_INET]109.172.12.237:1194
    Mon Apr 1 19:25:09 2013 TCPv4_CLIENT link local: [undef]
    Mon Apr 1 19:25:09 2013 TCPv4_CLIENT link remote: [AF_INET]109.172.12.237:1194
    Mon Apr 1 19:25:09 2013 TLS: Initial packet from [AF_INET]109.172.12.237:1194, sid=63c7901c 31cf5b65
    Mon Apr 1 19:25:10 2013 VERIFY OK: depth=1, [email protected] ebain-help.ru
    Mon Apr 1 19:25:10 2013 VERIFY OK: nsCertType=SERVER
    Mon Apr 1 19:25:10 2013 VERIFY OK: depth=0, [email protected] bain-help.ru
    Mon Apr 1 19:25:10 2013 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
    Mon Apr 1 19:25:10 2013 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:25:10 2013 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
    Mon Apr 1 19:25:10 2013 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:25:10 2013 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
    Mon Apr 1 19:25:10 2013 [server] Peer Connection Initiated with [AF_INET]109.172.12.237:1194
    Mon Apr 1 19:25:13 2013 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
    Mon Apr 1 19:25:13 2013 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5'
    Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: timers and/or timeouts modified
    Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: --ifconfig/up options modified
    Mon Apr 1 19:25:13 2013 OPTIONS IMPORT: route options modified
    Mon Apr 1 19:25:13 2013 ROUTE default_gateway=172.16.100.1
    Mon Apr 1 19:25:13 2013 TUN/TAP device tun0 opened
    Mon Apr 1 19:25:13 2013 TUN/TAP TX queue length set to 100
    Mon Apr 1 19:25:13 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
    Mon Apr 1 19:25:13 2013 /sbin/ifconfig tun0 10.8.0.6 pointopoint 10.8.0.5 mtu 1500
    Mon Apr 1 19:25:13 2013 /sbin/route add -net 10.8.0.1 netmask 255.255.255.255 gw 10.8.0.5
    Mon Apr 1 19:25:13 2013 Initialization Sequence Completed

    В логе сервера добавится следующее:

    Mon Apr 1 19:33:20 2013 MULTI: multi_create_instance called
    Mon Apr 1 19:33:20 2013 Re-using SSL/TLS context
    Mon Apr 1 19:33:20 2013 LZO compression initialized
    Mon Apr 1 19:33:20 2013 Control Channel MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ]
    Mon Apr 1 19:33:20 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
    Mon Apr 1 19:33:20 2013 Local Options hash (VER=V4): 'c0103fa8'
    Mon Apr 1 19:33:20 2013 Expected Remote Options hash (VER=V4): '69109d17'
    Mon Apr 1 19:33:20 2013 TCP connection established with [AF_INET]81.95.28.26:47278
    Mon Apr 1 19:33:20 2013 TCPv4_SERVER link local: [undef]
    Mon Apr 1 19:33:20 2013 TCPv4_SERVER link remote: [AF_INET]81.95.28.26:47278
    Mon Apr 1 19:33:21 2013 81.95.28.26:47278 TLS: Initial packet from [AF_INET]81.95.28.26:47278, sid=1fc06478 887428ff
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 VERIFY OK: depth=1, [email protected] ebain-help.ru
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 VERIFY OK: depth=0, [email protected] in-help.ru
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
    Mon Apr 1 19:33:22 2013 81.95.28.26:47278 [user] Peer Connection Initiated with [AF_INET]81.95.28.26:47278
    Mon Apr 1 19:33:22 2013 user/81.95.28.26:47278 MULTI: Learn: 10.8.0.6 -> user/81.95.28.26:47278
    Mon Apr 1 19:33:22 2013 user/81.95.28.26:47278 MULTI: primary virtual IP for user/81.95.28.26:47278: 10.8.0.6
    Mon Apr 1 19:33:24 2013 user/81.95.28.26:47278 PUSH: Received control message: 'PUSH_REQUEST'
    Mon Apr 1 19:33:24 2013 user/81.95.28.26:47278 SENT CONTROL [user]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)

    При этом с клиента должен пинговаться адрес 10.8.0.1 (можно открыть еще одну консоль):

    Мы настроили OpenVPN-сервер в Debian по минимуму, проверили его работоспособность. Осталось добавить tls-шифрование и завернуть на VPN-сервер весь трафик клиента.

    Добавляем tls-шифрование

    На сервере пишем в /etc/openvpn/server.conf :

    На клиенте в /etc/openvpn/client.conf :

    Фактически разница только в первой строке. На сервере в конце строки ставим ноль, на клиенте - единицу.

    Снова соединяемся, пингуем 10.8.0.1. Если пинг проходит, значит все хорошо.

    Если VPN-сервер перезапустить, то после соединения с клиентом в логе будет примерно следующее:

    Mon Apr 1 19:51:31 2013 OpenVPN 2.1.3 x86_64-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Feb 21 2012
    Mon Apr 1 19:51:31 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
    Mon Apr 1 19:51:31 2013 Diffie-Hellman initialized with 1024 bit key
    Mon Apr 1 19:51:31 2013 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>
    Mon Apr 1 19:51:31 2013 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file
    Mon Apr 1 19:51:31 2013 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:51:31 2013 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:51:31 2013 TLS-Auth MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
    Mon Apr 1 19:51:31 2013 Socket Buffers: R=[87380->131072] S=[16384->131072]
    Mon Apr 1 19:51:31 2013 ROUTE default_gateway=10.78.88.1
    Mon Apr 1 19:51:31 2013 TUN/TAP device tun0 opened
    Mon Apr 1 19:51:31 2013 TUN/TAP TX queue length set to 100
    Mon Apr 1 19:51:31 2013 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
    Mon Apr 1 19:51:31 2013 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
    Mon Apr 1 19:51:31 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
    Mon Apr 1 19:51:31 2013 Listening for incoming TCP connection on [undef]
    Mon Apr 1 19:51:31 2013 TCPv4_SERVER link local (bound): [undef]
    Mon Apr 1 19:51:31 2013 TCPv4_SERVER link remote: [undef]
    Mon Apr 1 19:51:31 2013 MULTI: multi_init called, r=256 v=256
    Mon Apr 1 19:51:31 2013 IFCONFIG POOL: base=10.8.0.4 size=62
    Mon Apr 1 19:51:31 2013 IFCONFIG POOL LIST
    Mon Apr 1 19:51:31 2013 user,10.8.0.4
    Mon Apr 1 19:51:31 2013 MULTI: TCP INIT maxclients=1024 maxevents=1028
    Mon Apr 1 19:51:31 2013 Initialization Sequence Completed
    Mon Apr 1 19:51:41 2013 MULTI: multi_create_instance called
    Mon Apr 1 19:51:41 2013 Re-using SSL/TLS context
    Mon Apr 1 19:51:41 2013 LZO compression initialized
    Mon Apr 1 19:51:41 2013 Control Channel MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
    Mon Apr 1 19:51:41 2013 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
    Mon Apr 1 19:51:41 2013 Local Options hash (VER=V4): '7c7a0a5e'
    Mon Apr 1 19:51:41 2013 Expected Remote Options hash (VER=V4): '2dcdad92'
    Mon Apr 1 19:51:41 2013 TCP connection established with [AF_INET]81.95.28.26:47413
    Mon Apr 1 19:51:41 2013 TCPv4_SERVER link local: [undef]
    Mon Apr 1 19:51:41 2013 TCPv4_SERVER link remote: [AF_INET]81.95.28.26:47413
    Mon Apr 1 19:51:42 2013 81.95.28.26:47413 TLS: Initial packet from [AF_INET]81.95.28.26:47413, sid=340c8886 5f2db145
    Mon Apr 1 19:51:42 2013 81.95.28.26:47413 VERIFY OK: depth=1, [email protected] ebain-help.ru
    Mon Apr 1 19:51:42 2013 81.95.28.26:47413 VERIFY OK: depth=0, [email protected] in-help.ru
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
    Mon Apr 1 19:51:43 2013 81.95.28.26:47413 [user] Peer Connection Initiated with [AF_INET]81.95.28.26:47413
    Mon Apr 1 19:51:43 2013 user/81.95.28.26:47413 MULTI: Learn: 10.8.0.6 -> user/81.95.28.26:47413
    Mon Apr 1 19:51:43 2013 user/81.95.28.26:47413 MULTI: primary virtual IP for user/81.95.28.26:47413: 10.8.0.6
    Mon Apr 1 19:51:45 2013 user/81.95.28.26:47413 PUSH: Received control message: 'PUSH_REQUEST'
    Mon Apr 1 19:51:45 2013 user/81.95.28.26:47413 SENT CONTROL [user]: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)

    Как видно, появились строки про ключ ta.key. также изменились строки про cipher .

    Заворачиваем весь трафик на VPN-сервер

    Тут требуется заменить конфигурационный файл только на сервере. Добавляем строки:

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

    Вторая строка задает DNS-сервер, который будет использоваться после подключения к VPN-серверу.

    Также нам необходимо на сервере задать правило для маршрутизации трафика из сети VPN-сервера в локальную сеть или сеть интернет-провайдера. В debian это можно сделать правилом для iptables:

    Теперь можно по нормальному запустить openvpn-сервер и клиент:

    Единственное неудобство, при запуске демона на клиенте будет постоянно поддерживаться VPN-соединение. О том, как отключить автозагрузку демона можно прочитать в статье про управление автозагрузкой в debian .

    Если вы используете Linux на вашем рабочем компьютере, то для удобного подключения к VPN можно использовать модуль к Network-Manager.

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

    client-to-client - позволяет клиентам VPN-сервера связываться друг с другом.
    duplicate-cn - параметр нужно добавить если вы для всех клиентов создали одинаковые ключи, но клиенты при этом представляются различными common name.
    max-clients 100 - ограничение максимального числа одновременно подключенных клиентов

    Для повышения безопасности на linux-системах можно понизить права VPN-сервера:

    UPD. Если после всего у вас проблемы с NAT и устройством TUN, то включите поддержку форвардинга. Для этого в файле /etc/sysctl.conf установите следующий параметр:

    и затем примените его командой:

    Следи