HOWTO Создание шифрованных туннелей с помощью OpenVPN
Материал из Gentoo Linux Wiki
Пожалуйста приведите эту статью в соответствиe с wiki разметкой, и затем удалите {{Wikify}} из текста статьи
Содержание |
[править] Введение
[править] Зачем это нужно
Часто в работе администраторов появляются такие задачи как соединение нескольких офисов, расположенных в разных частях города (области,страны,мира), в единую логическую сеть. Если все точки подключены к одному провайдеру,то можно арендовать отдельный VLAN,но если провайдеры разные или точки находятся в разных городах,приходится искать другие варианты. И тут на помощь приходит OpenVPN
[править] Что такое OpenVPN
OpenVPN - это реализация технологии VPN( Virtual Private Network - Виртуальная Частная Сеть),которая позволяет строить одни логические сети поверх других. Другими словами создав VPN, мы сделаем свою сеть,доступ к которой будет только у тех кому будет явно разрешено. Все данные будут защищены с помощью SSL.
[править] Какие задачи можно решить
OpenVPN просто незаменим для решения следующих задач:
- соединение нескольких удаленных офисов в единую сеть с единой адресацией ( bridging ) или просто связью
- обеспечение шифрованного канала для безопасной передачи данных
- обеспечение доступа на сервер не имеющего внешнего IP
[править] Установка и настройка
[править] Установка
Для Gentoo Linux достаточно одной команды emerge openvpn.Emerge любезно скачает самые свежие исходники поставит их для нас.Можно приступать к решению непосредственно самих задач.
[править] Конфигурация
Все конфигурационные файлы openvpn хранятся в каталоге /etc/openvpn.Можно создавать несколько соединений,при этом создавая каталоги вида /etc/openvpn/connectN/.Обязательным условие является наличие файла /etc/openvpn/connectN/local.conf.Скрипт инициализации /etc/init.d/openvpn проверяет наличие файла,и запускает туннель.
[править] Примеры конфигураций
[править] Туннель между двумя компьютерами
[править] Сервер с множественными подключениями
Итак нам нужен сервер который будет принимать множество клиентов,и обслуживать виртуальную сеть.Для этого мы будем использовать SSL/TLS ( прочитать об этом можно например тут [1] ). Для начала нам необходимо создать необходимые ключи для безопасного обмена данными.Для этого есть специальная утилита 'pkitool'. Она лежит в каталоге /usr/share/openvpn/easy-rsa/.Переходим в этот каталог командой cd /usr/share/openvpn/easy-rsa/. Открываем файл /usr/share/openvpn/easy-rsa/vars в любом текстовом редакторе. Там необходимо указать переменную KEY_DIR и указать информацию необходимую для сертификатов.Пример файла vars:
export EASY_RSA="`pwd`" export KEY_CONFIG="$EASY_RSA/openssl.cnf" export KEY_DIR="/etc/openvpn/vserver/keys" echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export KEY_SIZE=1024 export CA_EXPIRE=3650 export KEY_EXPIRE=3650 export KEY_COUNTRY="RU" export KEY_PROVINCE="XX" export KEY_CITY="MyTown" export KEY_ORG="MyOrganization" export KEY_EMAIL="my@mail.jp"
В данном случае конфигурация соединения хранится в /etc/openvpn/vserver/.Последние 5 переменных необходимо заменить на свои.
ВАЖНО: В названиях не должно быть пробелов
После редактирования загружаем переменные командой source ./vars.Генерируем необходимые ключи:
- ./build-dh - генерация ключа Диффи-Хеллмана [2] .Этот процесс может ненадолго затянуться.
- ./pkitool --initca - Certificate Authority для сервера
- ./pkitool --server hydra - генерируем сертификат X.509 [3] для сервера hydra
- ./pkitool enjoy - генерируем сертификат X.509 для клиента enjoy
Сертифкаты созданы и лежат в каталоге /etc/openvpn/vserver/keys.Теперь открываем конфигурационный файл сервера /etc/openvpn/vserver/local.conf и пишем туда следующее:
#режим сервера mode server #использовать TLS-аутентифкацию tls-server #прослушивание по tcp-протоколу proto tcp-server #использовать tap устройство dev tap #порт 5555 port 5555 #скрипт который будет выполнятся при поднятии впн туннеля up /etc/openvpn/vserver/upscript.sh #режим демона. daemon #TLS-ключ tls-auth /etc/openvpn/vserver/keys/auth.key 0 #указываем файд с CA ca /etc/openvpn/vserver/keys/ca.crt #сертификат сервера cert /etc/openvpn/vserver/keys/hydra.crt #указываем ключ сертификата key /etc/openvpn/vserver/keys/hydra.key #файл Диффи-Хеллмана dh /etc/openvpn/vserver/keys/dh1024.pem #указываем IP сервера и маску виртуальной сети ifconfig 10.10.0.1 255.255.255.0 #описываем наш vpn пул. #IP-адрес через push "ifconfig адрес маска" ifconfig-pool 10.10.0.2 10.10.0.250 #разрешаем дублирование сертифкатов. #если упустить эту опцию то на каждого клиента надо #генерировать отдельный сертификат с помощью pkitool duplicate-cn #включаем режим отладки verb 3 #алгоритм шифрования.Список алгоритмов можно получить #с помощью команды openvpn --show-ciphers cipher DES-EDE3-CBC #не перечитывать ключ при сбросе соединения persist-key #лог файл log-append /var/log/openvpn.log persist-tun #включаем сжатие comp-lzo}}
/etc/openvpn/vserver/local.conf.client
#работа в режиме клиента с TLS-аутентифкацией tls-client #протокол tcp proto tcp-client #удаленный сервер remote server.domain.ru #устройство dev tap port 5555 cd /etc/openvpn/vserver #принимать команды push от сервера.то есть позволять переконфигурировать клиента pull #файл для авторизации tls-auth /etc/openvpn/vserver/keys/auth.key 1 #указываем файл Диффи-Хеллмана dh /etc/openvpn/vserver/keys/dh1024.pem #указываем файл CA ca /etc/openvpn/vserver/keys/ca.crt #указываем файл с сертификатом клиента cert /etc/openvpn/vserver/keys/enjoy.crt #указываем файл с ключем клиента key /etc/openvpn/vserver/keys/enjoy.key #алгоритм шифрования cipher DES-EDE3-CBC #использовать сжатие comp-lzo
