В этой короткой записке описан процесс установки и настройки пакета 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
1. Подключение репозитория с пакетом OpenVPN
Добавляем необходимый репозиторий:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
2. Установка OpenVPN на сервер
Устанавливаем Openvpn и ставим его в автозагрузку:
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-tuntopology 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]:y1 out of 1 certificate requests certified, commit? [y/n]ySign 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 адрес на свой, порт оставляем по умолчанию.
Вот более полный конфигурационный файл:
clienttls-clientverb 3dev tunproto udpremote 111.111.111.111 1194nobindpersist-keypersist-tunca ca1.crtcert client03.crtkey client03.key##Tuning Speed###cipher none#comp-lzotun-mtu 1500mssfixfragment 1200
Сохраните файл.
6. После щелкните на этом файле правой кнопкой мыши, при этом выйдет
контекстное меню "Start OVPN on this config file", шелкние эту надпись.
7. Все, теперь вы соединены с удаленным офисом !!!
8. Проверьте доступность удаленных хостов командой ping <ip адрес>, если все хорошо переходим к следующему шагу
9. Осталось проверить терминальное подключение к серверу, для этого запустите "Подключение к удаленному рабочему столу" которое находится в меню Пуск -> Все программы -> Стандартные -> Подключение к удаленному рабочему столу
10. В открывшемся окне, введите IP адрес сервера
11. Если все прошло хорошо, поздравляю!
Для Windows Vista, Windows 7 запускать клиента надо с админскими правами через батник:
"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
Проблема №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 = no5.2. При генерации забить другие данные игнорировав по умолчанию предлагаемые:
The Subject's Distinguished Name is as follows countryName PRINTABLE 'KZ' stateOrProvinceName PRINTABLE 'ALM' localityName PRINTABLE '111' organizationName PRINTABLE 'Almaty' organizationalUnitName PRINTABLE 'Almaty' commonName PRINTABLE 'client02' name PRINTABLE 'Almas' emailAddress IA5STRING aaa@kozel.kz' Certificate is to be certified until Jul 7 10 57 45 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 и добавляем строчки:
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...