Содержание |
Дописать...
Для работы программы потребуется установка библиотеки lzo.
Сначала качаем последние версии rpm пакетов: lzo-devel-2.00-1.2.el4.test.i386.rpm и lzo-2.00-1.2.el4.test.i386.rpm, с сайта http://dag.wieers.com/packages/lzo .
Устанавливаем полученные пакеты:
rpm -ihv lzo-2.00-1.2.el4.test.i386.rpm rpm -ihv lzo-devel-2.00-1.2.el4.test.i386.rpm
Качаем исходные коды OpenVPN последней версии с сайта http://openvpn.net/download.html#stable.
Собираем пакет
rpmbuild -tb openvpn-2.0.9.tar.gz
Устанавливаем пакет:
rpm -ihv /usr/src/redhat/RPMS/i386/openvpn-2.0.9-1.i386.rpm
Подробное описание Создание ключей и сертификатов. Если вам лениво разбираться с программой openssl, можно воспользоваться оболочкой TinyCA2.
Если у Вас нет необходимости создавать свой центр сертификации, и вы будете генереривать ключи только для OpenVPN, можно воспользоваться набором скриптов Easy RSA, который поставляются в комплекте с OpenVPN. Они находятся в директории с документацией: /usr/share/doc/openvpn-версия/easy-rsa.
В первую очередь следует перейти в эту директорию.
# cd /usr/share/doc/openvpn-2.0.5/easy-rsa #
Теперь отредактируйте файл vars.
export D=`pwd` export KEY_CONFIG=$D/openssl.cnf export KEY_DIR=/etc/openvpn/keys echo NOTE: when you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export KEY_SIZE=1024 export KEY_COUNTRY=RU export KEY_PROVINCE=RU export KEY_CITY=MOSCOW export KEY_ORG="Artur Kryukov" export KEY_EMAIL="artur@kryukov.ru"
Этот файл предназначен для установок переменных среды окружения, перед генерацией ключей. Запустите его при помощи точки:
# . vars NOTE: when you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys #
Теперь запустите программу очистки (на всякий пожарный).
# ./clean-all #
Осталось запустить процесс генерации ключей и сертификата СА.
# ./build-ca 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) [RU]: Locality Name (eg, city) [MOSCOW]: Organization Name (eg, company) [Artur Kryukov]: Organizational Unit Name (eg, section) []:Personal Server Common Name (eg, your name or your server's hostname) []:kryukov.ru Email Address [artur@kryukov.ru]: #
Некоторые поля заполняются автоматически, ведь не зря мы изменяли содержимое файла vars. Хотя ответы по умолчанию можно было поместить в конфигурационный файл программы openssh — openssl.cnf.
В директории /etc/openvpn появилась директория keys, в которой находятся файлы сертификата и ключ.
Теперь следует создать ключ и сертификат для сервера.
# ./build-key-server artur.kryukov.ru Generating a 1024 bit RSA private key ...++++++ ..++++++ writing new private key to 'artur.kryukov.ru.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) [Artur Kryukov]: Organizational Unit Name (eg, section) []:Personal Server Common Name (eg, your name or your server's hostname) []:artur.kryukov.ru Email Address [artur@kryukov.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []: Using configuration from /usr/share/doc/openvpn-2.0.5/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:'Artur Kryukov' organizationalUnitName:PRINTABLE:'Personal Server' commonName :PRINTABLE:'kryukov.ru' emailAddress :IA5STRING:'artur@kryukov.ru' Certificate is to be certified until Dec 11 14:31:19 2015 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 #
Сгенериуем сертификаты и ключи для клиентских машин. Я предполагаю заходить на сервер со своего ноутбука и с домашней машины, поэтому буду создавать ключи и сертификаты для двух машин.
# ./build-key master.kryukov.ru Generating a 1024 bit RSA private key .......++++++ .............................................++++++ writing new private key to 'master.kryukov.ru.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) [Artur Kryukov]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:master.kryukov.ru Email Address [artur@kryukov.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []: Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf DEBUG[load_index]: unique_subject = "yes" 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:'Artur Kryukov' commonName :PRINTABLE:'master.kryukov.ru' emailAddress :IA5STRING:'artur@kryukov.ru' Certificate is to be certified until Dec 11 14:39:59 2015 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 #
И для домашней машины.
# ./build-key home.kryukov.ru Generating a 1024 bit RSA private key ..............................................++++++ .......................................++++++ writing new private key to 'home.kryukov.ru.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) [Artur Kryukov]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:home.kryukov.ru Email Address [artur@kryukov.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:password An optional company name []: Using configuration from /usr/share/doc/openvpn-2.0.5/easy-rsa/openssl.cnf DEBUG[load_index]: unique_subject = "yes" 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:'Artur Kryukov' commonName :PRINTABLE:'home.kryukov.ru' emailAddress :IA5STRING:'artur@kryukov.ru' Certificate is to be certified until Dec 11 14:42:06 2015 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 #
В заключении следует создать Diffie Hellman параметры.
# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ..+.......................................................................+...+ .....+.....+................................................................... ............................+..................+.+...........+................. ...+.....++*++*++* #
Посмотрим содержимое директории /etc/openvpn/keys:
# ls /etc/openvpn/keys/ 01.pem ca.key index.txt.old 02.pem dh1024.pem master.kryukov.ru.crt 03.pem home.kryukov.ru.crt master.kryukov.ru.csr 04.pem home.kryukov.ru.csr master.kryukov.ru.key artur.kryukov.ru.crt home.kryukov.ru.key serial artur.kryukov.ru.csr index.txt serial.old artur.kryukov.ru.key index.txt.attr ca.crt index.txt.attr.old #
Теперь необходимо разобраться какие файлы куда помещать.
| Файл | Машина | Назначение | Доступ |
| ca.crt | Сервер и клиенты | Сертификат корневого СА | Публичный |
| ca.key | Только на сервере | Необходим для подписи других сертификатов | Секретный |
| 1024.pem | Только на сервере | Diffie Hellman параметры | Публичный |
| artur.kryukov.ru.crt | Только на сервере | Сертификат сервера | Публичный |
| artur.kryukov.ru.key | Только на сервере | Ключ сервера | Секретный |
| home.kryukov.ru.crt | Только на клиенте | Сертификат клиента | Публичный |
| home.kryukov.ru.key | Только на клиенте | Ключ клиента | Секретный |
Файлы *.csr можно удалить.
Скопируйте все необходимые файлы на клиенты в директорию /etc/openvpn/keys. Для клиента master.kryukov.ru, я скопировал три файла: ca.crt, master.kryukov.ru.crt и master.kryukov.ru.key.
На всякий пожарный проверьте действительность создаваемых сертификатов.
openssl verify -CApath /etc/openvpn/keys -CAfile ca.crt -purpose sslclient home.kryukov.ru.crt
Для сервера следует изменить значение поля -purpose на sslserver.
Для конфигурации сервера необходимо создать несколько конфигурационных файлов в директории /etc/openvpn. На каждого клиента или клиентскую сеть требуется создавать отдельный конфигурационный файл с расширением *.conf. За основу возьмем файл пример из документации — tls-office.conf. Скопируем этот файл в директорию /etc/openvpn и назовем master.server.conf.
Определяем устройство, которое будет использоваться openvpn:
dev tun
Указываем IP адрес на нашей стороне и на стороне сервера:
ifconfig 192.168.240.1 192.168.240.2
Разрешаем использование TLS:
tls-server
Заставляем использовать компрессию передаваемых данных:
comp-lzo
Определяем log-файл:
log-append /var/log/openvpn.log
Определяем режим работы:
daemon
Указываем используемые ключи и сертификаты:
dh keys/dh1024.pem ca keys/ca.crt cert keys/artur.kryukov.ru.crt key keys/artur.kryukov.ru.key
Определяем порт, на котором будет слушать запросы openvpn:
port 1194
В целях безопасности понижаем права с которыми будет выполняться программа до прав пользователя и группы nobody:
user nobody group nobody
Определяем, что openvpn будет передавать системе журнальной регистрации.
verb 3
В результате конфигурационный файл сервера будет выглядеть так:
dev tun ifconfig 192.168.240.1 192.168.240.2 tls-server comp-lzo log-append /var/log/openvpn.log daemon dh keys/dh1024.pem ca keys/ca.crt cert keys/artur.kryukov.ru.crt key keys/artur.kryukov.ru.key port 1194 user nobody group nobody verb 3
На стороне клиента тоже необходимо создать конфигурационный файл Назовем его client.conf. Определим используемое устройство:
dev tun
Укажем порт на сервере:
port 1194
Определим IP адреса, которые будут присвоены локальной машине и серверу:
ifconfig 192.168.240.2 192.168.240.1
Заставляем использовать компрессию передаваемых данных:
comp-lzo
Разрешим использование TLS на клиенте:
tls-client
Скажем, что сертификат машины, к которой мы будем подключаться — это сертификат сервера.
ns-cert-type server
Обязательно определим реальный IP адрес машины сервера:
remote 195.2.80.69
Укажем используемые ключи и сертификаты:
ca keys/ca.crt cert keys/master.kryukov.ru.crt key keys/master.kryukov.ru.key
Понижаем права с которыми будет выполняться программа до прав пользователя и группы nobody:
user nobody group nobody
Определяем, что openvpn будет передавать системе журнальной регистрации.
verb 3
В результате конфигурационный файл клиента будет выглядеть следующим образом:
dev tun port 1194 ifconfig 192.168.240.2 192.168.240.1 tls-client ns-cert-type server remote 195.2.80.69 ca keys/ca.crt cert keys/master.kryukov.ru.crt key keys/master.kryukov.ru.key user nobody group nobody verb 3
Если через некоторое время соединение пропадает (работа через PPP или NAT), добавьте следующие параметры:
ping 15 ping-resatrt 45 ping-timer-rem persist-tun persist-key
После создания конфигурационных файлов на сервере и, если это надо – на клиенте, необходимо открыть в firewall хождение для udp пакетов на порт 1194. Кроме этого необходимо открыть пакеты приходящие с интерфейса tun. В примере показано разрешение хождения всех пакетов, это конечно далеко не самый лучший вариант. Желательно писать отдельные правила для каждого случая.
iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT
В случае, когда к одному серверу будет подключаться несколько клиентов рекомендуется использовать другую конфигурацию. Для работы VPN мы будем пользоваться устройствами tap, позволяющими эмулировать сеть на уровне Ethernet.
В первую очередь указываем, что будет использоваться устройство tap0:
dev tap0
Затем говорим, что openvpn будет работать в режиме сервера, а не в режиме по умолчанию (точка-точка)
mode server
Заставляем использовать компрессию передаваемых данных:
comp-lzo
Определяем режим работы:
daemon
Определяем log-файл:
log-append /var/log/openvpn.log
Затем выделяем пул IP адресов, которые будут выдаваться клиентам.
ifconfig-pool 192.168.240.2 192.168.240.12
При помощи параметра ifconfig определяем IP адрес сервера и маску подсети.
ifconfig 192.168.240.1 255.255.255.0
Если вы хотите, что бы за клиентами закреплялись постоянные адреса, добавьте следующий параметр:
ifconfig-pool-persist ipp.txt
Он определяет файл, в котором будет сохраняться информация о машине и ее IP. Файл содержит строки: Имя машины,IP адрес. Во время работы, сервер с периодичностью в 600 секунд обновляет содержимое этого файла. При включении, сервер читает содержимое файла.
Еще один полезный параметр:
status /var/log/openvpn-status.log
В этом файле сохраняется информация о текущих соединениях сервера.
Остальные параметры, такие же как и в настройке в режиме точка-точка. В результате конфигурационный файл сервера будет выглядеть так:
dev tap0 proto udp mode server comp-lzo log-append /var/log/openvpn.log daemon ifconfig-pool 192.168.240.2 192.168.240.12 ifconfig 192.168.240.1 255.255.255.0 tls-server dh keys/dh1024.pem ca keys/ca.crt cert keys/kryukov.ru.crt key keys/kryukov.ru.key port 1194 user nobody group nobody persist-tun persist-key verb 0
Определяем используемое устройство:
dev tap
Указываем реальный IP адрес сервера, куда будет подключаться клиент:
remote 195.2.80.69
Говорим, что мы будем работать в режиме клиента:
client
Все остальные параметры как и в примере конфигурации клиента в режиме точка-точка. В результат конфигурационный файл клиента будет выглядеть так:
dev tap proto udp remote 195.2.80.69 port 1194 client tls-client comp-lzo ns-cert-type server ca keys/ca.crt cert keys/home.kryukov.ru.crt key keys/home.kryukov.ru.key user nobody group nobody ping 15 ping-restart 120 ping-timer-rem persist-key persist-tun verb 0
Клиент для Windows берем тут: http://openvpn.net/index.php/downloads.html. Если вы используете Vista, берите клиент 2.1 самой последней версии. Несмотря на то, что на момент написания этого раздел он был в состоянии rc (release candidate), клиент работает великолепно.
Скачайте файлы сертификата (win.st1.kryukov.biz.pem), ключа клиентской машины (win.st1.kryukov.biz.key) и публичного ключа сервера сертификации (/etc/pki/CA/CA.crt). Сделать это можно например, при помощи программы Winscp. Поместите их в директорию C:\Program Files\OpenVPN\config.
После установки клиента, перейдите в директорию C:\Program Files\OpenVPN\config и создайте текстовый конфигурационный файл client.ovpn следующего содержания:
dev tap proto udp remote st1.kryukov.biz 1194 client nobind tls-client comp-lzo ns-cert-type server ca "C:\\Program Files\\OpenVPN\\config\\CA.crt" cert "C:\\Program Files\\OpenVPN\\config\\win.st1.kryukov.biz.pem" key "C:\\Program Files\\OpenVPN\\config\\win.st1.kryukov.biz.key" ping 15 ping-restart 120 ping-timer-rem persist-key persist-tun verb 1
В составе пакета находится программа OpenVPN GUI. Она позволяет управлять соединениями, доступна через стандартное меню "Пуск".
Обратите внимание на то, что в конфигурационном файле Windows клиента, параметр verb равен 1. Программа OpenVPN GUI по отладочной информации, выдаваемой клиентом понимает, было ли подключение к серверу. И сможет выдавать корректную информацию об установленном соединении.
Если вам необходимо автоматическое подключение к VPN серверу, можно запустить сервис OpenVPN. Посмотрите список доступных сервисов на вашей машине и выберите автоматическое включение сервиса при старте.
Windows реализация может работать и в качестве сервера.
После создания конфигурационных файлов на сервере и, если это необходимо – на клиенте, необходимо открыть в firewall хождение для udp пакетов на порт 1194. Кроме этого необходимо открыть пакеты приходящие с интерфейса tap.
iptables -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tap+ -j ACCEPT
Все конфигурации, которые были рассмотрены выше, показывали как соединить один компьютер с другим, через VPN. Достаточно часто необходимо дать доступ с компьютера или из сети, стоящих за VPN, ко внутренней сети.
192.168.2/24 --- 192.168.2.1|192.168.240.2----> internet <----192.168.240.1|192.168.1.1 --- 192.168.1/24
Сеть 192.168.240/24 - это сеть которая была настроена в предыдущих примерах
Для решения этой задачи надо использовать параметр push, который позволяет передавать различные конфигурационные параметры openvpn на другой сервер openvpn. Передаваемых параметров достаточно много, их можно посмотреть в man по openvpn.
Мы воспользуемся параметром route. Для доступа к сети 192.168.1/24 на сервере 192.168.2.1 необходимо прописать маршрут к этой сети через роутер 192.168.240.1. Для этого в конфигурационном файле /etc/openvpn.conf на сервере 192.168.1.1 необходимо добавить строку:
push "route 192.168.1.0 255.255.255.0 192.168.240.1"
| Внимание! | Обратите внимание на то, что push передает не командную строку, которую следует выполнить на стороне противоположного сервера, а параметр программы openvpn, который необходимо применить. |
К сожалению, на сервере 192.168.2.1 команда push нам не поможет. Она работает только на VPN сервере. Т.е. только с VPN сервер может передавать команды, которые будут выполняться на клиенте. Поэтому в конфигурационном файле сервера придется писать команду route для каждой сети, подключенной к клиенту.
route 192.168.2.0 255.255.255.0 192.168.240.2
В результате, соответствующие маршруты будут добавлены в таблицы маршрутизации серверов, при запуске или перезапуске OpenVPN
Так же, что бы все работало нормально, вам придется позаботиться, что бы VPN клиенту при каждом соединении выдавался один и тот же IP адрес. Это можно сделать несколькими способами. Если учитывать конфигурацию сервера, приведенную выше. Мы добавим в конфигурационный файл сервера всего один параметр: --ifconfig-pool-persist При помощи этого параметра мы задаем имя файла в котором будет хранится соответствие VPN клиента и IP адреса, который ему присваивается. Этот файл сервер будет заполнять сам.
--ifconfig-pool-persist /etc/openvpn/iplist
Имя файла может быть любым.
В итоге, необходимые маршруты будут автоматически добавляться на клиенте. На сервере маршрут будет присутствовать всегда. Если соединение будет разорвано, и затем восстановлено, маршруты восстановятся автоматически.
Не забудьте в firewall разрешить хождение необходимых пакетов из одной сети в другую.
Поскольку в Slackware Linux при старте системы не предусмотрен старт OpenVPN. Если необходим автоматический старт при запуске системы придется вручную добавить в скрипт /etc/rc.d/rc.M следующие строки:
# Open VPN
if [ -x /etc/rc.d/rc.openvpn ]; then
/etc/rc.d/rc.openvpn start
fi
Их необходимо написать сразу после запуска сети:
if [ -x /etc/rc.d/rc.inet1 ]; then . /etc/rc.d/rc.inet1 fi
Файл /etc/rc.d/rc.openvpn должен быть исполняемым. Пример стартового скрипта можно найти в документации к OpenVPN. Но на всякий пожарный, ниже показан файл, который я использую на своей машине.
#!/bin/sh
#
# openvpn This shell script takes care of starting and stopping
# openvpn on RedHat or other chkconfig-based system.
#
# description: OpenVPN is a robust and highly flexible tunneling application that
# uses all of the encryption, authentication, and certification features
# of the OpenSSL library to securely tunnel IP networks over a single
# UDP port.
#
# Contributed to the OpenVPN project by
# Douglas Keller <doug@voidstar.dyndns.org>
# 2002.05.15
#
# To install:
# copy this file to /etc/rc.d/rc.openvpn
# and add something like this to your file
# /etc/rc.d/rc.M or /etc/rc.d/rc.local
# # Start the OpenVPN daemon:
# if [ -x /etc/rc.d/rc.openvpn ]; then
# . /etc/rc.d/rc.openvpn start
# fi
# make .conf or .sh files in /etc/openvpn (see below)
# To uninstall:
# run: chmod -x /etc/rc.d/rc.openvpn
#
# Author's Notes:
#
# I have created an /etc/init.d init script and enhanced openvpn.spec to
# automatically register the init script. Once the RPM is installed you
# can start and stop OpenVPN with "service openvpn start" and "service
# openvpn stop".
#
# The init script does the following:
#
# - Starts an openvpn process for each .conf file it finds in
# /etc/openvpn.
#
# - If /etc/openvpn/xxx.sh exists for a xxx.conf file then it executes
# it before starting openvpn (useful for doing openvpn --mktun...).
#
# - In addition to start/stop you can do:
#
# /etc/rc.d/rc.openvpn reload - SIGHUP
# /etc/rc.d/rc.openvpn reopen - SIGUSR1
# /etc/rc.d/rc.openvpn status - SIGUSR2
#
# Modifications:
#
# 2003.05.02
# * Changed == to = for sh compliance (Bishop Clark).
# * If condrestart|reload|reopen|status, check that we were
# actually started (James Yonan).
# * Added lock, piddir, and work variables (James Yonan).
# * If start is attempted twice, without an intervening stop, or
# if start is attempted when previous start was not properly
# shut down, then kill any previously started processes, before
# commencing new start operation (James Yonan).
# * Do a better job of flagging errors on start, and properly
# returning success or failure status to caller (James Yonan).
#
# 2005.04.04
# * Added openvpn-startup and openvpn-shutdown script calls
# (James Yonan).
#
# 2005.12.13
# * Asssssign openvpn variable directly for package for Slackware Linux
#
# Location of openvpn binary
openvpn="/usr/sbin/openvpn"
# Lockfile
lock="/var/lock/subsys/openvpn"
# PID directory
piddir="/var/run/openvpn"
# Our working directory
work=/etc/openvpn
# Check that binary exists
if ! [ -f $openvpn ]
then
echo "openvpn binary not found"
exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n $"Starting openvpn: "
/sbin/modprobe tun >/dev/null 2>&1
# From a security perspective, I think it makes
# sense to remove this, and have users who need
# it explictly enable in their --up scripts or
# firewall setups.
#echo 1 > /proc/sys/net/ipv4/ip_forward
# Run startup script, if defined
if [ -f $work/openvpn-startup ]; then
$work/openvpn-startup
fi
if [ ! -d $piddir ]; then
mkdir $piddir
fi
if [ -f $lock ]; then
# we were not shut down correctly
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
rm -f $lock
sleep 2
fi
rm -f $piddir/*.pid
cd $work
# Start every .conf in $work and run .sh if exists
errors=0
successes=0
for c in `/bin/ls *.conf 2>/dev/null`; do
bn=${c%%.conf}
if [ -f "$bn.sh" ]; then
. $bn.sh
fi
rm -f $piddir/$bn.pid
$openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd $work
if [ $? = 0 ]; then
successes=1
else
errors=1
fi
done
if [ $errors = 1 ]; then
echo faliure
else
echo success
fi
if [ $successes = 1 ]; then
touch $lock
fi
;;
stop)
echo -n $"Shutting down openvpn: "
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
# Run shutdown script, if defined
if [ -f $work/openvpn-shutdown ]; then
$work/openvpn-shutdown
fi
echo success
rm -f $lock
;;
restart)
$0 stop
sleep 2
$0 start
;;
reload)
if [ -f $lock ]; then
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill -HUP `cat $pidf` >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
reopen)
if [ -f $lock ]; then
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill -USR1 `cat $pidf` >/dev/null 2>&1
fi
done
else
echo "openvpn: service not started"
exit 1
fi
;;
condrestart)
if [ -f $lock ]; then
$0 stop
# avoid race
sleep 2
$0 start
fi
;;
status)
if [ -f $lock ]; then
for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill -USR2 `cat $pidf` >/dev/null 2>&1
fi
done
echo "Status written to /var/log/messages"
else
echo "openvpn: service not started"
exit 1
fi
;;
*)
echo "Usage: openvpn {start|stop|restart|condrestart|reload|reopen|status}"
exit 1
;;
esac
exit 0
Для запуска «в ручную», в SuSE Linux: rcopenvpn start, в Slackware Linux: /etc/rc.d/rc.openvpn start.
На клиенте проверим, был ли поднят сетевой интерфейс. В случае режима Point-to-Point это будет устройство tun0, во втором случае – tap0:
# ifconfig tap0
tap0 Link encap:Ethernet HWaddr 1A:05:1E:59:61:35
inet addr:192.168.240.4 Bcast:192.168.240.255 Mask:255.255.255.0
inet6 addr: fe80::1805:1eff:fe59:6135/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1275 errors:0 dropped:0 overruns:0 frame:0
TX packets:1424 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:702933 (686.4 Kb) TX bytes:576292 (562.7 Kb)
#
Далее при помощи ping проверьте соединение:
# ping -c4 192.168.240.1 PING 192.168.240.1 (192.168.240.1) 56(84) bytes of data. 64 bytes from 192.168.240.1: icmp_seq=1 ttl=64 time=1029 ms 64 bytes from 192.168.240.1: icmp_seq=2 ttl=64 time=17.3 ms 64 bytes from 192.168.240.1: icmp_seq=3 ttl=64 time=18.4 ms 64 bytes from 192.168.240.1: icmp_seq=4 ttl=64 time=14.6 ms --- 192.168.240.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3020ms rtt min/avg/max/mdev = 14.664/269.939/1029.259/438.395 ms, pipe 2 #