- Настройка OpenVPN вручную
- Установка необходимого ПО
- Настройка центра сертификации
- Настройка сервиса OpenVPN
- Настройка сетевой конфигурации сервера
- Включение сервиса OpenVPN
- Создание конфигураций клиентов
- Создание базовой конфигурации
- Скрипт для генерации конфигов
- Создание конфигураций
- Настройка клиентов
- Windows
- MacOS
- Установка OpenVPN сервера на Windows
- Установка OpenVPN Server
- Создание ключей и сертификатов
- Настройка OpenVPN сервера
- Настройка OpenVPN клиента
- Отзыв сертификата
Настройка OpenVPN вручную
Прежде чем приступать к настройке VPN вручную, рекомендуем попробовать более простой способ настройки: через интерфейс Webmin. Инструкция.
Если вам необходимо настроить удаленное подключение к рабочим серверам (например, при организации удаленной работы для сотрудников, чтобы обеспечить им доступ к корпоративной сети и внутренним ресурсам из сторонних сетей), вы можете воспользоваться этой инструкцией для настройки VPN-подключения и удаленного доступа.
Существует множество вариантов реализации VPN. Ниже мы рассмотрим настройку на основе OpenVPN.
Для настройки нам понадобится VDS с установленной Ubuntu 16.04.
Обратите внимание, что сервер, на котором будет запущен клиент VPN для пропуска во внутреннюю сеть, должен являться шлюзом сети. Также, файрвол должен быть настроен на пропуск пакетов через VPN.
Установка необходимого ПО
Подключитесь к серверу по SSH и выполните установку OpenVPN и центра сертификации командами:
Настройка центра сертификации
OpenVPN использует TLS/SSL, поэтому вам потребуются сертификаты для шифрования трафика между сервером и клиентами. Для выпуска доверенных сертификатов необходимо создать свой собственный центр сертификации.
1. С помощью команд ниже скопируйте шаблонную директорию easy-rsa в домашний каталог и перейдите в созданную директорию:
2. Отредактируйте файл vars :
Необходимо отредактировать несколько переменных, которые задают параметры сертификатов. Эти переменные: KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL, KEY_OU. Укажите значения для каждой из них, не оставляйте их незаполненными.
Также нужно отредактировать значение переменной KEY_NAME, указав субъекта сертификатов. В примере мы зададим ему имя сервер Server (вы можете указать свое), это же значение будет использоваться далее в командах в инструкции.
Сохраните и закройте файл.
3. Создайте центр сертификации при помощи утилиты easy-rsa и заданных переменных. Выполните команду:
Вывод должен быть следующим:
Выполните предложенную команду, чтобы удостовериться, что вы работаете в «чистой среде»:
Создайте корневой центр сертификации:
Запустится процесс создания ключа и сертификата корневого центра сертификации. Все необходимые значения будут введены автоматически, так как вы задали их в файле vars. Нажимайте ENTER для подтверждения выбора.
Настройка центра сертификации закончена.
4. Создайте сертификат и пару ключей, а также дополнительные файлы, используемые для шифрования.
Обратите внимание: далее в командах и примерах мы будем использовать Server — значение, указанное выше для переменной KEY_NAME. Если вы указали другое имя, не забудьте заменить его в приводимых командах. Это будет касаться, в том числе, имени файла конфигурации: в нашем случае это будет /etc/openvpn/server.conf .
4.1. Создайте сертификат OpenVPN и ключи для сервера:
Подтвердите все значения по умолчанию, нажимая Enter. Не задавайте challenge password. При завершении процесса два раза введите y для подписи и подтверждения создания сертификата:
4.2. Создайте оставшиеся файлы. Сгенерируйте надежные ключи протокола Диффи-Хеллмана:
4.3. После завершения процесса сгенерируйте подпись HMAC:
Настройка сервиса OpenVPN
1. Скопируйте созданные файлы (сертификат и ключ центра сертификации, сертификат и ключ сервера, подпись HMAC и файл Diffie-Hellman) в директорию /etc/openvpn :
2. Скопируйте и распакуйте файл c примером конфигурации OpenVPN в конфигурационную директорию. Этот файл послужит основой для последующих настроек.
3. Настройте конфигурационный файл сервера. Откройте файл /etc/openvpn/server.conf :
3.1. Найдите директиву tls-auth. Удалите «;«, чтобы раскомментировать строку. Далее добавьте параметр key-direction и установите его значение в 0.
Должно получиться следующее:
3.2. Найдите секцию шифрования с закомментированными строками cipher. Удалите «;» для раскомментирования строки со значением AES-128-CBC, под этой строкой добавьте строку auth и укажите алгоритм HMAC, например, SHA256:
3.3. Найдите настройки user и group и удалите «;» для раскомментирования этих строк:
3.4. Для реализации доступа к сети, которая находится за клиентом (внутренняя сеть) необходимо прописать следующие строки, где ip 192.168.33.0 следует заменить на ip необходимой внутренней сети:
3.5. Проверьте настройки cert и key, чтобы они указывали на правильные файлы .crt и .key, которые вы скопировали ранее в /etc/openvpn :
Сохраните и закройте файл.
4. Для реализации доступа к внутренней сети, которая находится за клиентом, выполните следующее.
4.1. Создайте директорию /etc/openvpn/ccd :
4.2. Создайте новый файл, название которого должно совпадать с названием конфига клиента, который будет запущен на соответствующем сервере:
4.3. Добавьте в него необходимые ip c масками для пропуска клиентов во внутренние сети:
4.4. Сохраните и закройте файл.
4.5. Задайте необходимые права для файла:
Настройка сетевой конфигурации сервера
1. Разрешите серверу перенаправлять трафик:
2. Примените настройки к текущей сессии:
3. Отключите правила файрвола. При необходимости вы сможете настроить правила самостоятельно, используя материал в Сети.
Включение сервиса OpenVPN
Запустите сервер OpenVPN, указав имя файла конфигурации в качестве переменной. В нашем случае файл конфигурации называется /etc/openvpn/server.conf , поэтому мы используем @server . Укажите здесь корректное для вас значение.
Проверить статус можно командой:
Вы также можете проверить доступность интерфейса OpenVPN tun0 командой:
Если всё в порядке, добавьте сервис в автозагрузку:
Создание конфигураций клиентов
Создание базовой конфигурации
1. В домашней директории создайте каталог для хранения файлов:
2. Скопируйте файл с примером конфигурации в этот каталог:
3. Откройте этот файл в текстовом редакторе и внесите изменения:
3.1. Найдите директиву remote , которая сообщает клиенту адрес сервера OpenVPN. Укажите здесь IP-адрес вашего VDS-сервера:
3.2. Раскомментируйте директивы user и group, удаляя “;”:
3.3. Найдите директивы ca, cert и key и закомментируйте их, добавив #:
3.4. Добавьте настройки cipher и auth с такими же значениями, как в файле /etc/openvpn/server.conf , а также директиву key-direction со значением 1.
3.5. Добавьте следующие закомментированные строки, которые будут необходимы для клиентов на Linux, использующих файл /etc/openvpn/update-resolv-conf. Для таких клиентов потребуется раскомментировать эти строки в сгенерированном клиентском файле конфигурации OpenVPN.
Сохраните и закройте файл.
Скрипт для генерации конфигов
Далее необходимо создать скрипт, который будет генерировать файлы конфигурации с сертификатами, ключами и файлами шифрования и размещать их в директории
1. Создайте и откройте файл make_config.sh внутри директории
2. Вставьте в него следующий блок директив:
3. Сохраните и закройте файл.
4. Сделайте его исполняемым:
Создание конфигураций
Ниже мы рассмотрим создание сертификата для сервера, имеющего доступ во внутреннюю сеть. Аналогичным образом вы сможете создать сертификаты для любого количества клиентов, каждый раз передавая скрипту уникальное значение.
Для создания первого сертификата и ключа мы будем использовать параметр cserver1.
Для создания файлов без пароля (это облегчит автоматические соединения), используйте команду build-key:
В процессе создания файлов нажимайте Enter для подтверждения (все необходимые значения уже введены). Не задавайте challenge password. При завершении процесса дважды укажите y в ответ на запросы о подписи и подтверждении создания сертификата.
Сгенерируйте конфигурацию для этих файлов. Для этого перейдите в директорию
/client-configs и воспользуйтесь созданным скриптом:
Если всё прошло успешно, в директории
/client-configs/files будет создан файл cserver1.ovpn :
Этот файл необходимо передать соответствующему клиенту. Скачать конфигурацию можно по SFTP.
Настройка клиентов
Инструкции по настройке клиентов для OpenVPN для разных устройств и систем вы можете найти в сети. В большинстве случаев достаточно установить клиент и импортировать файл конфигурации.
Для примера, ниже рассмотрим настройку клиентов на компьютере с системами Windows и MacOS.
Windows
- Загрузите клиент с сайта OpenVPN: https://openvpn.net/community-downloads/ и установите его на компьютер.
- После установки скопируйте полученный файл конфигурации в папку C:\Program Files\OpenVPN\config .
- Запустите OpenVPN. Это необходимо сделать от имени администратора: кликните на значке правой кнопкой и выберите «Запуск от имени администратора». Чтобы OpenVPN всегда по умолчанию запускался от имени администратора, кликните на его значке правой кнопкой и выберите Свойства. На вкладке «Совместимость» отметьте пункт «Выполнять эту программу от имени администратора» и сохраните.
- В появившемся при запуске окне с предупреждением (разрешить программе внести изменения) нажмите «Да.»
- Кликните правой кнопкой мыши на значке OpenVPN в трее, выберите загруженный профиль и нажмите Connect / Подключиться.
Откроется окно с логом соединения, и, как только соединение будет установлено, появится соответствующее уведомление.
Для отключения снова кликните на значок OpenVPN в трее, выберите нужный профиль и нажмите Disconnect / Отключиться.
MacOS
- Для MacOS можно использовать бесплатный клиент Tunnelblick.
- Загрузите клиент с сайта Tunnelblick: https://tunnelblick.net/downloads.html
- Дважды кликните на загруженном файле и пройдите процесс установки.
- При завершении установки выберите «Нет» в ответ на вопрос о наличии конфигурационных файлов.
- После завершения установке откройте Finder и кликните дважды на вашем конфигурационном файле. Tunnelblick автоматически установит профиль.
Для установки соединения запустите Tunnelblick, после чего кликните на его иконку в верхней части экрана и нажмите Connect. Далее выберите установленный профиль.
Установка OpenVPN сервера на Windows
Установим и настроим OpenVPN сервер. На сервере используется операционная система Windows Server 2019.
OpenVPN — бесплатная реализация технологии виртуальной частной сети (VPN) для создания зашифрованных каналов связи между компьютерами типа точка-точка или сервер-клиенты за NAT и Firewall.
Установка OpenVPN Server
Скачиваем дистрибутив для установки OpenVPN:
Прокручиваем вниз, выбираем стабильную версию. Я буду использовать версию 2.4.9.
Для операционной системы Windows доступны два пакета:
- WINDOWS 7/8/8.1/SERVER 2012R2 INSTALLER (NSIS)
- WINDOWS 10/SERVER 2016/SERVER 2019 INSTALLER (NSIS)
Для Windows Server 2019 подходит второй вариант, скачиваю.
Запускаем инсталлятор OpenVPN.
Открывается мастер установки. Next.
Принимаем лицензионное соглашение. I Agree.
Выбираем компоненты. Выделите EasyRSA 2 Certificate Management Scripts. Для сервера OpenVPN GUI можно не устанавливать, если вы планируете запускать OpenVPN в качестве службы. Next.
Выбираем путь установки, я оставляю по умолчанию C:\Program Files\OpenVPN. Install.
Начинается процесс установки OpenVPN.
Установка успешно завершена. Next.
Установка выполнена в директорию C:\Program Files\OpenVPN.
После установки у нас появляется новый сетевой адаптер TAP-Windows Adapter V9.
Адаптер отключён. Если по каким-то причинам нужно добавить несколько таких адаптеров, то загляните в папку C:\Program Files\TAP-Windows\bin.
Здесь есть скрипты для установки адаптера, добавления адаптера и удаления всех адаптеров.
Пример установки адаптера. В командной строке под администратором:
В большинстве случаев дополнительно настраивать сетевой адаптер не требуется.
Создание ключей и сертификатов
Запускаем командную строку под администратором и переходим в рабочую директорию C:\Program Files\OpenVPN\easy-rsa.
В этой папке есть всё необходимое для генерации сертификатов.
Создаётся файл vars.bat с настройками и примером готовых параметров для создания CSR запроса сертификатов. Заполним его. Открываем vars.bat блокнотом.
Здесь стоит обратить внимание на пути к рабочим директориям. Например, вы можете указать свой путь к openssl.exe, если установили OpenVPN в другую директорию. Здесь же можно изменить длину ключей шифрования.
Заполняем переменные в нижней части файла, указываем:
- KEY_COUNTRY — страна
- KEY_PROVINCE — область
- KEY_CITY — город
- KEY_ORG — организация
- KEY_EMAIL — e-mail
- KEY_CN — (Common Name) имя сервера
- KEY_NAME — (Name) имя сервера
- KEY_OU — (Organization Unit) отдел
- PKCS11_MODULE_PATH — для токенов двухфакторной аутентификации, нам не требуется, укажу имя сервера
- PKC11_PIN — ПИН для токенов двухфакторной аутентификации, нам не требуется, укажу 1234
Для каждого сертификата нужно будет указывать свои NAME и COMMON NAME, можно их не указывать в vars.bat, потому как при генерации все параметры будут запрашивать.
Обращаем внимание на строку:
Это имя конфигурационного файла. Находим его в рабочей директории.
Внутри есть параметр default_days, в котором можно указать срок действия будущих сертификатов. По умолчанию у меня стоит 3650 дней, это 10 лет. Меня устраивает. Вероятно, кому-то при генерации клиентских сертификатов может понадобиться уменьшить этот срок.
Сохраняем все изменения и возвращаемся к командной строке. Подгружаем утверждённые нами переменные:
Очищаем директорию с ключами:
Сертификаты, которые мы будем создавать, появятся в папке C:\Program Files\OpenVPN\easy-rsa\keys. Сейчас эта папка очистилась, в ней два файла: index.txt и serial.
Генерируем ключ и сертификат центра сертификации:
В процессе генерации сертификата нас будут спрашивать все те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас устраивает), просто нажимаем ввод и переходим к следующему вопросу. После завершения работы скрипта в папке C:\Program Files\OpenVPN\easy-rsa\keys появляется два файла:
- ca.crt — сертификат центра сертификации
- ca.key — ключ центра сертификации
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ Диффи-Хеллмана:
В папке C:\Program Files\OpenVPN\easy-rsa\keys появляется файл:
Генерируем ключ и сертификат сервера, назовём сервер именем «server«:
В процессе генерации серверного сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас снова устраивает), просто нажимаем ввод и переходим к следующему вопросу. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:\Program Files\OpenVPN\easy-rsa\keys появляется четыре файла:
- 01.pem — не понадобится
- server.crt — сертификат сервера
- server.csr — запрос сертификата сервера, не понадобится
- server.key — ключ сервера
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ и сертификат первого клиента. Для каждого клиента нужно указывать своё имя файла, Name и Common Name. Назовём первого клиента именем «client«:
В процессе генерации клиентского сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Нас устраивают все параметры кроме NAME и COMMON NAME, на них отвечаем client. Помним, что для другого клиента имя должно быть другим. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:\Program Files\OpenVPN\easy-rsa\keys появляется четыре файла:
- 02.pem — не понадобится
- client.crt — сертификат первого клиента
- client.csr — запрос сертификата первого клиента, не понадобится
- client.key — ключ первого клиента
Для каждого нового клиента, который будет подключаться к серверу OpenVPN необходимо сгенерировать свой клиентский сертификат. Но это можно сделать позже, пока добьёмся подключения хотя бы одного клиента.
В настройках сервера можно потом включить настройку duplicate-cn, которая позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях.
# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE «COMMON NAME»,
# UNCOMMENT THIS LINE OUT.
;duplicate-cn
Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:
- Сканирование прослушиваемых VPN-сервером портов
- Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
- DoS-атаки и флуд на порты OpenVPN
- Переполнение буфера SSL/TLS
При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth:
В папке C:\Program Files\OpenVPN\easy-rsa\keys появляется файл:
Минимальный набор сертификатов сгенерирован.
Настройка OpenVPN сервера
Чтобы случайно всё не удалить, создадим папку C:\Program Files\OpenVPN\ssl и скопируем в неё сертификаты. Это будет рабочая папка сервера.
Создадим конфигурационный файл сервера C:\Program Files\OpenVPN\config\server.ovpn:
Открываем блокнотом и редактируем:
Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:
Указываем параметры сервера, пути к ключам и сертификатам. Здесь же пути к логам. Для тестирования можно использовать tcp протокол:
Переходим к службам:
Находим службу OpenVPNService.
Настраиваем на автоматический запуск при загрузке сервера.
Согласно настройкам сервера в папке C:\Program Files\OpenVPN\log должны появиться логи. Это один из инструментов администратора OpenVPN сервера.
Активировался сетевой адаптер TAP-Windows Adapter V9.
Согласно настройкам сервера IP адрес 10.8.0.1.
Проверяем поднялся ли порт tcp 1194:
Порт должен прослушиваться.
Теперь нужно настроить firewall. Открываем Windows Defender Firewall with Advanced Security.
Переходим в Inbound Rules.
Создаём правило — New Rule.
Тип правила — Port. Next.
Протоколы и порты — UDP 1194. Как в настройках сервера. Next.
Действия — Allow the connection. Next.
Для всех сетей. Next.
Указываем название правила — OpenVPN. Next.
Правило создано, теперь firewall не блокирует входящие UDP соединения на 1194 порту.
Настройка OpenVPN клиента
На компьютере клиента устанавливаем OpenVPN точно также как на сервер. Галку EasyRSA 2 Certificate Management Scripts не указываем. Галку OpenVPN GUI указываем.
Я устанавливаю OpenVPN на клиенте в папку по умолчанию. C:\Program Files\OpenVPN.
Копируем в отдельную папку for_client (её содержимое отправим потом на компьютер клиента) на сервере файлы для клиента:
Туда же из папки C:\Program Files\OpenVPN\sample-config копируем client.ovpn
Переименовываю client.ovpn в config.ovpn. Можно использовать любое имя, лучше созвучное с названием организации. Вот такой получился набор.
Редактируем файл config.ovpn.
Здесь указываем пути к ключам и сертификатам клиента. Не забываем про адрес и порт сервера, куда подключаться, для примера я указал internet-lab.ru UDP 1194.
Отправляем подготовленные файлы на компьютер клиента и копируем в C:\Program Files\OpenVPN\config.
На клиента запускаем OpenVPN GUI.
В трее появляется значок OpenVPN.
Правой кнопкой — подключиться.
Значок позеленел, назначен адрес 10.8.0.6.
Можно подключаться к серверу, если есть доступы.
Для второго и последующего клиента генерируем свой набор клиентских сертификатов.
Отзыв сертификата
Иногда нужно отозвать сертификат, выданный клиенту. Кто-то увольняется, кто-то палит сертификаты.
Где client — это имя клиента.
В папке C:\Program Files\OpenVPN\keys появляется файл:
Копируем его с заменой в рабочую директорию сервера C:\Program Files\OpenVPN\ssl.
Добавляем строчку в конфигурационный файл сервера:
Перезапускаем службу OpenVPN сервера.
Если в конфигурационном файле уже был ранее указан путь к crl.pem, то службу можно не перезапускать, OpenVPN перечитывает CRL один раз в час. Но в течении этого часа клиенты с отозванными сертификатами смогут продолжать подключаться и работать.
Для клиента с отозванным сертификатом процесс подключения будет «зависать». В логе можно увидеть:
Чтобы клиент не стучался постоянно на сервер, у него в конфиге есть опция:
Передать эту опцию при отзыве сертификата нельзя, поэтому указывайте её всем клиентам заранее.