Yvision.kz
kk
Разное
Разное
399 773 постов42 подписчика
Всяко-разно
3
09:30, 07 ноября 2011

Установка OpenVPN на CentOS 6.5 x32

Blog post image

В этой короткой записке описан процесс установки и настройки пакета OpenVPN.

Пакет OpenVPN позволяет:

1. Cвязать ваши удаленные локальные сети разных офисов в одну сеть

2. Дает возможность удаленным клиентам (например у себя дома) работать с серверами компании которые находятся в офисе на другом конце города по зашифрованному каналу.

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

Поднимай VPN канал....

Помимо связи между клиентом и сервером, можно организовать связь сервер <-> сервер.

Настройка программного VPN сервера не занимает много времени, возьмите любой продукт, такой как Kerio Connect или MS ISA  и посмотрите документацию по настройке VPN связи. Сам раздел описывающий настройку помещается на одну страницу или на две.

Все действия выполняются под учетной записью "root".

 

Краткое содержание записки:

1. Подключение репозитория с пакетом OpenVPN

2. Установка OpenVPN на сервер

3. Подготавливаем каталоги для конфигурационных файлов

4. Создаем серверный ключ

5. Настраиваем сервер OpenVPN

6. Создаем клиентский ключ

7. Запускаем демон OpenVPN на сервере

8. Настройка клиентского подключения на Windows XP

9. Заключение

10. Часто встречающиеся ошибки и их решения при настройке OpenVPN.

 

Исходные данные:

Адрес виртуальной сети:  192.168.100.0 / 255.255.255.0

Адрес локальной сети (офис компании): 10.168.50.0 / 255.255.255.0

 

Blog post image

 

1. Подключение репозитория с пакетом OpenVPN

Добавляем необходимый репозиторий:

# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

 

2. Установка OpenVPN на сервер

Устанавливаем Openvpn и ставим его в автозагрузку:

# yum install openvpn easy-rsa -y
# chkconfig openvpn on
 

3. Подготавливаем каталоги для конфигурационных файлов

Затем подготавливаем папки для конфигурационных файлов:

# mkdir /var/log/openvpn

# chmod 770 /var/log/openvpn

# mkdir /etc/openvpn/ccd

# mkdir /etc/openvpn/easy-rsa

# cp -Rf /usr/share/easy-rsa/2.*/* /etc/openvpn/easy-rsa

# cd /etc/openvpn/easy-rsa

# chmod 770 *

# mkdir /etc/openvpn/keys

# touch /etc/openvpn/keys/index.txt

# echo "01" > /etc/openvpn/keys/serial

 

в файле /etc/openvpn/easy-rsa/vars заменяем строку:

# vi /etc/openvpn/easy-rsa/vars

export KEY_DIR=...

на

export KEY_DIR="/etc/openvpn/keys"

4. Создаем серверный ключ

Генерируем серверный сертификат:

# cd /etc/openvpn/easy-rsa

# ln -s openssl-1.0.0.cnf openssl.cnf

# . ./vars

# ./clean-all

# ./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) [US]:

State or Province Name (full name) [CA]:

Locality Name (eg, city) [SanFrancisco]:

Organization Name (eg, company) [Fort-Funston]:

Organizational Unit Name (eg, section) [MyOrganizationalUnit]:

Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:

Name [EasyRSA]:

Email Address [me@myhost.mydomain]:

# ./build-key-server vpnserver

Generating a 2048 bit RSA private key

......................................................+++

...............+++

writing new private key to 'vpnserver.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) [US]:

State or Province Name (full name) [CA]:

Locality Name (eg, city) [SanFrancisco]:

Organization Name (eg, company) [Fort-Funston]:

Organizational Unit Name (eg, section) [MyOrganizationalUnit]:

Common Name (eg, your name or your server's hostname) [vpnserver]:

Name [EasyRSA]:

Email Address [me@myhost.mydomain]:

 

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-1.0.0.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName           :PRINTABLE:'US'

stateOrProvinceName   :PRINTABLE:'CA'

localityName          :PRINTABLE:'SanFrancisco'

organizationName      :PRINTABLE:'Fort-Funston'

organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'

commonName            :PRINTABLE:'vpnserver'

name                  :PRINTABLE:'EasyRSA'

emailAddress          :IA5STRING:'me@myhost.mydomain'

Certificate is to be certified until Aug  2 06:56:00 2024 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-dh

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

Можно все оставить по умолчанию, самое главное не пропустите два предложения по подписыванию сертификатов (ключей), надо ответить ДА:

Certificate is to be certified until Aug  2 06:56:00 2024 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

 

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

Включаем форвардинг:

# vi /etc/sysctl.conf

inet.ipv4.ip_forward = 1

# sysctl -p

5. Настраиваем сервер OpenVPN

Серверный конфигурационный файл /etc/openvpn/server.conf

port 1194
proto tcp
dev tun
tls-server
server 192.168.100.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
topology subnet
status openvpn-status.log
client-config-dir /etc/openvpn/ccd
push "route 10.168.50.0 255.255.255.0"
duplicate-cn
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpnserver.crt
key /etc/openvpn/keys/vpnserver.key
dh /etc/openvpn/keys/dh2048.pem

В строке push "route 10.168.50.0 255.255.255.0" ставите адрес своей под сети где установлен

VPN сервер (локальная сеть офиса компании), в противном случаем клиенты не смогут

увидеть удаленные компьютеры. У меня это сеть имеет адрес 10.168.50.0 255.255.255.0.

Вот более полный конфиг:

port 1194

proto udp

dev tun

tls-server

server 192.168.100.0 255.255.255.0

topology subnet

persist-key

persist-tun

status openvpn-status.log

#ifconfig-pool 192.168.100.1 192.168.100.254 255.255.255.0

client-config-dir /etc/openvpn/ccd

push "route 10.168.50.0 255.255.255.0"

#duplicate-cn

client-to-client

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/vpnserver.crt

key /etc/openvpn/keys/vpnserver.key

dh /etc/openvpn/keys/dh2048.pem

##Tuning Speed##

#cipher none

tcp-nodelay

#comp-lzo

fast-io

tun-mtu 1500

mssfix

fragment 1200

keepalive 15 120

 

6. Создаем клиентский ключ

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

Пропишем клиента в /etc/openvpn/ccd

# touch /etc/openvpn/ccd/client01

# echo "ifconfig-push 192.168.100.101 255.255.255.0" > /etc/openvpn/ccd/client01

# cd /etc/openvpn/easy-rsa

# ./build-key client01

 

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

 

Команда "ifconfig-push 192.168.100.101 255.255.255.0" присваивает статический IP адрес удаленному клиенту (машине).

Аналогичным образом добавляйте клиентов прописывая статический IP адрес, например "ifconfig-push 192.168.100.102 255.255.255.0" или "ifconfig-push 192.168.100.109 255.255.255.0". Если требуется создать еще одно подключение (клиента) к VPN серверу, повторяем генерацию ключей которая выше, столько раз - сколько у нас клиентов.

Например вот таким образом:

# touch /etc/openvpn/ccd/client999

# cd /etc/openvpn/easy-rsa

# source ./vars

# echo "ifconfig-push 192.168.100.250 255.255.255.0" > /etc/openvpn/ccd/client0999

# cd /etc/openvpn/easy-rsa

# ./build-key client0999

 

7. Запускаем демон OpenVPN на сервере

Запустим демон:

# service openvpn start

 

Настройка серверной части выполнена, осталось настроить удаленный клиентский

компьютер (WinXP) на подключение с нашим сервером.

 

8. Настройка клиентского подключения на Windows XP

Для этого сделайте следующее:

1. Скачайте OpenVPN клиент с официального сайта:

http://swupdate.openvpn.org/community/releases/openvpn-2.2.2-install.exe

http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe

Установите его.

2. Создайте папку на рабочем столе, дайте ей имя, например "Connect"
3. Потом положите в эту папку файлы ca.crt, client01.crt, key client01.key

которые лежат в директории вашего сервера /etc/openvpn/keys/
4. Создайте текстовый файл с именем "connect.ovpn" в папке "Connect" которая на рабочем столе...
5. Далее откройте этот файл в блокноте, и вставьте в него следующий текст:

client
tls-client
verb 3
dev tun
proto tcp
remote 111.111.111.111 1194
nobind
persist-key
persist-tun
ca ca.crt
cert client01.crt
key client01.key

В строка remote 111.111.111.111 1194 меняем IP адрес на свой, порт оставляем по умолчанию.

Вот более полный конфигурационный файл:

client
tls-client
verb 3
dev tun
proto udp
remote 111.111.111.111 1194
nobind
persist-key
persist-tun
ca ca1.crt
cert client03.crt
key client03.key
##Tuning Speed##
#cipher none
#comp-lzo
tun-mtu 1500
mssfix
fragment 1200

Сохраните файл.

6. После щелкните на этом файле правой кнопкой мыши, при этом выйдет

контекстное меню "Start OVPN on this config file", шелкние эту надпись.
7. Все, теперь вы соединены с удаленным офисом !!!

8. Проверьте доступность удаленных хостов командой ping <ip адрес>, если все хорошо переходим к следующему шагу

9. Осталось проверить терминальное подключение к серверу, для этого запустите "Подключение к удаленному рабочему столу" которое находится в меню Пуск -> Все программы -> Стандартные ->  Подключение к удаленному рабочему столу
10. В открывшемся окне, введите IP адрес сервера
11. Если все прошло хорошо, поздравляю!

Для Windows Vista, Windows 7 запускать клиента надо с админскими правами через батник:

cd c:\vpn\
"c:\program files\openvpn\bin\openvpn.exe" c:\vpn\client1.ovpn
pause

Если Вам надоело постоянно кликать по файлу "connect.ovpn", можно процесс подключения автоматизировать, для этого просто положите содержимое папки "Connect" в каталог "C:\Program Files (x86)\OpenVPN\config". После чего соединение по VPN будет происходить автоматически при загрузке службы "openvpn". Кстати в оснастке "Службы" не забудьте включить авто запуск сервиса "openvpn".

 

9. Заключение

Как видите настройка шифрованного канала к удаленной сети офиса делается просто. Работает такая система уже не один год и практически не сбоит. Был один глюк при обновлении пакетов, но после перенастройки все опять заработало в штатном режиме. Обычно настройка VPN сервера проста, что в Windows, что в Linux\Unix. Начинающие бояться этого грозного слова VPN, хотя на самом деле как в поговорке: Глаза боятся, а руки делают!

Не бойтесь  и у Вас все получится...

 

Часто встречающиеся ошибки и их решения при настройке OpenVPN.

Проблема №1: No route to host

Решение:

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

Поменяйте маску в свойствах адаптера если вы соединяетесь из под компьютера в локальной сети. Если соединение проходит через Интернет, звоните провайдеру...

 

Проблема №2: Connection refused

Решение:

2.1. Появляется тогда, когда отключен адаптер TAP-Win32 в сетевых устройствах.

Включите адаптер на компьютере клиента

Меню ПУСК -> Сетевые адаптеры -> Подключение по локальной сети Tap-Win32 V9

2.2. Не верно установлено системное время

Введите текущее время, если требуется поменять батарейку на мат. плате, поменяйте ее.

2.3. Служба Openvpn не запущена или не слушается порт (по умолчанию 1194)

В файле /etc/openvpn/*.conf  не указан порт 1194:

port 1194

Еще бывает что задан другой порт, например 5666. Запомните этот порт, он вам понадобится для настройки клиентской утилиты.

2.4. Не создан серверный файл настроек /etc/openvpn/*.conf или он имеет пустое содержимое

2.5. Не создан каталог /var/log/openvpn/ и файл в нем /var/log/openvpn/openvpn-status.log

mkdir /var/log/openvpn

touch /var/log/openvpn/openvpn-status.log

chmod -R 777 /var/log/openvpn/

Проблема №3: TCP/UDP: Socket bind failed on local address 111.111.111.11:5002: Cannot assign requested address

Решение:

Вероятно указанный порт занят другой программой, укажите другой порт.

Самое действенное, это убрать строчку в конфиг файле /etc/openvpn/your_vpn.conf:

local 111.111.111.111

 

Проблема №4:

Появляется сообщение:

VERIFY ERROR: depth=1, error=certificate is not yet val id

или VERIFY ERROR: depth=1, error=self signed certificate in  certificate chain

Решение:

4.1. Не верно установлено системное время

Укажите правильное время.

4.2. Действенный способ обхода, сегенерировать ключи на другом компьютере, потом скопировать их в папку вашего сервера /etc/openvpn/keys/*

4.3. Поменять значение переменной в файле /etc/openvpn/easy-rsa/keys/openssl.cnf на :

[ CA_default ]

dir        = /etc/openvpn/keys

 

Проблема №5: Как сгенерировать новый клиентский ключ?

Решение:

Допустим мы хотим сделать ключ для пятого клиента VPN - client05

# cd /etc/openvpn/easy-rsa/

# source ./vars

# ./build-key client05

# touch /etc/openvpn/ccd/client05
# echo "ifconfig-push 192.168.100.105 192.168.100.106" > /etc/openvpn/ccd/client05

Здесь:

192.168.100.105 - статический IP адрес удаленной клиентской машины

192.168.100.106 - адрес шлюза IP адрес шлюза виртуальной сети

Итого, если вам нужно генерировать дополнительные ключи, повторите операции выше, но только с измененным названием клиента и его IP адреса. Меняются только переменные "clientXX" и IP адрес "192.168.100.1XX". За место символов XX ставится инкрементное цифровое значение.

Если хотите чтобы IP адрес присваивался автоматически, не создавайте файлов в папке /etc/openvpn/ccd и не вводите команду "echo".

Проблема 6: При генерации клиентского ключа появляется ошибка

failed to update database

TXT_DB

error number 2

Решение:

5.1. В файле /etc/openvpn/keys/index.txt.attr поменять значение переменной на:

unique_subject = no
5.2. При генерации забить другие данные игнорировав по умолчанию предлагаемые:
The Subject's Distinguished Name is as follows
countryNamePRINTABLE'KZ'
stateOrProvinceNamePRINTABLE'ALM'
localityNamePRINTABLE'111'
organizationNamePRINTABLE'Almaty'
organizationalUnitNamePRINTABLE'Almaty'
commonNamePRINTABLE'client02'
namePRINTABLE'Almas'
emailAddressIA5STRINGaaa@kozel.kz'
Certificate is to be certified until Jul  7 105745 2023 GMT (3650 days)
Sign the certificate? [y/n]y

Проблема 7: Как настроить серверный фаервол чтобы можно было соединятся по OpenVPN?

Решение:

Добавляем в скрипт с правилами iptables следующие строчки:

iptables -A INPUT -i eth0 -p tcp --dport 1194 -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 1194 -j ACCEPT

Проблема 8: Как избавится от ошибки:

**************************************************************

No /etc/openvpn/easy-rsa/openssl.cnf file could be found

Further invocations will fail

**************************************************************

Решение:

cp -R /usr/share/doc/openvpn-2.2.2/easy-rsa/2.0 /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

ln -s openssl-1.0.0.cnf openssl.cnf

Проблема 8: Как можно увеличит скорость соединения:

Открываем файл /etc/openvpn/server.conf и добавляем строчки:

При UDP соединение стабильно, пинг фактически соответствует реальному, но скорость на половину и даже больше - ниже!

proto udp

dev tun

# Выбор криптографического сертификата

cipher BF-CBC

# Сжатие можно выключить

comp-lzo

# Параметр fast-io ускоряет UDP соединение

fast-io

# Размер MTU

tun-mtu 1500

mssfix 1400

fragment 1200

tcp-nodelay

При TCP соединении пинги при копировании растут, но скорость по выше, больше средней.

dev  tun

proto tcp

cipher BF-CBC

tcp-nodelay

comp-lzo

fast-io

tun-mtu 1500

mssfix

 

keepalive 15 120

 

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

Эти же настройки за исключением fast-io, должны быть на клиентском конфиге.

И самое главное - у меня если сменить например порт с 1194 на 443 или 124, скорость соединения становится близка к реальной))). Пинги при смене порта стали маленькие, вывод: провайдер режет скорость на других портах. Используйте другие порты отличные от стандартного 1194, проверяйте скорость на разных портах.

Бывает так что надо менять "dev tun" на "dev tap" и ставить "proto tcp".

_________________________________________________________________________________

Если вы установили TraffPro (Linbilling), то надо в traffpro_rule.cfg прописать следующие правила iptables:

iptables -I FORWARD 1 -i eth1 -o tun0 -j ACCEPT
iptables -I FORWARD 1 -o eth1 -i tun0 -j ACCEPT

Адаптер eth1 смотрит в локальную сеть.

И открыть порт RDP - 3389 на клиенте в настройках TraffPro...



3