Инсталляция сервера OpenVPN

Инсталляция необходимых пакетов

root@vserver.rasuli.info:~# apt-get install openvpn make
Внимание: Для инсталляции пакетов я временно раскомментировал путь до основного репозитория Debian в /etc/apt/source.lists!

Подготовка скриптов для создания сертификатов и генерации ключей

С пакетом OpenVPN идут в комплекте простые скрипты для создания сертификатов и генерации ключей. Они размещаются в каталоге /usr/share/doc/openvpn/examples/easy-rsa/2.0. Для использования скриптов необходимо их немного подготовить. Как минимум, необходимо сформировать их копию в альтернативном месте, поскольку нам придется вносить изменения в эти скрипты, и крайне не хотелось бы утратить эти изменения при установке очередного обновления безопасности. Устанавливаем скрипты в /etc/openvpn/easy-rsa:
root@vserver.rasuli.info:~# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
root@vserver.rasuli.info:/usr/share/doc/openvpn/examples/easy-rsa/2.0# gzip -d openssl-0.9.6.cnf.gz
root@vserver.rasuli.info:/usr/share/doc/openvpn/examples/easy-rsa/2.0# gzip -d README.gz
root@vserver.rasuli.info:/usr/share/doc/openvpn/examples/easy-rsa/2.0# make install DESTDIR=/etc/openvpn/easy-rsa

Далее в файле /etc/openvpn/easy-rsa/vars устанавливаем ряд переменных, которые задают некоторые параметры сертификатов по умолчанию.
root@vserver.rasuli.info:/usr/share/doc/openvpn/examples/easy-rsa/2.0# cd /etc/openvpn/easy-rsa/
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# vi ./vars
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="RU"
export KEY_PROVINCE="MSK"
export KEY_CITY="Moscow"
export KEY_ORG="Mind Market, Inc."
export KEY_EMAIL="srasuli@gmail.com"
:wq

Подготовка корневого хранилища сертификатов

Эта операция выполняется один раз за все время существования сервера. В качестве основных параметров сертификата стоят значения, ранее указанные нами в vars, поэтому при запросе просто подтверждаем их Etnter'ом:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# . ./vars
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# ./clean-all
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# ./build-ca
Generating a 2048 bit RSA private key
........+++
..........................................................................................................................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [MSK]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Mind Market, Inc.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [Mind Market, Inc. CA]:
Email Address [srasuli@gmail.com]:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa#

Генерация ключа и сертификата сервера

Эта операция выполняется один раз за все время существования сервера. В качестве основных параметров сертификата стоят значения, ранее указанные нами в vars, поэтому при запросе просто подтверждаем их Etnter'ом:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# ./build-key-server server
Generating a 2048 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) [MSK]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Mind Market, Inc.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Email Address [srasuli@gmail.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:'MSK'
localityName          :PRINTABLE:'Moscow'
organizationName      :PRINTABLE:'Mind Market, Inc.'
commonName            :PRINTABLE:'server'
emailAddress          :IA5STRING:'srasuli@gmail.com'
Certificate is to be certified until Mar  7 00:23:18 2021 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
root@vserver.rasuli.info:/etc/openvpn/easy-rsa#

Генерация параметров Diffle Hellman для сервера

Эта операция выполняется один раз за все время существования сервера. Операция достаточно длительная, может занимать несколько минут:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# ./build-dh

Генерация статического ключа для генерации дополнительных сигнатур в SSL/TLS

Эта операция выполняется один раз за все время существования сервера:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# openvpn --genkey --secret keys/ta.key

Подготовка конфигурации сервера

В конфигурационном файле указываются параметры работы сервера:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# vi /etc/openvpn/server.conf
server 172.16.0.0 255.255.255.0
proto udp
port 1194
dev tun0
persist-key
persist-tun
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ipp
status /etc/openvpn/openvpn-status
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
comp-lzo
#tls-server
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
keepalive 30 120
log-append /var/log/openvpn.log
verb 3
mute 50

Старт сервера

Теперь сервер готов к запуску:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# /etc/init.d/openvpn start
Starting virtual private network daemon: server.
root@vserver.rasuli.info:/etc/openvpn/easy-rsa#
Убедиться в работе сервера можно:
  • по наличию в системе интерфейса tun0 (ifconfig tun0)
  • по наличию в списке процессов процесса openvpn (ps xa | grep openvpn)

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

Настройка фаервола состоит из трех шагов

Добавляем определения интерфейсов

root@vserver.rasuli.info:/etc/openvpn/easy-rsa# cd /etc/flex-fw
root@vserver.rasuli.info:/etc/flex-fw# vi defines/interfaces/ifVpn
ifVpn=tun0
ipVpn=172.16.0.1
netVpn=172.16.0.0/24
:wq

Добавляем описание нового сервиса

root@vserver.rasuli.info:/etc/flex-fw# vi services/openvpn
# Allow connections from OpenVPN clients
allow input in-if $ifWan proto udp dport 1194

# Allow any exchange with host system
allow input in-if $ifVpn
allow output out-if $ifVpn

# Allow any exchange with virtual systems
allow forward in-if $ifVpn out-if vmbr0
allow forward in-if vmbr0 out-if $ifVpn

# end of file
:wq
В этом сервисе описываются правила, разрешающие подключения как до самого OpenVPN-сервера, так и до виртуальных серверов.

Добавляем симлинки для автозагрузки

root@vserver.rasuli.info:/etc/flex-fw# cd rc.d/
root@vserver.rasuli.info:/etc/flex-fw/rc.d# ln -s ../services/openvpn S100.openvpn
root@vserver.rasuli.info:/etc/flex-fw/rc.d# ln -s ../services/openvpn K899.openvpn

Рестартуем фаервол

root@vserver.rasuli.info:/etc/flex-fw/rc.d# /etc/init.d/flex-fw reload

Подготовка каталога конфигураций клиентов

Каталог конфигурации клиентов содержит параметры конфигурации, специфичные для конкретных клиентов, и применяемые на сервере в момент подключения клиента:
root@vserver.rasuli.info:/etc/flex-fw/rc.d# cd /etc/openvpn/easy-rsa
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# mkdir /etc/openvpn/ccd

Подготовка ключей клиента

Эта процедура выполняется для каждого подключаемого клиента. Отличие заключается только в имени клиента, которое должно быть уникальным (здесь использовано имя shavkat). Все основные параметры сертификата используются из указанных нами ранее в vars:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# . ./vars
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# ./build-key shavkat
Generating a 2048 bit RSA private key
.+++
.......................................................................................+++
writing new private key to 'shavkat.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) [MSK]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [Mind Market, Inc.]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [shavkat]:
Email Address [srasuli@gmail.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:'MSK'
localityName          :PRINTABLE:'Moscow'
organizationName      :PRINTABLE:'Mind Market, Inc.'
commonName            :PRINTABLE:'shavkat'
emailAddress          :IA5STRING:'srasuli@gmail.com'
Certificate is to be certified until Mar  7 01:00:59 2021 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
root@vserver.rasuli.info:/etc/openvpn/easy-rsa#

Подготовка серверной части конфигурации клиента

Эта процедура выполняется для каждого подключаемого клиента. Имя конфигурационного файла клиента на сервере должно совпадать с его именем, используемым при генерации ключа. В нашем примере использована команда ifconfug-push, задающая фиксированный IP-адрес для подключаемого клиента, и push для передачи команд на удаленный компьютер клиента (мы передаем команды маршрутизации, позволяющие "завернуть" трафик до наших серверов через шифрованный туннель).:
root@vserver.rasuli.info:/etc/openvpn/easy-rsa# vi /etc/openvpn/ccd/shavkat
ifconfig-push 172.16.0.6 172.16.0.5
# Route to www.rasuli.info
push "route 46.4.69.184 255.255.255.255"
# Route to news.rasuli.info
push "route 46.4.76.6 255.255.255.255"
Вновь подключаемым клиентам лучше всего явно назначать уникальные IP-адреса, может потом пригодится. Если этого не сделать (опустить параметр ifconfig-push), то клиенту выделится свободный IP-адрес из пула адресов, указанного в параметре server конфигурационного файла сервера. Пр явном назначении следует учитывать один момент - при использовании tun-интерфейсов адреса должны быть назначены для каждого клиента парами по два адреса по схеме:
  • 6 - 5
  • 10 - 9
  • 14 -13
  • 18 - 17
  • и т. д.

Подготовка клиентской части конфигурации клиента

В клиентскую часть конфигурации клиента входит:
  • файл секретного ключа клиента shavkat.key. Получен на этапе генерации ключа клиента, лежит в /etc/openvpn/easy-rsa/keys
  • файл сертификата клиента shavkat.crt. Получен на этапе генерации ключа клиента, лежит в /etc/openvpn/easy-rsa/keys
  • файл сертификата корневого хранилища ca.crt. Получен на этапе подготовки корневого хранилища сертификата, лежит в /etc/openvpn/easy-rsa/keys
  • файл статического ключа ta.key. так-же получен на соответствующем этапе настройки сервера, лежит в /etc/openvpn/easy-rsa/keys
  • файл конфигурации для клиента OpenVPN shavkat.ovpn. Файл имеет расширение .ovpn - стандартное для клиента OpenVPN под Windows. Для клиента под Linux конфигурационный файл клиент обычно использует нормальное расширение .conf.
Последний файл имеет следующее содержимое:
client
dev tun
proto udp
remote 46.4.69.167 1194
nobind
persist-key
persist-tun
ca ca.crt
cert shavkat.crt
key shavkat.key
tls-auth ta.key 1
comp-lzo
verb 3
У других клиентов он будет подобным, необходимо только изменить имя файлов ключа и сертификата клиента. Важно помнить, что файлы с расширением .key необходимо передавать клиенту по ЗАЩИЩЕННЫМ каналам, что-бы исключить их перехват третьими лицами. Остальные файлы не несут секретной информации.

Установка клиента OpenVPN

На самом деле у OpenVPN нет ярко выраженной клиентской и серверной части. Что в одном, что в другом случае используется один и тот-же исполняемый модуль, функционал которого определяется содержимым конфигурационного файла, с которым он запускается. Скачать OpenVPN для Windows можно по этой ссылке: http://openvpn.net/index.php/open-source/downloads.html . Берите последний стабильный (на момент написания статьи это был 2.1.4). При инсталляции оставляйте все опции такими как они есть, и все.

Подключение клиента

Скопируйте все файлы, входящие в конфигурацию клиента, в защищенный каталог на вашем компьютере. Щелкните правой кнопкой мыши на файле конфигурации и в контекстном меню выберете пункт "Start OpenVPN on this config file". Появится окно, отображающее ход подключения OpenVPN, дождитесь появления надписи "Initialization Sequence Completed".

-- VitalyDruzhinin - 09 Mar 2011
Topic revision: r1 - 2013-08-29, VitalyDruzhinin
 

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback