Сети‎ > ‎VPN‎ > ‎

OPEN VPN пример 1

АРХИТЕКТУРА КЛИЕНТ/СЕРВЕР.
При двух OpenVPN узлах (boxes) вы должны один объявить как сервер, а другой как клиент. Любой узел (box) может быть объявлен или сервером или клиентом, но в некоторых случаях только один из узелов может быть сервером, а другой клиентом. Давайте посмотрим когда это происходит.
Перед установлением VPN, клиент должнет создать соединение с сервером по специальному порту, в то время как серверу этого делать не надо. Давайте возьмем пример, где вы на работе и хотите установить VPN с домашним компьютером на прямую подсоединенным к Интернету.
В этом распространеном случае клиент может достигнуть сервера, но не наоборот. Это связано с тем, что клиент находится в локальной сети, и получает доступ в Интернет через прокси или Firewall, которые изменяют IP адрес отправителя. Тем не менее, когда туннель создан, двунаправленная передача внутри него возможна.
openmaniak openvpn tutorial hide nat 

КОНФИГУРАЦИОННЫЙ ФАЙЛ
Создайте файл, где вы будете хранить настройки OpenVPN.  В нашем примере мы назовем файл config.txt и сохраним его в /home/user/ или "C:\Program Files\OpenVPN\config\" директории в зависимости от операционной системы Linux/Unix или Microsoft. Параметры настройки описаны в следующих разделах.

НАЗНАЧЕНИЕ УЗЛА КЛИЕНТОМ/СЕРВЕРОМ

SERVER CLIENT
# SERVER IP ADDRESS
# The Client WAN IP address is not
# needed
# SERVER IP ADDRESS
remote 100.0.0.1
#

РЕЖИМ ТУННЕЛИРОВАНИЯ
Вы можете выбрать между IP (TUN драйвер) или Ethernet (TAP драйвер) туннелем. IP туннелирование называют еще режимом маршрутизации, а Ethernet туннель режимом моста. Предпочтительно использовать IP туннелирование (включен по умолчанию), если вам не нужно передавать Ethernet трафик через туннель (например NetBIOS).

ПРОТОКОЛ И ПОРТ ТУННЕЛЯ
По умолчанию для туннелирования используется порт UDP 1194. Рекомендуется изменять порт только в том случае, если этого требует ваш Firwall. Предпочтительно использовать UDP порты, так как использование TCP может привести к снижению производительности.
Так как большинство приложений используют TCP, тогда при использовании TCP туннеля эти приложения будут создавать TCP через TCP туннель. Такие туннели не рекомендуются использовать, так как это может привести к уменьшению производительности и увеличению времени ответа. Поэтому предпочтительно использовать UDP протокол для создания туннеля.
Прочитайте эту статью чтобы узнать более подробно о проблемах связанных с TCP через TCP туннели.              

SERVER and CLIENT
# TCP OR UDP TUNNEL
# TCP tunnel

proto tcp
# UDP tunnel is recommended
proto udp
# use TCP or UDP but not both
#
# TCP OR UDP PORT

port 1194

НАСТРОЙКИ FIREWALL
Вы должны убедиться, что ваш OpenVPN клиент может установить соединение с сервером.
Ниже приведен пример правила безопасности, которое может быть включено в Firewall, позволяющее клиенту установить связь с сервером. 
 
Из-за легкости конфигурирование OpenVPN, основные проблемы связанные с установлением соединения, возникают из-за ограничений на порты со стороны клиента и/или сервера.

ETHERNET/IP ТУННЕЛЬ.
Вы можете создать или Ethernet (Мост) или IP (Маршрутизация) VPN с помощью соответствующих сетевых драйверов TAP или TUN. Эти драйвера доступны на всех платформах и входят в ядро Linux с версии 2.4. Рекомендуется использовать TUN (выбран по умолчанию), если вам не нужно передавать Ethernet трафик, например NetBIOS. Для проверки загружены драйвера или нет, нужно выполнить команду:
#lsmod | grep tun
tun 12672 1
Заметим что "tun" драйвер включает в себя и TAP драйвер.
Если драйвер не загружен, тогда вы можете загрузить его следующим образом:

#modprobe tun
SERVER and CLIENT
# ETHERNET OR IP TUNNEL
# "dev tun" will create a routed IP tunnel

dev tun
# "dev tap" will create an Ethernet tunnel
dev tap
# use "dev tun" or "dev tap" but not both

АРХИТЕКТУРА БЕЗОПАСНОСТИ OPENVPN

1) Прозрачный туннель.
В таком режиме OpenVPN создает туннель без аутентификации, шифрования и проверки целосности данных. Другими словами, данные передаваемые через этот туннель могут быть легко прочитаны.
SERVER and CLIENT
# Client AND Server configs
# No integritiy (hash function
# algorithm)

auth none
# No encryption (cipher algorithm)
cipher none
2) Разделяемые ключи.
Один и тот же постоянный ключ используется между всеми VPN шлюзами.
SERVER and CLIENT
# PRESHARED KEYS
# Linux system
static /home/user/openvpn/key.txt
# Windows system
static "C:\\Program Files\\OpenVPN\\config\\key.txt"
#openvpn /home/teddybear/openvpn/config.txt
>openvpn "C:\Program Files\OpenVPN\config\config.txt"    

3)  SSL/TLS.
- SSL/TLS сервер или клиент:

SERVER CLIENT
# SSL/TLS SERVER
tls-server
# SSL/TLS CLIENT
tls-client
- Сертификаты и открытые ключи:
Каждый узел должен иметь свои закрытый и открытый ключи, последний должен быть включен в сертификат.
Каждый узел также должен иметь CA (Certification Authority) сертификат.
Смотрите руководство по Инфраструктуре Открытых Ключей для того, чтобы узнать как создавать ключи и сертификаты.
SERVER CLIENT
# CERTIFICATES AND PRIVATE KEY
# Authority certificate (CA public key)

ca ca.key
# Server certificate (server public key)
cert server.crt
# Server private key
key server.key
# CERTIFICATES AND PRIVATE KEY
# Authority certificate (CA public key)

ca ca.key
# Client certificate (client public key)
cert client.crt
# Client private key
key client.key
Настройки Diffie-Hellmann (DH):
Когда OpenVPN узлы уверены в подлинности друг друга, DH может быть использован для создания закрытого разделяемого ключа для хэш функции и алгоритма шифрования.
Комбинируя DH закрытый ключ с отрытым DH ключом другого OpenVPN узла, возможно создать закрытый разделяемых ключ, который будет известен только этим двум OpenVPN узлам.
Подробоно о настройках DH смотрите руководство по SSL.

SERVER CLIENT
# Diffie-Hellman settings
dh dh1024.pem
# No DH setting on the client
#
Этот ключ будет использоваться алгоритмом симметричного шифрования и хэш функцией, как это будет показано в следующих двух параграфах.  

АЛГОРИТМ ШИФРОВАНИЯ

SERVER and CLIENT
# CIPHER ALGORITHM
cipher AES-256-CBC
- Конфиденциальность данных обеспечивается симметричными алгоритмами шифрования 3DES или AES.
По умолчанию используется алгоритм Blowfish. Список доступных алгоритмов можно получить так:

#openvpn --show-ciphers
DES-CBC 64 bit default key (fixed)
IDEA-CBC 128 bit default key (fixed)
RC2-CBC 128 bit default key (variable)
DES-EDE-CBC 128 bit default key (fixed)
DES-EDE3-CBC 192 bit default key (fixed)
DESX-CBC 192 bit default key (fixed)
BF-CBC 128 bit default key (variable)
RC2-40-CBC 40 bit default key (variable)
CAST5-CBC 128 bit default key (variable)
RC5-CBC 128 bit default key (variable)
RC2-64-CBC 64 bit default key (variable)
AES-128-CBC 128 bit default key (fixed)
AES-192-CBC 192 bit default key (fixed)
AES-256-CBC 256 bit default key (fixed)


CBC (Cipher Block Chaining) это режим шифрования используемый блочными алгоритмами шифрования такими как AES, DES или Blowfish. CBC использует маленькие порции данных, вместо обработки всего блока за один раз. Другие доступные режимы шифрования: EBC, OFB, CFB. Рекомендуется использовать CBC.   

АЛГОРИТМЫ ХЭШ ФУНКЦИЙ

- Целостность данных (защита от их изменения) достигается использованием хэш функций. HMAC часто используется в дополнении с SHA1 или MD5.  OpenVPN использует по умолчанию HMAC-SHA1. Список доступных алгоритмов можно получить так:
#openvpn --show-digests
MD2 128 bit digest size
MD5 128 bit digest size
RSA-MD2 128 bit digest size
RSA-MD5 128 bit digest size
SHA 160 bit digest size
RSA-SHA 160 bit digest size
SHA1 160 bit digest size
RSA-SHA1 160 bit digest size
DSA-SHA 160 bit digest size
DSA-SHA1-old 160 bit digest size
MDC2 128 bit digest size
RSA-MDC2 128 bit digest size
DSA-SHA1 160 bit digest size
RSA-SHA1-2 160 bit digest size
DSA 160 bit digest size
RIPEMD160 160 bit digest size
RSA-RIPEMD160 160 bit digest size
MD4 128 bit digest size
RSA-MD4 128 bit digest size


SERVER and CLIENT
# HASH FUNCTION ALGORYTHM
auth MD5
"openvpn --show-tls" отображает алгоритмы шифрование и MAC (Message Authentication Code) используемый SSL/TLS во время установления соединения. Их не нужно путать с шифрованием и MAC используемых для обеспечения безопасности OpenVPN туннеля.

IP АДРЕСА.

Выберите адреса которые вы хотите использовать внутри туннеля.

1) Статические IP адреса:
В режиме маршрутизации выбираются два IP адреса (локальный и удаленный) внутри одной сети с 30 битной маской.
В режиме моста необходимо выбрать IP адрес для локального OpenVPN узла и указать маску сети, включающую IP адрес сервера.

SERVER CLIENT
# IP ADDRESSING
# IP mode example:
# Server IP: 10.8.0.1 ; Client IP: 10.8.0.2

ifconfig 10.8.0.1 10.8.0.2
# Bridge mode example
# Server IP: 10.8.0.1

ifconfig 10.8.0.1 255.255.255.0
# Use bridged or routed settings but not
# both
# Client and Server must use the same
# tunnel mode
# IP ADDRESSING
# IP mode example:
# Server IP: 10.8.0.1 ; Client IP: 10.8.0.2

ifconfig 10.8.0.2 10.8.0.1
# Bridge mode example
# Client IP: 10.8.0.2

ifconfig 10.8.0.2 255.255.255.0
# Use bridged or routed settings but not
# both
# Client and Server must use the same
# tunnel mode

2) Динамические IP адреса.
В этом случае сервер имеет статический IP адрес и раздает IP адреса клиентам как DHCP сервер.

SERVER CLIENT
# DHCP SETTINGS
# DHCP range
# Server will take the first IP address
server 10.8.0.0 255.255.255.0
# CLIENT ACCEPTS SERVER OPTIONS
# The client should accept options pushed
# by the server

pull

ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ.

OpenVPN имеет много дополнительных параметров настроек, которые можно посмотреть в документации по OpenVPN.  

НАСТРОЙКИ ПРОТОКОЛИРОВАНИЯ (логирования).
Подробность ведения протокола конфигурируется от 0 (минимум) до 15 (максимум). Для обычных условий достаточно будет 2-4. 
# Уровень подробности.
# 0 -- только фатальные ошибки.
# 1 -- нефатальные сетевые ошибки.
# 3 -- средний уровень.
# 9 -- подробный.

SERVER and CLIENT
# LOG VERBOSITY
# log verbosity setting, 0=min 15=max

verb 3


OPENVPN ПОЛЬЗОВАТЕЛЬ.
По причинам безопасности, всегда лучше запускать приложения без привилегий администратора. Вы можете ограничить привилегии OpenVPN демона после его инициализации, указав ему работать под пользователем "nobody". Используя "chroot" возможно также ограничить доступ к файлам после инициализации.  Заметим что эти настройки доступны только для Linux/Unix систем, но не Windows. Еще одна причина для использования ПО с открытым исходным кодом как Linux OS ...  

SERVER and CLIENT
# OPENVPN SECURITY - Linux only
# OpenVPN User
user nobody
# After initialization, OpenVPN can only
# access a directory
# The directory can be empty
# OpenVPN process limitation

chroot /etc/openvpn/
 
ЗАПУСК OPENVPN.

Используете следующий синтаксис для запуска OpenVPN.

#openvpn path-to-config-file
Ниже два примера для Linux и Windows, где "config.txt" - конфигурационный файл:

#openvpn /home/teddybear/openvpn/config.txt
>openvpn "C:\Program Files\OpenVPN\config\config.txt"

ПРОВЕРКА ПРОТОКОЛА (лога)
Протокол должен заканчиваться следующей строкой: 
Initialization Sequence Completed
Это означает, что OpenVPN туннель создан успешно.

ПРОВЕРКА СОЕДИНЕНИЯ

Стандартная утилита для проверки IP соединений - ping.  VPN узел должен пинговать туннельный IP адрес другого узла.
В нашем случае, мы пингуем клиентский туннельный IP адрес из сервера:
ping 10.8.0.2

ПРОВЕРКА OPENVPN.

Вскоре ожидается ...

openmaniak openvpn square little blue Некоторые параметры настройки OpenVPN по умолчанию:

Параметр: Значение:
Порт отправителя и получателя: UDP 1194
Режим туннелирования: IP туннель
Симметричное шифрование:Blowfish - CBC (128 bits)
Хэш-функция: HMAC - SHA1 (160 bits)
Сжатие: НЕТ
Tunnel MTU: 1500 байт
Подробность протокола: 0


Comments