Установка и настройка OpenVPN

Больше
7 года 7 мес. назад - 7 года 7 мес. назад #11 от PNV
COM_KUNENA_MESSAGE_CREATED_NEW
Недавно мне понадобилось предоставить доступ интернет-клиенту в корпоративную внутреннюю сеть (интранет). Т.к. граничный маршрутизатор/firewall в конторе обычный D-Link DIR-300, то и речи быть не могло об организации на нём VPN-сервера :). Поэтому решено было организовать VPN-сервер под Linux (ОС CentOS), который находится в корпоративной сети конторы. На сервере поднимаем сервис OpenVPN.

Подключение построено по следующей схеме:




Задача: организовать VPN-туннель через интернет между сервером находящимся за NAT и клиентом, который тоже находится где-то в интернет за NAT.

(Все действия выполняются под пользователем root)

Для решения задачи необходимо настроить серверную (на сервере) и клиентские части (в данном случае на компьютерах пользователей) сервиса OpenVPN.



Серверная часть

1. Скачиваем дистрибутив OpenVPN по ссылке swupdate.openvpn.net/community/releases/openvpn-2.1.4.tar.gz :

wget swupdate.openvpn.net/community/releases/openvpn-2.1.4.tar.gz

и распаковываем архив:

tar -xf openvpn-2.1.4.tar.gz

2. Скачиваем обязательную библиотеку компрессии LZO, необходимую для сжатия потока данных по ссылке www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz :

wget www.oberhumer.com/opensource/lzo/download/lzo-2.04.tar.gz

и распаковываем архив:

tar -xf openvpn-2.1.4.tar.gz

3. Также необходимо установить библиотеку gcc.i386
Устанавливаем её из репозитория:

yum install gcc.i386

Возможно данная библиотека уже может быть установлена, что можно проверить командой yum list |grep gcc.i386. Должно быть что-то вроде:

gcc.i386 4.1.2-48.el5 installed
libgcc.i386 4.1.2-48.el5 installed

Если же данная библиотека не установлена и вы попытаетесь установить непосредственно OpenVPN, то при компиляции выйдет ошибка:

configure: error: no acceptable C compiler found in $PATH

4. Устанавливаем LZO из распакованного архива (см. п.2):

cd .../lzo-2.04
./configure
make
make install


5. Устанавливаем непосредственно сам OpenVPN из распакованной папки (см. п.1):

cd .../openvpn-2.1.4
./configure
make
make install


6. Создаём для удобства все необходимые папки для OpenVPN (при установке данные папки автоматически не создаются) и копируем туда необходимые файлы из распакованного архива (см. п.1):

mkdir /etc/openvpn
cp .../openvpn-2.1.4/easy-rsa/2.0/* /etc/openvpn

mkdir /etc/openvpn/keys - создаём папку для сертификатов и ключей

7. По желанию редактируем файл /etc/openvpn/vars в соответствии с необходимыми параметрами, чтобы каждый раз при генерации ключей не вводить снова одни и те же параметры:

пример файла vars:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]



8. Экпортируем переменные из файла vars и выполняем удаление всех возможно уже существующих ключей:

cd /etc/openvpn
source ./vars
./clean-all


9. Генерируем закрытый ключ и сертификат сервера сертификации (СA) или назовём по-другому - Удостоверяющего центра, на основе которого будут созданы все остальные ключи (ключ и сертификат для VPN-сервера и ключи и сертификаты для VPN-клиентов)(т.е. используется обычный механизм PKI - public key infrastructure).

./build-ca
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


10. Генерируем закрытый ключ и сертификат для сервера:

./build-key-server name


ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


11. Генерируем закрытый ключ и сертификат для клиента:

./build-key client1

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


12. Генерируем 1024-битный ключ по алгоритму Диффи-Хэллмана, который используется в механизме аутентификации ключей при установлении VPN-туннеля. Данный ключ остаётся на сервере.
Алгори́тм Ди́ффи — Хе́ллмана (англ. Diffie-Hellman, DH) — алгоритм, позволяющий двум сторонам получить общий секретный ключ, используя незащищенный от прослушивания, но защищённый от подмены, канал связи.

./build-dh

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


13. (Не обязательно) Генерируем симметричный TLS-ключ для предварительной защиты канала, еще до установленимя VPN-туннеля. Данный ключ является симметричным и должен находится как на сервере, так и на клиенте. Генерируем в папке /etc/openvpn/keys/

openvpn --genkey --secret ./ta.key


Все созданные ключи, сертификаты и запросы серверной части помещаем в папку /etc/openvpn/keys для удобства (в случае если они были сгенерированы в другом месте). Клиентские ключи и сертификаты передаются соответственно защищенным способом на клиентские машины. При этом для каждого сертификата существует свой закрытый ключ и файл запроса на сертификат:

*.key - закрытый ключ;
*.csr - запрос на сертификат;
*.crt - сертификат;



В идеале клиентские закрытые ключи не должны генерироваться на сервере и затем передаваться клиенту, а должны генерироваться на самом клиенте при помощи какого-либо установленного криптопровайдера (в качестве хранилища закрытого ключа используется например реестр, smart-карта или flash-накопитель). Затем создаётся файл запроса сертификата созданный на основе сгенерированного закрытого ключа, который уже отправляется по сети на сервер сертификации (Удостоверяющий центр), где в ответ по сети передаётся сгенерированный сертификат. (т.к. файл запроса сертификата и сам сертификат шифрования сами по себе не составляют ценности без закрытого ключа, то их можно передавать по незащищённым каналам связи).


14. Копируем пример файла конфигурации VPN-сервера server.conf из разархивированной папки (см п.1) в боевую папку /etc/openvpn

cp ...../openvpn-2.1.4/sample-config-files/server.conf /etc/openvpn/server.conf

и редактируем необходимые параметры:

vi /etc/openvpn/server.conf

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


15. Копируем примеры скриптов для запуска и остановки OpenVPN из разархивированной папки (см п.1) в боевую папку /etc/openvpn и правим их в соответствии со своими предпочтениями:

cp ...../openvpn-2.1.4/sample-config-files/openvpn-startup.sh /etc/openvpn

Пример скрипта openvpn-startup.sh:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


cp ...../openvpn-2.1.4/sample-config-files/openvpn-stutdown.sh /etc/openvpn


Пример скрипта openvpn-shutdown.sh:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


16. Запускаем OpenVPN-сервер:

/etc/openvpn/openvpn-startup.sh

и проверяем запустился ли сервис:

netstat -luntp |grep openvp

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


На этом этапе серверная часть закончена и готова к установлению туннеля.


Клиентская часть

Т.к. в моём случае на клиенте (компьютере пользователя) стоит ОС Windows, то рассмотрим пример настройки OpenVPN-клиента именно для Windows.

1. Скачиваем дистрибутив OpenVPN для Windows по ссылке swupdate.openvpn.net/community/releases/...pn-2.1.4-install.exe и устанавливаем с опциями "по умолчанию".
При установке дистрибутива система установит также драйвер виртуального VPN-интерфейса:





2. Копируем пример файла конфигурации клиента client.ovpn из папки c:\Program Files\OpenVPN\sample-config в c:\Program Files\OpenVPN\config и редактируем его:


ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3. Копируем в папку c:\Program Files\OpenVPN\config\ клиентский ключ client1.key и сертификат client1.crt, сертификат СA.crt (сертификат сервера сертификации), и симметричный ключ ta.key.

4. Запускаем GUI интерфейс из меню "Пуск", либо из c:\Program Files\OpenVPN\bin\openvpn-gui-1.0.3.exe и нажимаем Connect из-под иконки OpenVPN в трее.

Для установления туннеля из командной строки запускаем:

c:\Program Files\OpenVPN\bin\openvpnserv.exe /start

Для автоматического установления VPN-туннеля при загрузке ОС включаем OpenVPN Service в режим автоматического запуска:








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

Наслаждаемся результатом!!! :)



Дополнения.

Для просмотра VPN-соединений на сервере в реальном времени можно зайти по telnet на сервер по порту tcp 8329, если соответствующая строка была прописана в файле server.conf

management 0.0.0.0 8329

и в режиме командной строки смотреть сессии клиентов и если нужно, удалять сессии:

telnet X.X.X.X 8329



Кроме этого можно скачать графическую оболочку для мониторинга VPN-соединений под названием OpenVPN Control по ссылке sourceforge.net/projects/openvpn-control...staller.exe/download

Скриншоты программы OpenVPN Control:




Last edit: 7 года 7 мес. назад by PNV.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 7 мес. назад #12 от PNV
COM_KUNENA_MESSAGE_REPLIED_NEW
Если при установлении VPN-туннеля в логах клиента появляется следующая ошибка:

Fri Mar 11 16:23:10 2011 VERIFY ERROR: depth=1, error=self signed certificate in certificate chain: /C=RU/ST=SPB/L=SPB/O=Organization/OU=IT/CN=Asterisk/name=Asterisk/emailAddress=myemail@domain.com
Fri Mar 11 16:23:10 2011 TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Fri Mar 11 16:23:10 2011 TLS Error: TLS object -> incoming plaintext read error
Fri Mar 11 16:23:10 2011 TLS Error: TLS handshake failed
Fri Mar 11 16:23:10 2011 TCP/UDP: Closing socket


то проблема с некорректно созданными сертификатами клиента/сервера.
Необходимо снова пересоздать сертификаты.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 года 7 мес. назад - 7 года 7 мес. назад #13 от TOLLIFi
COM_KUNENA_MESSAGE_REPLIED_NEW
Вот перевод на русский язык параметров файла конфигурации OpenVPN (server.conf / client.conf). За точность перевода тех или иных параметров не отвечаю - перевел, как смог:)

--- TUNNEL OPTIONS >>>
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


--- CLIENT-MODE OPTIONS >>>
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


--- DATA CHANNEL ENCRYPTION OPTIONS >>>
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


--- TLS MODE OPTIONS >>>
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

IT и Телеком: IP-телефония, интернет-технологии, программирование, web-сервисы.
Last edit: 7 года 7 мес. назад by TOLLIFi.
Спасибо сказали: PNV

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум