OpenVPN один ключ на всех.
Есть OpenVPN. Сейчас для каждого клиента есть свои SSL ключи и всё работает хорошо. Но тут поступила задача сделать один SSL ключ на всех, общий. Читаю интернет, не могу найти как это сделать.
Если на одном SSL ключе подключается другой человек, то первый подключенный человек отключается. А как сделать так, что бы на одном ключе могли работать все клиенты?
Нашёл сообщение, что нужно раскоментировать строчку duplicate-cn. Но тогда работа OpenVPN становиться нестабильной. Часто происходит самоотключение клиентов.
Сейчас тестирую, вроде как пока работает. В принципе проблему можно считать решённой.
как сделать так, что бы на одном ключе могли работать все клиенты?
Нескромный вопрос — а что ты будешь делать при утечке этого ключа? Переподключать ВСЕХ клиентов?
Естественно. Он же за архитектуру и безопасность не решает.
Читаю интернет, не могу найти как это сделать.
Думаю, что это мало кому нужно. Т.к. смысл в VPN это предоставление индивидуального доступа к сети. Сотрудник фирмы пользуется своим колючем, ключ можно заблокировать и тем самым человека отключить.
Сотрудник фирмы пользуется своим колючем, ключ можно заблокировать и тем самым человека отключить.
Можно использовать совместно с авторизацией по паролю.
OpenVpn несколько клиентов на один сертификат
Здравствуйте, поставил OpenVpn на ubuntu и все работает если 1 подключение — 1 сертификат, однако нужно сделать так, чтобы по одному файлу могли подключиться много человек. Пытался что-то сделать с параметром «duplicate-cn», но ничего не выходит. Я знаю, что так делать не верно, но нужно именно, чтобы по одному файлу filename.ovpn могли подключаться много устройств, сейчас при подключении второго устройства, первое выбивает, ибо видимо дается один внутренний ip.
Пытался что-то сделать с параметром «duplicate-cn», но ничего не выходит.
Что не выходит то?
Не выходит подключить несколько клиентов через один сертификат
Логи-то хоть покажи
the only time production vpn should use duplicate-cn is when you also use password auth. If you choose to add login/password auth to your setup, then use —username-as-common-name to set the common-name to be the username, instead of the one from the certificate.
openvpn needs to be able to distinguish the different clients; normally this is done using the client certificate, but you’re using ‘duplicate-cn’; an alternative is to then use username+password authentication and use ‘—username-as-common-name’ ; if you don’t want to use that either then you’re out of luck.
OpenVPN: Как запретить/разрешить несколько подключений с одним сертификатом
OpenVPN позволяет разрешить конкурентные (одновременные) подключения пользователей с одним сертификатом. Для этого в конфигурационном файле server.conf используется опция duplicate-cn.
Если к серверу без опции duplicate-cn подключился второй пользователе с тем же сертификатом, то сессия первого пользователя будет отключена. Благодаря опции duplicate-cn ваш OpenVPN сервер сможет поддерживать несколько активных подключений с одним сертификатом. Количество таких одновременных сессий можно ограничить скриптом.
Рассмотрим, как разрешить конкурентные подключения на сервере OpenVPN и ограничить их количество.
Добавьте следующе параметры в конфигурационный файл сервера:
- duplicate-cn — разрешает одновременные подключения
- script-security 2 — разрешает запуск внешних скриптов
- up, client-connect, client-disconnect — переменные окружения для передачи в скрипт
Создайте файл скрипта /etc/openvpn/connection_sript.sh со следующим кодом:
Затем задайте права на скрипт:
chown nobody:nobody connectScript.sh
chmod 755 connectScript.sh
Выполните валидацию конфигурации и перезапустите сервис:
openvpn —config openvpn.conf
service openvpn restart
Добавьте в конфигурационный файл на стороне клиентов OpenVPN параметр:
Данный параметр заставляет клиента уведомлять сервер OpenVPN о разъединении сессии.
OpenVPN настройка подключения нескольких клиентов (сетей)
Для настройки OpenVPN в любой конфигурации необходимо установить PKI, нужны:
— главный CA-сертификат и ключ для подписывания каждого сертификата сервера и клиента (сервер и клиенты)
— сертификат и ключ сервера (на сервере)
— сертификат и ключ каждого клиента (на клиентах)
— задать параметры Diffie Hellman (на сервере)
Итак, создадим сертификат CA, открываем cmd, преходим в %Program Files%/OpenVPN/easy-rsa, редактируем vars.bat и установим KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, и KEY_EMAIL параметры (их нельзя оставлять пустыми).
Затем инифиализируем PKI:
vars
clean-all
build-ca
В основном нужно будет согласиться с предложенными параметрами, только поменять значение Common Name.
Затем создаем сертификат и ключ сервера
build-key-server server
Поменять Common Name на «server». Все вопросы требуют положительного ответа.
Дальше созжаем сертификаты и ключи для клиентов.
build-key client1. clientN
Для защиты паролем ключей клиента, используется скрипт build-key-pass.
Каждому клиенту нужно ввести свое уникальное Common Name, т.е. «client1», «client2», и «client3».
В конце нужно создать параметры Diffie Hellman
build-dh
В итоге нужно скопировать все файлы на требуемые машины.
Для создания дополнительного сертификата и ключа клиенту (после перезагрузки сервера) необходимо только инициализировать PKI командой vars %Program Files%\OpenVPN\easy-rsa
Создание файлов конфигурации для клиента и сервера
Для создания файлов конфигурации лучше взять файлы из %ProgramFiles%/OpenVPN/sampleconfig
Директива в конфиге сервера: push «redirect-gateway» — заменяет клиентам дефолтный шлюз на VPN, при этом у клиента может перестать работать сеть, если пакеты на локальный клиентский DHCP сервер пойдут через туннель. Решение: убедитесь что локальный DHCP сервер клиента доступен через другой маршрут (прописать руками или передать с сервера.
Автоматический запуск VPN сервера:
1. Конфигурационный файл сервера вместе с соответсвующими ключами скопировать в папку \Program Files\OpenVPN\config (по умолчанию эта папка рабочая) или указать другой путь (где лежат конфиг и ключи)
2. В службах Windows включить службу OpenVPN на автоматический старт.
3. То же нужно сделать на клиенте.
Объединение нескольких разных сетей через один сервер (нужно запустить несколько экземпляров):
1. Сгенерировать дополнительные ключи
2. Создать дополнительный сетевой интерфейс (в Windows): Пуск -> Программы -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter
3. Скопировать конфигурационный файл с настройками для сервера под другим именем и изменить:
— порт и/или протокол
— директивы log, logappend, status и ifconfig-pool-persist
— расскомментировать и прописать dev-node в соответствии с именем интерфейса
— в директиве server поменять подсеть на другую
— директива push route передает клиенту маршруты в нужные сети
— проверить директиву client-to-client (д.б. расскомментирована)
VPN с помощью OpenVPN
Вводное слово смотреть в статье Создание vpn туннеля.
Устанавливаем из репозитория сам OpenVPN и документацию к нему. Для дистрибутивов поддерживающих пакет APT команда может выглядеть так:
Если нужно настроить всего одно подключение, т.е. связать два компьютера (шлюза сетей), то настройка будет попроще, для подключения многих клиентов к одному серверу — чуть посложнее.
Содержание
Одно VPN соединение клиент-сервер
Эта инструкция составлена на базе официальной краткой инструкции и по сути ещё более краткий её перевод.
— Копируем созданный ключ на сервер и клиент в каталог /etc/openvpn.
— Создаём конфигурационный файл на сервере /etc/openvpn/server.conf:
— Создаём конфигурационный файл на клиенте /etc/openvpn/client.conf:
У пользователя nobody может быть другая группа. Проверим командой:
— Запускаем openvpn демон на сервере и клиенте:
-Проверяем доступность сетей командой ping. Добавляем openvpn в автозапуск:
Несколько VPN соединений
Копируем директорию со скриптами /usr/share/doc/openvpn-docs-2.0.9/easy-rsa для AltLinux или /usr/share/doc/openvpn/examples/easy-rsa для Debian в /etc/openvpn/ для более удобного использования. Редактируем файл с переменными /etc/openvpn/easy-rsa/vars и создаём главный единый для всех сертификат (master Certificate Authority (CA) ), которым затем будем подписывать остальные сертификаты:
Скрипт вызывает openssl с соответсвующими ключами и параметрами, создавая подкаталог keys с сертификатом и ключом.
Чтобы создать сертификат вручную нужно было бы запустить команду:
Создаём для сервера сертификат с ключом и параметры Диффи Хелмана:
Создаём сертификат и ключ для клиента:
Вместо server и client можно указать имена компьютеров, чтобы потом не путаться, т.к. ключи не имеют отношения к роли хоста, и сервер в одном соединении, используя те же ключи, может быть клиентом в другом.
Настроим сервер
В качестве транспортной сети будем использовать 10.11.11.0/24. То есть из этой подсети будут выделяться адреса для хостов, образующих VPN. В нашем случае один сервер и один клиент.
Скопируем в /etc/openvpn/keys/ созданные файлы ca.crt, dh1024.pem, server.crt, server.key. В Debian вместо расширений crt и key используется pem.
Скопируем в /etc/openvpn/ шаблонный конфигурационный файл /usr/share/doc/openvpn/sample-config-files/server.conf и отредактируем его. У меня без комментариев остались следующие строки:
У пользователя nobody может быть другая группа. Проверим командой:
Если планируется подключение нескольких клиентов, то для индивидуальной настройки каждого создаём каталог /etc/openvpn/ccd (для Alt Linux см дальше) и в нём файл с именем Common Name сертификата клиента, которое мы указывали при создании сертификата. Уточнить это имя можно посмотрев в созданном сертификате поле CN в строке
или просто подключиться к серверу и посмотреть в журнале кто подключился. Пусть это будет OrgName, тогда в файле /etc/openvpn/ccd/OrgName указываем:
Команды из этого файла будут выполняться при подключении клиента. Первая строка должна добавить маршрут к сети клиента на стороне сервера, вторая наоборот — на клиентской стороне добавить маршрут к сети находящейся за сервером VPN. Если же у нас будет только одно подключение, то обе эти строки могут быть указаны и в главном конфигурационном файле /etc/openvpn/server.conf
В Alt Linux openvpn чрутится, поэтому нужно создать ссылку на /etc/openvpn/ccd:
То, что он чрутиться именно сюда можно узнать в стартовом скрипте /etc/init.d/openvpn, найдя переменную CHROOTDIR, или выполнив этот скрипт глянуть параметр —chroot в информации о процессе:
Запускаем службу (демон):
Настроим клиента
Скопируем в /etc/openvpn/client-name/ созданные файлы ca.crt, client.crt, client.key.
Скопируем в /etc/openvpn/ шаблонный конфигурационный файл /usr/share/doc/openvpn-docs-2.0.9/sample-config-files/client.conf и отредактируем его. У меня без комментариев остались следующие строки:
Если у нас на этом компьютере больше нет openvpn серверов или клиентов, то можно запустить инициализирующий (стартовый) скрипт:
Если же есть, то запускаем отдельной командой:
Если не указывать амперсент (&), то запустив команду мы потереям контроль над консолью, а указав, запустим команду в фоновом режиме. Остановить можно, удалив процесс:
Для диагностики могут помочь следующие команды:
Последняя команда работает в Alt Linux, в Debian и Suse нет.
Также необходимо проверить, что все маршруты поднялись корректно:
и если нет, то добавить их вручную для проверки тунелля, а после всё же разобраться и сделать, чтобы они добавлялись автоматически:
здесь мы добавили маршрут в сеть 10.9.0.0 (255.255.255.0) через виртуальный интерфейс 10.11.11.2, созданный OpenVPN.
Создание дополнительного ключа пользователя
После того как всё установлено и созданы сертификаты и ключ сервера, каждый новый ключ пользователя создаётся командой:
Примечание: Путь к скрипту build-key может отличаться в разных дистрибутивах
См. также
Создание vpn туннеля — Общая информация по созданию VPN с перечислением нескольких способов.