OpenVPN: создание полноценного openVPN gateway. OpenVPN клиент: разбираемся, что это такое

В сущности, Open vpn представляет собой весьма интересную программу, работающую под Virtual Private Network разновидности точка-точка, причем, менять FireWall-настройки для её использования не требуется. Это программа приходит на помощь, когда необходимо подключиться к приватной виртуальной сети, например, присоединиться к домашней сети или офисной VPN.

Данная программа нередко выступает в роли универсального клиента, который дает возможность без проблем замаскировать свое пребывание в интернете, в два счета установив связь со сторонним сервером «мимо» вашего провайдера. Именно это делает open vpn популярной в среде анонимных VPN сервисов.

Что можно отнести к базовым преимуществам подобной модели?

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

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

Что представляет собой подключение через открытый VPN?

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

  • В каких операционных системах может использоваться OpenVPN клиент? Во всех основных ОС, к числу которых принадлежит Windows, MAC OS, FreeBSD.
  • Через какие порты OpenVPN производит все сетевые операции и перемещения? UDP или TCP, более того, возможна работа через HTTP, NAT и др.

Так что, если вы собираетесь приобрести доступ к vpn server, думается, технология open vpn определенно вас заинтересует. Десятки исследований и попыток скрупулезно сравнить OpenVPN и PPTP выстроили четкую картину: улучшенные алгоритмы шифрования данных делают клиента в разы более эффективным в вопросах безопасности. Легкость обслуживания вносит дополнительные баллы в его пользу. Удачной вам работы!

Очень часто наши клиенты присылают нам запросы по установке и настройке OpenVPN на наших VPS-серверах. Но много других пользователей даже не догадываются о преимуществах его использования. В данной статье рассмотрим для чего нужен OpenVPN и опишем области его применения .

OpenVPN – свободная реализация технологии с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами.

OpenVPN дает возможность устанавливать соединения между компьютерами, находящимися за NAT-firewall, при этом нет необходимости менять их настройки. Технология разработана Дж. Йонаном и выходит под бесплатной лицензией GNU GPL. Инструмент используют во многих популярных и широко используемых ОС: Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X, QNX и Microsoft Windows .

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

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

OpenVPN в основном применяют в качестве механизма защиты для частной Сети. Использовать подобный инструмент с открытым исходным кодом можно с целью полноценной разработки зашифрованного канала. Работатают с OpenVPN в режимах: точка-точка или сервер-клиенты. Считается по праву довольно полезным методом шифрования между компьютерами в условиях конкретной сети.

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

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

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

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

Бесплатные и платные VPN-сервисы.

За счет чего достигается безопасность и шифрование в OpenVPN? Это, в первую очередь, обеспечено библиотекой OpenSSL и протоколом транспортного уровня Transport Layer Security. Но вместо OpenSSL в новых релизах OpenVPN может использоваться библиотека PolarSSL. Протокол TLS – усовершенствованная версия протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers.

OpenVPN хорошо совмещен и связан с OpenSSL библиотеками, поэтому механизмы шифрования основаны в основном на нем.

Особенности использования OpenVPN на разных операционных системах . В зависимости от выбранной вами ОС, есть свои нюнсы в работе с частной сетью. Например, режим fast-io, который ускоряет UDP-соединение, может работать только в GNU/Linux. В системе Windows довольно часто возникают неполадки с изменениями маршрутов, для подобных решений использую опцию route-method.

OpenVPN портирован в MacOS X - существует свободно распространяемый проект tunnelblick. Нет поддержки параметра TCP_NODELAY ядром этой ОС. Разработан коммерческий проект viscocity для этой ОС. OpenVPN часто используют на маршрутизаторах некоторых производителей: Linksys и Mikrotik и другие.

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

Кроме всех выше перечисленных преимуществах, применение в OpenVPN стандартных протоколов TCP и UDP, дает возможность стать альтернативой IPsec в случаях, когда Интернет-провайдер блокирует некоторые VPN протоколы.

OpenVPN – довольно универсальное программное обеспечение, которое предоставляет множество вариантов настройки в опытных руках пользователя. Как установить VPN от ГиперХост на ОС Android. Детальнее . Если Вам будет нужна помощь в настройке и установки данного продукта на наших , обращайтесь в техническую поддержку Hyper Host™ . Мы будем рады Вам помочь в кратчайшие сроки и в любое время суток!

Как обеспечить онлайн безопасность? для работы в Сети.

10308 раз(а) 23 Сегодня просмотрено раз(а)

16 августа 2009 в 22:40

OpenVPN: создание полноценного openVPN gateway

  • Настройка Linux

Определися с желаемым.

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

После установки шифрованного туннеля между клиентом и сервером, сервер будет NAT-ить все наши пакеты в Интернет. Также, сервер будет обслуживать DNS и являться firewall-ом для виртуальной локальной сети.

Внешний IP нашего сервера (того, который будет openVPN): 212.212.212.212
Внутренний IP сервера (видимый из туннеля): 10.10.0.1
Пул внутренних адресов openVPN: 10.10.0.2 - 10.10.0.128
Название нашей сети: vpnet
Имя сервера: vpsrv
Имя клиента: vpclient

Зачем нужен внешний IP, думаю, понятно. Внутренний IP нужен для соединения с сервером после поднятия туннеля. Пул адресов - это адреса, которые сервер выдает подключившимся клиентам.
Название сети - это имена конф. файлов и имя сервера в этих конф. файлах. Имена клиента и сервера = имена файлов ключей.

На сервере установлен Gentoo Linux 2008.0, обновленный до последних версий. Ядро - 2.6.29. Вся настройка будет выполняться по SSH.

Настройка ядра.

Замечу сразу, на этом этапе нужно быть крайне осторожным и внимательным. Если кто забыл.

Ядро должно содержать опции ниже на сервере. На клиенте нужны только TUN и ipv4.

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

CONFIG_NF_NAT=m
CONFIG_NF_NAT_PPTP=m
CONFIG_NETFILTER=y
CONFIG_TUN=m

Ну и разумеется поддержка ipv4, сетевой карты и прочего железа. Собираем и устанавливаем ядро. Можно воспользоваться genkernel . Перезагружаемся.

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

Установка ПО.
Если:) сервер вернулся из ребута, перейдем к установке ПО.

Emerge --sync
emerge openvpn bind bind-tools iptables

Ждем, иногда долго. После установки переходим в /etc/init.d/ и выполняем:

Ln -s openvpn openvpn.vpnet
rc-update add openvpn.vpnet default
rc-update add named default
rc-update iptables default
./iptables save

Создав symlink на самого себя, мы указали openvpn, что нужно использовать конфигурацию vpnet . В будущем запускаем его только так:

/etc/init.d/openvpn.vpnet start

Сейчас запускать не нужно, ибо запускать пока нечего. :)
Помимо этого мы добавили iptables, named и openvpn в автозагрузку.

Создадим нужные каталоги и файлы:

Mkdir /etc/openvpn/vpnet/
mkdir /etc/openvpn/vpnet/keys
touch /var/log/openvpn.log
touch /etc/openvpn/vpnet.conf

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

Перейдем в /usr/share/openvpn/easy-rsa/ . Откроем файл vars и впишем настроим параметры:

Export EASY_RSA="/usr/share/openvpn/easy-rsa/" #Путь к easy-rsa.
export KEY_CONFIG="$EASY_RSA/openssl.cnf" #Конфиг OpenSSL
export KEY_DIR="/etc/openvpn/vpnet/keys" #Каталог, в котором мы будем держать ключи.
export KEY_SIZE=1024 # Размер ключа
export CA_EXPIRE=3650 # Срок действия CA
export KEY_EXPIRE=3650 # Срок действия ключа
export KEY_COUNTRY="RU" # Двухбуквенный код страны
export KEY_PROVINCE="XX" # Province, не актуально
export KEY_CITY="Town" # Город
export KEY_ORG="Companyname" # Компания
export KEY_EMAIL="[email protected]" # Email

Естественно, значения (компания, путь к ключам и easy-rsa, email) нужно поменять на подходящие вам.

Имопртируем переменные: source ./vars

Теперь создадим ключи.

./clean-all # Убиваем старые ключи, если они были.
openvpn --genkey --secret ta.key # Ключ TLS-auth
./build-dh #Ключ Диффи-Хеллмана.
./pkitool --initca # Certificate Authority для сервера.
./pkitool --server vpsrv # Сертификат сервера.
./pkitool vpclient # Сертификат клиента.

И перенесем остатки в нужное место:

Mv ./ta.key /etc/openvpn/vpnet/keys

Все, ключи готовы.

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

Переходим в /etc/openvpn/ , открываем vpnet.conf и пишем туда:

Mode server
tls-server
proto tcp-server
dev tap
port 5555 # Порт
daemon
tls-auth /etc/openvpn/vpnet/keys/ta.key 0
ca /etc/openvpn/vpnet/keys/ca.crt
cert /etc/openvpn/vpnet/keys/vpsrv.crt
key /etc/openvpn/vpnet/keys/vpsrv.key
dh /etc/openvpn/vpnet/keys/dh1024.pem
ifconfig 10.10.0.1 255.255.255.0 # Внутренний IP сервера
ifconfig-pool 10.10.0.2 10.10.0.128 # Пул адресов.
push "redirect-gateway def1" # Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать.
push "route-gateway 10.10.0.1"
duplicate-cn
verb 3
cipher DES-EDE3-CBC # Тип шифрования.
persist-key
log-append /var/log/openvpn.log # Лог-файл.
persist-tun
comp-lzo

Все опции, в принципе, понятны. Особо важные я отметил комментариями. Пути и названия, адреса - нужно подправить под себя.

Теперь сервер можно запустить командой /etc/init.d/openvpn.vpnet start
Если возникнут проблемы, подробности можно прочитать в log-файле.

Чтобы сервер выпускал наши пакеты во внешнюю сеть нам нужно настроить NAT. Это просто.

Готовим и запускаем iptables:

/etc/init.d/iptables save
/etc/init.d/iptables start

Включаем поддержку IP forwarding:

Sysctl net.ipv4.ip_forward=1
echo "sysctl net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Добавляем правило firewall:

Iptables -v -t nat -A POSTROUTING -o EXTERNAL_IF -s VPN_NET/24 -j SNAT --to-source SERVER_IP

EXTERNAL_IF, VPN_NET и SERVER_IP заменить на внешний интерфейс, сеть VPN и внешний (!) IP сервера соответственно.

Снова делаем /etc/init.d/iptables save , чтобы правило применялось при загрузке системы.

Все, можно работать.

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

Устанавливаем ПО, создаем пути:

Emerge openvpn
cd /etc/init.d/
ln -s openvpn openvpn.vpnet-client
rc-update add openvpn.vpnet-client default

Mkdir /etc/openvpn/vpnet
mkdir /etc/openvpn/vpnet/client_keys
touch /etc/openvpn/vpnet-client.conf

Берем с сервера файлы:

ca.crt
vpclient.crt
vpclient.key
ta.key

И закидываем их в /etc/openvpn/vpnet/client_keys/ на клиенте.

Редактируем /etc/openvpn/vpnet-client.conf :

Tls-client
proto tcp-client
remote 212.212.212.212
dev tap
port 5555
cd /etc/openvpn/vpnet
pull
tls-auth /etc/openvpn/vpnet/client_keys/ta.key 1
ca /etc/openvpn/vpnet/client_keys/ca.crt
cert /etc/openvpn/vpnet/client_keys/vpclient.crt
key /etc/openvpn/vpnet/client_keys/vpclient.key
cipher DES-EDE3-CBC
log-append /var/log/openvpn.log
comp-lzo

Опции шифрования и компрессии на клиенте и сервере должны совпадать .

Запускаем клиент. Автоматически установится соединение с сервером, создастся туннель, default gateway - сервер VPN. Если все сделано правильно, то можно ходить в интернет.

Настройка закончена.

Могу ответить на вопросы в комментариях.

Итак, дорогой друг, сегодня мы с тобой научимся создавать шифрованные соединения между различными сетями на базе OpenVPN. Для начала дуй на
http://openvpn.net/ и тащи от туда свеженький исходник (как всегда для гурманов) или бинарник (для любителей Windows). Те, кто не любит особо заморачиваться с компилированием в ручную могут дуть /usr/ports/security/openvpn (FreeBSD ports) и устанавливать из портов.
Если ты, как и я, дома работаешь с Windows (он все же удобнее и поиграться можно, когда работа до смерти надоедает 😉), то советую тебе зайти еще и суда:
http://openvpn.net/gui.html
— это GUI для виндовой версии, для MacOS там по-моему тоже что-то было. Итак, скачали, поставили под Win, устанавливаем под FreeBSD. Для тех, кто впервые решил собрать что-то ручками, напоминаю традиционные команды.

#tar –zxvf openvpn-2.0_rc21.tar.gz
#cd openvpn-2.0_rc21
#./configure
#make
#make install
#make clean

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

#./configure –help | less

А на другом набиваю различные флаги. Так, с установкой вроде бы разобрались… Переходим к куда более интересной и сложной части, а именно созданию конфигурационных файлов и различного рода ключей.

Модификация BSD

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

options IPSEC
options IPSEC_ESP

Редактим конфиг

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

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

#vi /usr/local/etc/openvpn/office.conf

Прописываем туда следующее:

daemon openvpn # просим наш openvpn сервер стать демоном, советую вставить эту #строчку только после того как все заработает.

dev tun # используем этот интерфейс

server 10.1.0.0 255.255.255.0 #укажем ip сервера в vpn сети

push «route 10.1.0.0 255.255.255.0» #– эта штука добавит маршрут vpn сети
push «route 194.1.1.0 255.255.255.0» #– эта добавит клиентам маршут сетки за vpn сервером
push «route 192.168.0.0 255.255.255.0» #- это маршрут до твоей домашней сети

client-to-client #закомментируй это, если не хочешь, чтобы vpn клиенты видели друг друга

tls-server #указываем, что это серверная конфигурация

dh /etc/ssl/dh2048.pem # это сертификат для шифровки установки соединения
ca /etc/ssl/CA_cert.pem # Это серверные сертификаты
cert /etc/ssl/certs/Cserv.pem #
key /etc/ssl/keys/Kserv.pem #

proto tcp-server #Скажем серверу работать по TCP протоколу
port 5000 # На порту 5000

user nobody #Пользователь, из-под которого стартует vpn сервер (не ставь root!)
group nobody #Ну а это группа

comp-lzo #Включаем сжатие

persist-tun #Использование тех же интерфейса и ключа при рестарте сервера
persist-key

tls-auth /etc/ssl/ta.key 0 # Защита от DOS атак
keepalive 10 120 # Время жизни неактивной сессии

verb 4 # Количество отладочной информации (от 0 до 9)

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

Windows OpenVPN client

Знаешь, этой штукой можно пользоваться даже на dialup-ом соединении, что для меня не маловажно! Скинул ключи да установщик на Flash-ку и не беспокойся больше, даже если ты в гостях у друга пьешь пиво и ешь мясо, а тут начальник позвонит и начнет ругаться, что у них что-то не работает, поднимаешь клиента у друга, только не догадайся копировать ключи ему на жестак. Конфиг скопируй, а пути поменяй до клиентских ключей на флешке, вот. Ах, да… Поехали дальше.

Жмешь ПУСК-Программы-OpenVPN… Входи в папку с конфигурационными файлами. Создай home.ovpn и напиши или скопируй туда этот конфиг:

client #Говорим, чтобы клиент забирал информацию о маршрутизации с сервера (вспомни # push опции)

remote ip-a #Вместо ip-a впиши реальный ip своего видимого в интернете сервера

tls-client # Это клиентская конфигурация

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

ca «H:\\config openVPN\\CA_cert.pem» # Это как раз пути ключей (Они у меня на флешке)

cert «H:\\config openVPN\\chome.pem»

key «H:\\config openVPN\\khome.pem»

tls-auth «H:\\config openVPN\\ta.key» 1 #Защита от DOS. Здесь в отличии от сервера стоит #единичка. Не перепутай, Кутузов! 😉

proto tcp-client #Клиент работает по TCP
port 5000 #Соединяется с 5000 портом

comp-lzo # Это ты уже знаешь

tun-mtu 1500 #Просто скопируй, если не знаешь сетей, я не смогу рассказать об этом в #двух строчках
tun-mtu-extra 32
mssfix 1450

Так, конфиг готов. Перейдем к более интересному занятию, генерации ключей и сертификатов.

OpenSSL рулит

Топай в /etc/ssl. Там создай 2 файла: index.txt и serial. Теперь запишем кое-что в serial:

#cd /etc/ssl
#touch index.txt
#touch serial
#echo “01” > ./serial

Теперь, создадим пару папок:

#mkdir certs
#mkdir keys
#mkdir crl

А теперь, немножко позаботимся о безопасности и изменим свой openssl.cnf. Я понимаю, что у тебя очумелые ручки, поэтому не забудь сделать копию этого файла, так, на всякий пожарный. 😉

#cp ./openssl.cnf ./ openssl.cnf.backup
#vi openssl.cnf

Найди параметр «default_days» и выставь его равным 9125 (это кол-во дней до того, как наши сертификаты перестанут работать). И в самый конец конфига подпиши вот что:
[ server ]
basicConstraints =CA:FALSE
nsCertType =server

После того, как ты создашь сертификаты, эта штука не даст всяким читающим этот журнал парнишкам провести простую «man in the middle» атаку. Если забудешь это прописать настройка «ns-cert-type server» в конфигурационном файле работать не будет.

Еще чуток терпения и ты сделаешь то, чего так долго ждал. ТЫ СДЕЛАЕШЬ ЭТО!

Вернемся на пути истинные:

#openssl req –new –x509 –keyout private/CA_key.pem –out CA_cert.pem

Введи пароль и не забудь его.

#openssl req –new –nodes –keyout keys/Kserv.pem –out req/Rserv.pem

Для этой строки важно, чтобы параметр Organization Name совпадал с тем, что ты указал при генерации CA_cert.pem.

#openssl ca -extfile /etc/ssl/openssl.cnf –extensions server –out certs/Cserv.pem –infiles req/Rserv.pem

Тебя зададут пару вопросов, на которые не думая долго отвечай «y».
Это было для сервера. Теперь повторим все то же самое, но для клиента.

#openssl req –new –keyout keys/Khome.pem –out req/Rhome.pem
#openssl ca –out certs/Chome.pem –infiles req/Rhome.pem

Не забудем про ta.key:

#openvpn —genkey —secret ta.key

Так, и на последок создаем Diffie-Hellman (фиг знает как это по-русски написать) файл

#openssl dhparam –out dh2048.pem 2048

Получив сообщение о его долгом создании, идем пить пиво (у меня и правда почти 20 минут создавался).

Забираем наши сертификаты

Все, принимай мои поздравления, ты все сделал! Теперь осталось только забрать с собой:
— CA_cert.pem
— Chome.pem
— Khome.pem
— ta.key

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

#mkdir /mnt/floppy
#mount -t msdos /dev/fd0a /mnt/floppy
# cp /etc/ssl/certs/Cnode.pem /mnt/floppy
#cp /etc/ssl/keys/Knode.pem /mnt/floppy
#cp /etc/ssl/CA_cert.pem /mnt/floppy
#cp etc/ssl/ta.key /mnt/floppy
#umount –f /dev/fd0a

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

Ракета пошла

Теперь запускаешь OpenVPN сервер:

#openvpn –config /usr/local/etc/openvpn/office.conf

Создай небольшой openvpn.sh в /usr/local/etc/rc.d для автоматического запуска при перезагрузках:

case «$1» in
start)
echo -n «OpenVPN2 Starting… «
/usr/local/sbin/openvpn || exit 1
;;
stop)
echo -n «Shutting down OpenVPN2… «
/usr/bin/killall openvpn &>/dev/null || exit 1
;;
reload|restart)
$0 stop && sleep 1 && $0 start || exit 1
;;
*)
echo «Usage: $0 {start|stop|reload|restart}»
exit 1
esac

Фаервол

Прописываешь правило для ipfw, чтобы разрешить коннекты на наш с тобой демон:

#ipfw –q add pass tcp from any to me 5000
#ipfw –q add pass tcp from any to any via tun0

Так же можешь добавить это к своему фаервол скрипту.

Последний штрих

Для коннекта с Windows-клиента используешь GUI, как прописать его в автозагрузку для удобства, думаю, и сам разберешься.

Подведем итоги

Итак, ты только что настроил соединение между сервером-маршрутизатором, защищающим твою сетку где-то там и своей домашней сетью. Это великий шаг. Ты на еще один левел поднял свое искусство администрирования. Еще раз не поскуплюсь и поздравлю тебя. Знаешь, есть умные люди, которые не советуют таким образом создавать соединения между сетями. Мы добавили с тобой правило только позволяющее подключаться к твоему серверу и беспрепятственно бегать между двумя сетями. Если ты решишь увеличить число клиентов OpenVPN сервера, тебе придется дополнительно настроить и фаерволинг с безопастность, а чем больше интерфейсов на маршрутизаторе, тем сложнее за этим следить. Кроме того, ты только что выполнил расширение адресного пространства своих сетей. Этого как раз и не любят эти грамотные в вопросах безопасности дяди. Ну да ладно, это уже философские байки, раз хочешь, пользуйся. И напоследок, отправляю тебя на
http://openvpn.net/ , там много документации, с которой я бы на твоем месте ознакомился. Ну все, мне пора. Если что, адрес все тот же:
. Жду отзывов и предложений.

— свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек. OpenVPN была создана Джеймсом Йонаном (James Yonan) и распространяется под лицензией GNU GPL.

В этой статье в простой и доступной форме мы попытаемся рассказать вам о том как поднять собственный OpenVPN сервер. Мы не ставим своей целью, чтобы по окончании прочтения этой статьи вы досконально понимали все принципы "как это работает" или разбирались в тонкостях организации сетей, но хотим, чтобы в результате - вы могли настроить OpenVPN сервер "с нуля". Так что можно считать эту статью неким пошаговым руководством для пользователей. На самом деле в сети масса документации, мануалов, посвященных развертыванию OpenVPN, но они либо ориентированы на подготовленных пользователей или системных администраторов, либо же в качестве примера для демонстрации используются Linux-системы. Мы же пойдем другим путем и расскажем как настроить OpenVPN на компьютере среднестатического пользователя, т.е. рабочей станции с установленной ОС Windows. Зачем вам может пригодиться эта информация? Ну например вы хотите поиграть с друзьями в игру, которая не поддерживает игру через интернет, а только по локальной сети, или же, например, вы занимаетесь удаленной поддержкой пользователей, но по каким-то причинам использовать программное обеспечение вроде TeamViewer или Ammyy Admin не желаете, т.к. не хотите чтобы в процессе передачи ваших данных или установки соединения участвовали сервера сторонних компаний. В любом случае практический опыт организации собственной виртуальной частной сети (VPN) окажется для вас полезным.

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

Итак, начнем. В нашем примере в качестве сервера OpenVPN будет выступать машина с установленной ОС Windows XP Professional SP3 (x86), в качестве клиентов - несколько машин с Windows 7 x64 и Windows 7 x86 (хотя на самом деле описываемая в статье схема заработает и на других конфигурациях). Предположим, что ПК который будет выступать в роли OpenVPN сервера имеет белый статический IP адрес в сети интернет (в случае если IP адрес, предоставляемый вашим провайдером динамический, то вам необходимо зарегистрироваться в DynDNS или No-IP ), если это условие выполняется, но ПК находится за роутером или аппаратным firewall"ом - вам придется пробросить необходимые порты (об этом мы расскажем чуть ниже, когда перейдем непосредственно к настройке сервера), если вы не представляете что это такое и для чего это используется, то мы рекомендуем вам ознакомиться со статьей на нашем сайте.

  1. Идем на официальный сайт проекта OpenVPN, в раздел Downloads - . Скачиваем оттуда, соответствующий вашему релизу ОС Windows дистрибутивай (32-bit или 64-bit Installer). На момент написания этой статье для 32-х битных ОС был доступен дистрибутив openvpn-install-2.3_rc1-I002-i686.exe , а для 64-х битных - openvpn-install-2.3_rc1-I002-x86_64.exe соответственно. Т.к. мы определились, что сервер мы будем поднимать на WinXP x86, т.е. на 32-битной ОС, то скачиваем дистрибутив по первой ссылке.
  2. Запускаем скачанный инсталлятор. На этапе где выбирается путь для установки вводим C:\OpenVPN (см. скриншот), это упростит нам настройку в дальнейшем: После чего нажимаем "Next" до тех пор, пока установка не будет завершена. Если в процессе установки, на этапе выбора компонент для установки у вас было "пустое окно", например, такое:
    То по всей видимости вы скачали "не тот" дистрибутив, в таком случае попробуйте скачать последнюю релизную версию openvpn-2.2.2-install.exe (она устанавливается как на x86, так и на x64 системы). При "правильной установке" окно выбора компонентов должно выглядеть так:
    Все галочки в нем при установке по-умолчанию стоят, менять дополнительно ничего не нужно. Если установка прошла успешно, то в Панели управления -> Сетевые подключения (или, если вы устанавливаете сервер на Windows 7 или Windows Vista, в Центр управления сетями и общим доступом -> Изменение параметров адаптера) у вас должен появиться TAP-Win32 Adapter V9, который будет называться "Подключение по локальной сети X" (X - автоматически присваиваемый системой номер):
    Состояние у него будет "Сетевой кабель не подключен", т.к. мы еще не конфигурировали наш сервер.
  3. Создаем в папке OpenVPN подпапку SSL, в ней будут храниться выданные сервером ключи и сертификаты. Далее запускаем блокнот и копируем в него следующий текст: #dev tun dev tap #dev-node "VPN" proto tcp-server #proto udp port 7777 tls-server server 10.10.10.0 255.255.255.0 comp-lzo # route-method exe # маршрут для сервера, чтобы видеть сети за клиентом # route 192.168.x.0 255.255.255.0 10.10.10.x # маршрут добавляемый в таблицу маршрутизации каждого клиента, чтобы видеть сеть за сервером # push "route 192.168.x.0 255.255.255.0" # разрешает vpn-клиентам видеть друг-друга, в противном случае все vpn-клиенты будут видеть только сервер client-to-client # каталог с описаниями конфигураций каждого из клиентов client-config-dir C:\\OpenVPN\\config\\ccd # файл с описанием сетей между клиентом и сервером ifconfig-pool-persist C:\\OpenVPN\\config\\ccd\\ipp.txt # пути для ключей и сертификатов сервера dh C:\\OpenVPN\\ssl\\dh1024.pem ca C:\\OpenVPN\\ssl\\ca.crt cert C:\\OpenVPN\\ssl\\Server.crt key C:\\OpenVPN\\ssl\\Server.key #persist-key tls-auth C:\\OpenVPN\\ssl\\ta.key 0 tun-mtu 1500 tun-mtu-extra 32 mssfix 1450 keepalive 10 120 status C:\\OpenVPN\\log\\openvpn-status.log log C:\\OpenVPN\\log\\openvpn.log verb 3 На параметрах которые здесь описаны, мы остановимся чуть позже. После чего сохраняем его в файл C:\OpenVPN\Config\Server.ovpn , обратите внимание файл должен получиться именно с расширением .ovpn , для этого в диалоге сохранения опции должны стоять именно так, как показано на картинке:
    Если вы работаете под Windows 7 / Windows Vista и блокнот не дает вам сохранить файл Server.ovpn в папку C:\OpenVPN\Config\ , значит его нужно запустить с правами администратора. Для этого щелкните в меню Пуск по ярлыку Блокнота правой кнопкой мыши и выберите "Запуск от имени администратора": Теперь также с помощью блокнота создадим файл C:\OpenVPN\easy-rsa\vars.bat , скопировав в него нижеследующий текст: @echo off set path=%path%;c:\OpenVPN\bin set HOME=c:\OpenVPN\easy-rsa set KEY_CONFIG=openssl.cnf set KEY_DIR=c:\OpenVPN\ssl set KEY_SIZE=1024 set KEY_COUNTRY=RU set KEY_PROVINCE=Kaluga set KEY_CITY=Kaluga set KEY_ORG=CompKaluga set KEY_EMAIL=decker@сайт А также файл C:\OpenVPN\easy-rsa\openssl.cnf : # # OpenSSL example configuration file. # This is mostly being used for generation of certificate requests. # # This definition stops the following lines choking if HOME isn"t # defined. HOME = . RANDFILE = $ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: #oid_file = $ENV::HOME/.oid oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) [ new_oids ] # We can add new OIDs in here for use by "ca" and "req". # Add a simple OID like this: # testoid1=1.2.3.4 # Or use config file substitution like this: # testoid2=${testoid1}.5.6 #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = $ENV::KEY_DIR # Where everything is kept certs = $dir # Where the issued certs are kept crl_dir = $dir # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir # default place for new certs. certificate = $dir/ca.crt # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/ca.key # The private key RANDFILE = $dir/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs # so this is commented out by default to leave a V1 CRL. # crl_extensions = crl_ext default_days = 3650 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # which md to use. preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that:-) policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # For the "anything" policy # At this point in time, you must list all acceptable "object" # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = $ENV::KEY_SIZE default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret # This sets a mask for permitted string types. There are several options. # default: PrintableString, T61String, BMPString. # pkix: PrintableString, BMPString. # utf8only: only UTF8Strings. # nombstr: PrintableString, T61String (no BMPStrings or UTF8Strings). # MASK:XXXX a literal mask value. # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings # so use this option with caution! string_mask = nombstr # req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = $ENV::KEY_COUNTRY countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = $ENV::KEY_PROVINCE localityName = Locality Name (eg, city) localityName_default = $ENV::KEY_CITY 0.organizationName = Organization Name (eg, company) 0.organizationName_default = $ENV::KEY_ORG # we can do this but it is not needed normally:-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) #organizationalUnitName_default = commonName = Common Name (eg, your name or your server\"s hostname) commonName_max = 64 emailAddress = Email Address emailAddress_default = $ENV::KEY_EMAIL emailAddress_max = 40 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # These extensions are added when "ca" signs a request. # This goes against PKIX guidelines but some CAs do it and some software # requires this to avoid interpreting an end user certificate as a CA. basicConstraints=CA:FALSE # Here are some examples of the usage of nsCertType. If it is omitted # the certificate can be used for anything *except* object signing. # This is OK for an SSL server. # nsCertType = server # For an object signing certificate this would be used. # nsCertType = objsign # For normal client use this is typical # nsCertType = client, email # and for everything including object signing: # nsCertType = client, email, objsign # This is typical in keyUsage for a client certificate. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # This will be displayed in Netscape"s comment listbox. nsComment = "OpenSSL Generated Certificate" # PKIX recommendations harmless if included in all certificates. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always # This stuff is for subjectAltName and issuerAltname. # Import the email address. # subjectAltName=email:copy # Copy subject details # issuerAltName=issuer:copy #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem #nsBaseUrl #nsRevocationUrl #nsRenewalUrl #nsCaPolicyUrl #nsSslServerName [ server ] # JY ADDED -- Make a cert with nsCertType set to "server" basicConstraints=CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always # This is what PKIX recommends but some broken software chokes on critical # extensions. #basicConstraints = critical,CA:true # So we do this instead. basicConstraints = CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Some might want this also # nsCertType = sslCA, emailCA # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy # DER hex encoding of an extension: beware experts only! # obj=DER:02:03 # Where "obj" is a standard or added object # You can even override a supported extension: # basicConstraints= critical, DER:30:03:01:01:FF [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always,issuer:always Поздравляю! Вы только что создали основные конфигурационные файлы вашего сервера. Продолжим его настройку.
  4. Для дальнейшей настройки сервера нам будут необходимы некоторые навыки работы в командной строке. Прежде всего давайте разберемся, как ее запустить? Существует несколько способов, например, нажать Пуск -> Выполнить (или комбинацию кнопок Win+R ) на клавиатуре и в появившемся поле ввести cmd и нажать кнопку Ок. Однако, пользователям Windows 7 / Windows Vista понадобится запустить консоль с правами администратора, для этого проще всего на рабочем столе создать соответствующий ярлык. Щелкаем правой кнопкой мыши по любому пустому месту рабочего стола и выбираем пункт "Создать ярлык", в поле "месторасположение объекта" просто указываем три буквы - cmd и называем ярлык cmd, либо командная строка. Далее, пользователи Windows XP просто запускают его, а пользователи Windows Vista и Windows 7 запускают его от имени администратора, так, как это делалось выше с блокнотом.
  5. Далее последовательно вводим в консоли строки: cd C:\OpenVPN\easy-rsa vars clean-all При этом на экране это должно выглядеть так:
    Далее не закрывая это окно вводим последовательно команды генерации ключей: openvpn --genkey --secret %KEY_DIR%\ta.key build-dh build-ca Последняя команда (build-ca) создаст сертификат и ключ центра сертификации (CA), в процессе, правда, она задаст вам несколько вопросов, ответить на которые надо по-умолчанию нажатием кнопки Enter:
    Теперь создадим ключ сервера: build-key-server server Обратите внимание, вторым аргументом в команде идет имя ключа (server), это же имя вы должны ввести при ответе на вопрос Common Name (eg, your name or your server"s hostname), на остальные вопросы можно ответить по-умолчанию нажатием кнопки Enter. Если вы все сделали правильно команда предложит подписать сертификат и подтвердить запрос, на оба вопроса нужно ответить Y (см. скриншот):
    Если вы все сделали правильно, то картинка у вас будет идентичной скриншоту, а в последних строчках вывода команды будет сообщение об успешном добавлении одной записи в базу данных.
  6. После этого идем в оснастку "Службы и приложения" консоли управления, сделать это можно щелкнув по ярлыку Компьютер (Мой компьютер) правой кнопкой мыши и выбрав пункт меню Управление, либо набрав в консоли команду services.msc , находим там службу "OpenVPN Service" и в меню по правой кнопки мыши выбираем "Пуск". Если до этого вы все сделали правильно, то служба перейдет в состояние "Работает". Теперь можно изменить ей тип запуска на "Авто", вместо "Вручную", который был там по-умолчанию. В результате должно получиться так:
    На этом настройка самого сервера закончена, осталось только сконфигурировать клиентов. Для этого необходимо также выдать им ключи и сертификаты, делается это практически аналогично серверу, только для сервера мы использовали команду build-key-server, а для клиентов будем использовать команду build-key.
  7. Предположим что у нас два клиента, назовем их client1 и client2. Выполним последовательно команды: build-key client1 build-key client2 При этом на вопрос Common Name (eg, your name or your server"s hostname) вы также должны указать имя клиента используемое в команде, т.е. если вы вводили команду build-key client1, то на вопрос Common Name отвечаем client1, если client2, то client2. На остальные вопросы можно ответить нажатием Enter, в конце вас также попросят подписать сертификат и подтвердить запрос, на оба пункта отвечаем утвердительно - Y . Теперь перезапускаем службу OpenVPN для того чтобы изменения вступили в силу, в оснастке управления службами, в меню по правой кнопке мыши "Перезапуск", либо же в консоли последовательно вводим: net stop openvpnservice net start openvpnservice
  8. Теперь если мы зайдем в папку, то увидим там сгенерированные нами файлы ключей и сертификатов:
    Каждому клиенту необходимы будут его файлы: ca.crt .crt .key ta.key Т.е. для клиента 1 мы собираем файлы ca.crt, client1.crt, client1.key и ta.key, для клиента 2 - ca.crt, client2.crt, client2.key и ta.key соответственно и т.п. И тем или иным образом отправляем ему их (имеется ввиду по почте, в архиве с паролем, или на флешке), файлы ключей и сертификатов должны быть переданы по надежным каналам связи и не должны попасть в "третьи руки", т.к. фактически с помощью них клиент может получить доступ в вашу виртуальную подсеть. В следующем разделе мы рассмотрим настройку клиента, при этом будет предполагаться что файлы ключей и сертификатов от вас он уже получил.
  9. Если на ПК используемом в качестве сервера используется firewall / брандмауэр, то необходимо добавить OpenVPN в список исключений. Для встроенного брандмауэра Windows в консоли это можно сделать следующей командой: netsh firewall add allowedprogram program = C:\OpenVPN\bin\openvpn.exe name = "OpenVPN Server" ENABLE scope = ALL profile = ALL

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

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

Полезные ссылки

  • Официальная документация по OpenVPN -
  • OpenVPN man-pages -
  • OpenVPN HOWTO (на русском) - http://lithium.opennet.ru/articles/openvpn/openvpn-howto.html

F.A.Q.

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

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


От автора

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

Настройка OpenVPN сервера // Decker

Примечание

В последнее время к нам на электронную почту приходит большое количество вопросов в стиле "Вопрос по Вашей статье на шаге 5 после команды clean-all в результате у Вас копируется какой-то файл. У меня этого не происходит. команда openvpn --genkey --secret %KEY_DIR%\ta.key создает мне ключ а вот далее build-dh иbuild-ca не дают результата (cmd.exe пишет, что команда не является внутренней или внешней... или исполняемым файлом) файл ca.key не создается. Что я мог сделать не так? ".

Основной смысл которых сводится к вашей же невнимательности. Проблема при запуске clean-all, build-key и других команд заключается в том, что при установке OpenVPN вы не поставили галочки OpenSSL Utilities и OpenVPN RSA Certificate Management Scripts (их нужно ставить обязательно!). Обратите внимание на скриншот с окном выбора компонентов в начале статьи, там эти галочки стоят!