Настройка openvpn centos 8
Обновлено: 04.07.2024
VPN - набор технологий, которые позволяют организовать логическую сеть поверх других. Чаще всего в роли других сетей выступает Интернет. Если простыми словами, то с помощью VPN можно организовать единую локальную сеть разделенных интернетом сегментов сети. Так как Интернет - общедоступная сеть, то трафик внутри созданной логической сети шифруется различными средствами для организации защиты передаваемых данных.
OpenVPN - одна из реализаций технологии VPN с открытым исходным кодом, а значит бесплатная. С ее помощью можно объединять в единую сеть компьютеры в том числе и находящиеся за NAT , что очень удобно. Openvpn поддерживает все популярные на сегодняшний день операционные системы, в том числе и Windows.
Среди малого и среднего бизнеса сервер openvpn очень популярен благодаря своей бесплатности, кроссплатформенности, быстроте и гибкости настроек. Лично я предпочитаю именно его для объединения удаленных локальных сетей. Его же предпочитают использовать vpn-провайдеры для оказания своих услуг по организации анонимного серфинга в интернете.
Объединение офисов с помощью openvpn
У нас имеется офис с шлюзом CentOS 8, на который мы будем устанавливать openvpn сервер. И есть филиал с таким же шлюзом, где будет установлен openvpn client для подключения сети филиала к офису:
Имя | Centos-server | PC1 | Centos-client | PC2 |
Внешний ip | 10.20.1.38 | 192.168.13.188 | ||
Локальный ip | 192.168.220.1 | 192.168.220.10 | 192.168.150.1 | 192.168.150.10 |
Комментарий | Сервер openvp и шлюз в офисе | Компьютер с Windows 10 в офисе | Клиент openvp и шлюз в филиале | Компьютер с Windows 10 в филиале |
В данном случае сервер в филиале может быть без внешнего белого IP адреса, это не принципиально, все будет работать и так. Нам необходим только один внешний IP адрес на сервере. Все остальные клиенты могут быть за NAT , это не помешает успешному объединению локальных сетей.
Наша задача в данном случае будет сводиться к тому, чтобы компьютеры PC1 и PC2 увидели друг друга и могли совместно использовать свои сетевые ресурсы в обе стороны. То есть как за сервером, так и за клиентом openvpn мы должны видеть сеть.
Хочу отметить, что конфигурация openvpn кроссплатформенная и отлично переносится с одной системы на другую, необходимо только пути проверить, так как в каждой системе они свои. Моя инструкция подойдет для настройки openvpn сервера на любой операционной системе, отличаться будут только специфичные для каждой системы команды установки и проверки, но сама суть настройки vpn будет такой же.
У меня на стенде 10.20.1.38 и 192.168.13.188 по сути внешние IP адреса, которые смотрят в интернет.
Где скачать openvpn
Прежде чем приступить к установке и настройке, давайте посмотрим, где можно скачать все, что нам понадобится в нашей работе. Свежие и актуальные версии всегда можно найти на страничке downloads официального сайта.
Исходники | openvpn-2.5.0.tar.gz |
Openvpn client Windows 32 bit | OpenVPN-2.5.0-I601-x86.msi |
Openvpn client Windows 64 bit | OpenVPN-2.5.0-I601-amd64.msi |
Openvpn Portable | openvpn-portable-win64-setup.exe |
Сразу же прокомментирую по поводу portable версии openvpn. На текущий момент официальной портированной версии openvpn не существует. Та версия, на которую я дал ссылку, найдена мной в гугле и сделана отдельной командой Portapps. Это наиболее актуальная и свежая версия. До нее я использовал OpenVPN Portable с sourceforge, но она сильно устарела, хотя кое-где может и работать. Я специально по этому поводу почитал форум Community Openvpn и нашел там неутешительные ответы. Разработчики говорят, что portable версия openvpn не поддерживается и выпускать ее они даже не собираются. А жаль, было бы удобно получить портированную версию от них.
Для Linux систем дистрибутив проще всего получить в системных репозиториях и устанавливать с помощью стандартных установщиков пакетов.
Установка openvpn на CentOS 8
Теперь вернемся к нашей задаче. Я подразумеваю, что у вас уже есть установленный и настроенный сервер CentOS. Если еще нет, то можете воспользоваться моими материалами. В них раскрыты следующие темы:
Устанавливаем openvpn на оба наших сервера, которые являются шлюзами в своих сегментах сети. Первым делом подключаем репозиторий epel к centos:
Поскольку VPS под FreeBSD, отработавшая три года, своими периодическими зависаниями поднадоела, было решено пересобрать всё заново. К сожалению FreeBSD, предлагаемая в шаблонах на aruba.it, не поддерживает IPv6, поэтому новая VPS будет создана на CentOS 8.
Установка и настройка OpenVPN сервер на CentOS 8
Устанавливаем пакеты OpenVPN и Easy-RSA:
Создаем папку easy-rsa и символьные ссылки из скрипта easyrsa :
Что бы не создавать новый файл vars , копируем из файла примера:
Правим файл /etc/openvpn/easy-rsa/vars , раскомментируем и заполняем поля, которые относятся к информации о сертификате:
Устанавливаем размер ключа 4096 bit:
Режим шифрования RSA:
Срок действия корневого сертификата в днях:
Срок действия выпущенных сертификатов в днях:
Сохраняем файл vars. Теперь создаем структуру каталогов для ключей. Команда выполняется только один раз!
Создание корневого сертификата, которым будут подписываться остальные (Certificate Authority):
Опция nopass не требует при запуске пароль, но ключи в этом случае необходимо хранить надежно.
Создание сертификата OpenVPN сервера (Server Certificate):
Генерация ключа Diffie Hellman, для ключа в 4096 bit процесс может занять некоторое время:
Создание сертификата клиента (Client Certificate). Для каждого клиента необходимо выпустить свой сертификат.
Создаем пустой список отозванных сертификатов:
Создаем файл конфигурации OpenVPN сервера:
Заполняем файл конфигурации:
Создаем папку ccd и пустой файл ipp.txt :
Включаем и запускаем сервис OpenVPN:
Настройка NAT
По умолчанию пересылка пакетов отключена, для включения необходимо ввести команду:
Что бы маршрутизация работала после перезагрузки сервера в файл /etc/sysctl.conf добавляем строчку:
Для применения изменений:
Включение NAT на интерфейсе eth0:
В цепочку INPUT фаервола разрешаем доступ подсети OpenVPN:
Настройка MikroTik в качестве OpenVPN клиента
Копируем на MikroTik созданный ранее сертификат клиента с ключом ( client.crt и client.key ).
В меню System -> Certificates последовательно импортируем сертификат и ключ, кнопка Import . Импортированный сертификат должен иметь атрибуты KT (K - ключ имеет Private Key, T - Trusted).
Создаем новое подключение OpenVPN. PPP -> + -> OVPN Client . В открывшемся окне на вкладке General произвольно заполняем поле Name . На вкладке Dial Out последовательно заполняем поля:
- Connect To - адрес предварительно настроенного OpenVPN сервера
- Port - 443, как ранее конфигурационном файле OpenVPN сервера
- Mode - ip
- User - произвольно, в настройках сервера мы не указывали пользователя, но в настройках MikroTik заполнить его необходимо
- Profile - default
- Certificate - в выпадающем списке выбираем ранее импортированный сертификат
- Auth - sha1
- Cipher - aes 256
- Add Default Route - только если хотим, чтобы весь трафик шел в OpenVPN канал
После сохранения настроенное соединение должно подключиться к OpenVPN серверу.
Самое интересное, для чего все это строилось, в разделе IP -> Routes добавляем адреса, трафик с которых мы хотим пустить по OpenVPN соединению.
В строчке FONT меняем значение, чтоб было следующее:
FONT="UniCyr_8x16"
После чего перезагружаем ОС и все будет в порядке!
редактируем опцию SELINUX:
SELINUX=disabled
Так же сразу можно настроить автоматическое удаление старых ядер ОС, а так же настроить samba, либо vsftpd, для передачи сертификатов с сервера на клиенты. На этом подготовка ОС завершена, можно приступить к установке OpenVPN!
Вводим команду ls чтоб увидеть папки:
Вписываем туда свои данные:
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
* так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.
Мы должны увидеть:
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
и вводим пароль, который указывали при создании корневого сертификата.
ВНИМАНИЕ! Параметры sndbuf и rcfbuf НЕ работают, а иной раз снижают скорость у tap подключения, крайне не рекомендуется использовать эти параметры если вы собираетесь использовать именно этот тип подключения!
Если сервер не работает смотрим логи в папке /etc/openvpn/logs и исправляем. Если все в порядке создаем ключи для клиента. Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
* в данном примере будет создан сертификат для adm-1.
Сертификат для клиента Adm-1 готов, идем настраивать клиентский ПК! Если ПК на windows, скачиваем софт с официального сайта openvpn. Устанавливаем в корень диска C:\. Должен получиться путь C:\openvpn. Далее в корне папки openvpn создаем папку ssl, куда нужно будет скопировать ключи и сертификаты клиента adm-1. После чего из папки sample-config копируем конфиг client.openvpn в директорию C:\openvpn\config. Открываем его блокнотом или любым другим удобным текстовым редактором. Удаляем из него все, и заполняем нужными нам параметрами:
После чего запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора. Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Либо включаем автозапуск при старте системы в службах windows:
Чтоб проверить вводим команду ifconfig так же увидим новый адаптер, либо через проверку статуса, или же смотрим сразу логи.
Заполним файл следующими параметрами:
На этом настройка завершена!
Полезные статьи по поводу, медленной скорости openvpn внутри туннеля: статья 1, статья 2
Установка OpenVPN и создание PKI
На первом шаге необходимо произвести установку OpenVPN, а также, программного обеспечения для управления инфраструктурой открытых ключей PKI. Эти работы нужно будет произвести как на сервере OpenVPN, так и на сервере ЦС.
В CentOS Stream и OpenVPN, и Easy-RSA не установлены как приложения по умолчанию. Для инсталляции этих пакетов вам нужно будет задействовать репозиторий EPEL (Extra Packages for Enterprise Linux). Этот репозиторий сейчас является самым популярным неофициальным репозиторием CentOS. В данном репозитории находится большое количество пакетов для CentOS в формате RPM.
Инсталляция этих пакетов запускается следующим образом:
- Сначала необходимо установить репозиторий EPEL:
- И только после этого, запустите установку интересующих нас пакетов:
По окончании установки в домашнем каталоге своего пользователя необходимо создать папку /easy-rsa /:
И далее, создайте симлинк при помощи easyrsa :
В данном случае мы используем символьную ссылку для того, чтобы любая корректировка пакета easy-rsa немедленно отражалась бы в скриптах PKI.
Теперь нужно будет на сервере OpenVPN произвести настройку PKI, структуры, которая будет управлять сертификатами клиентов вашего канала VPN. Для чего, необходимо подключиться к серверу OpenVPN, перейти в папку /easy-rsa/ и там создать файл vars , например, с помощью редактора vi:
Следующие строки необходимо скопировать в этот файл:
Смысл скопированных строк заключается в том, что при работе с сертификатами будет применяться криптосистема на эллиптических кривых ECC, то есть, для установки канала клиент-сервер будут использоваться алгоритмы эллиптической кривой.
Далее, необходимо при помощи easyrsa создать директорию PKI:
Вывод работы скрипта выглядит примерно так:
Настройка PKI на сервере ЦС
Далее, похожую настройку PKI необходимо сделать на сервере ЦС. Сначала, нужно так же инициировать PKI в папке /easy-rsa/ . Для запуска необходимо набрать:
В директории /easy-rsa/ нужно создать файл vars :
В созданный файл vars скопируйте следующие строки и отредактируйте их в соответствии с информацией, относящейся к закрытой сети вашей организации, но не оставляйте их пустыми:
Закройте файл сохранив изменения и запустите скрипт easyrsa с использованием параметра build-ca , для чего наберите:
Здесь система просит вас придумать и набрать парольную фразу для создаваемых ключей. Эту парольную фразу необходимо будет вводить каждый раз, когда вы будете взаимодействовать с центром сертификации, например, при создании или отзыве сертификата. Также, необходимо придумать и ввести Common Name (CN), которое будет обозначать ваш ЦС, или, нажав Enter , принять имя предлагаемое по умолчанию.
Открытый ключ будет использоваться клиентами вашего VPN для того, чтобы они были уверены, что являются частью единой сети, и каждый из них будет иметь копию этого файла. Секретный ключ нужен будет для подписания сертификатов клиентов вашей сети; он будет находиться исключительно на сервере ЦС, в связи в чем, сервер ЦС желательно вывести в оффлайн, чтобы не допустить утечки секретного ключа в результате атаки злоумышленника.
Теперь, когда настройка сервера ЦС завершена, необходимо добавить созданный открытый ключ ЦС на сервер OpenVPN. Другими словами, на сервере OpenVPN нужно создать копию файла ca.crt . Для этого подключитесь к серверу ЦС, перейдите в директорию с созданным открытым ключом и выведите на экран содержимое ca.crt :
Вывод команды выглядит примерно так:
Содержимое этого файла, то есть, то что выведено на экран, нужно полностью скопировать в буфер обмена. После чего, переключитесь на сервер OpenVPN, перейдите в каталог /etc/pki/ca-trust/source/anchors/ и там создайте файл ca.crt :
Вставьте в открытый файл скопированный блок текста и закройте файл с сохранением внесённых изменений.
Затем запустите команду:
Этой командой импорт созданного сертификата в хранилище операционной системы сервера OpenVPN. Таким образом, теперь подписанные сервером ЦС сертификаты будут иметь доверенные отношения с сервером OpenVPN.
Создание и подписание запроса сертификата
Теперь всё готово к следующему этапу настройки, а именно, к созданию секретного ключа и запроса подписи сертификата. После их создания на сервере OpenVPN, нужно будет передать запрос на сервер ЦС для подписания, после чего, установить подписанный сертификат на сервере OpenVPN.
Подключитесь к серверу OpenVPN, перейдите в папку
Далее, нужно будет запустить скрипт easyrsa с опцией gen-req , после которого нужно будет указать запоминающееся имя для компьютера. В данном мануале это будет server , вы же можете использовать своё. Для создания запроса без защиты паролем, к команде добавьте nopass .
Итогом работы скрипта будет генерация секретного ключа и файла запроса server.req . Файл ключа нужно будет скопировать в /etc/openvpn/server/ :
Ту же команду можно применить используя доменное имя сервера вместо IP-адреса:
Теперь необходимо подключиться к серверу ЦС и запустить импорт запроса сертификата при помощи easyrsa :
Далее, с помощью того же скрипта easyrsa , но уже с параметром sign-req , запустите подписание запроса. С параметром sign-req необходимо указать тип запроса: server или client . В нашем случае тип запроса будет server , так как мы подписываем запрос сертификата сервера OpenVPN:
Чтобы подтвердить надёжность источника запроса, нужно ввести Yes , после чего нажать Enter .
После завершения передачи файлов, подключитесь к серверу OpenVPN и скопируйте server.crt и ca.crt из папки /tmp/ в папку /etc/openvpn/server/ :
Для получения ключа нужно перейти в каталог
Полученный при этом файл ta.key необходимо скопировать в /etc/openvpn/server/ :
Завершив эти действия, вы готовы к генерации сертификатов клиентов и ключей пользователей для подключения к каналу VPN.
Генерация ключей и сертификатов
Здесь мы создадим скрипт на сервере OpenVPN, с помощью которого будем генерировать конфигурационные файлы для клиентов со всеми необходимыми сертификатами и ключами в автоматическом режиме, благодаря чему отпадёт необходимость передавать сертификаты, ключи и конфигурационные файлы в клиентские системы.
Далее, мы сгенерируем пару сертификат-ключ для первого клиента, уникальным именем которого будет 1st_Client. Для каждого последующего клиента описанную последовательность действий необходимо будет повторить.
Начнём с создания директории, где будут храниться файлы ключей и сертификаты клиентов вашего VPN. С нашем случае директория будет называться /vpn-clients/ :
Далее, из папки /easy-rsa/ запустите скрипт easyrsa , применив опции gen-req и nopass и уникальное имя клиента:
Скопируйте 1st_Client.key в
После чего, используя scp , необходимо передать файл 1st_Client.req на сервер ЦС, используя его IP-адрес, либо доменное имя:
Затем подключитесь к серверу ЦС, перейдите в папкуг /easy-rsa/ и запустите импорт запроса сертификата:
После чего подпишите запрос, указав тип запроса client :
Результатом подписания будет создание файла сертификата 1st_Client.crt . Этот файл нужно снова передать на сервер OpenVPN, также, с использованием его IP-адреса, либо доменного имени:
После этого снова подключитесь к серверу OpenVPN и скопируйте файл 1st_Client.crt в папку
Файлы ca.crt и ta.key необходимо скопировать в каталог
/vpn-clients/keys/ с предоставлением им соответствующих прав:
Таким образом, вы создали файлы сертификатов и ключей для сервера и первого клиента, разместив их в соответствующих каталогах сервера OpenVPN.
Настройка OpenVPN
На данном этапе необходимо произвести некоторые настройки конфигурации сервера OpenVPN.
Во первых, файл server.conf необходимо скопировать в папку OpenVPN:
Этот файл нужно будет открыть для редактирования:
В разделе HMAC файла server.conf необходмио найти и закомментировать строку tls-auth , поставив знак ; перед этой строкой, а после неё нужно добавить строку tls-crypt ta.key :
Далее, в этом же файле необходимо найти строку cipher AES-256-CBC , и так же закомментировать её. После чего вставьте в файл строки cipher AES-256-GCM и auth SHA256 :
Затем найдите фрагмент текста, содержащий dh dh2048.pem или dh dh.pem и закомментируйте эту строку, так как в данном случае отсутствует необходимость использовать файл Диффи-Хеллмана. Следующей строкой добавьте текст dh none :
А для того, чтобы OpenVPN мог запускаться без привилегий, необходимо снять комментарий перед строками user nobody и group nogroup :
После завершения редактирования закройте файл, сохранив изменения.
Конфигурация сети на сервере OpenVPN
На следующем этапе необходимо внести изменения в настройки сети, которые будем делать на сервере OpenVPN. Корректировка данных параметров обеспечит правильную маршрутизацию трафика. Для начала откройте для редактирования конфигурационный файл /etc/sysctl.conf :
И вставьте в него строку:
Закройте файл, сохранив изменения. Чтобы новая настройка применилась, наберите:
Настройка сетевого экрана
На этом шаге необходимо произвести настройку брандмауэра для того, чтобы сервер знал, как он должен обрабатывать клиентский трафик. В качестве сетевого экрана на CentOS Stream установлен firewalld .
Сначала необходимо узнать активную зону firewalld :
Теперь добавьте службу OpenVPN в список разрешенных сервисов firewalld :
После этого сервис OpenVPN необходимо добавить в список разрешённых сервисов брандмауэра:
Чтобы убедиться, что настройка применилась, нужно вывести список разрешённых брандмауэром служб, для чего наберите:
Теперь, необходимо в firewalld добавить правило подмены, которое позволит серверу преобразовывать адреса клиентов в открытый адрес сервера, после чего, сервер выполняет обратное преобразование трафика, который уходит обратно клиенту:
Проверить корректность добавления подмены можно набрав:
Теперь нужно создать правило подмены для вашей подсети. Чтобы добавить правило маршрутизации, будем использовать переменную, назовём её SHELLVAR , присвоив ей значение первичного сетевого интерфейса:
После чего перезапустите firewalld :
Запуск сервиса OpenVPN
На данном шаге произведите запуск службы OpenVPN при помощи systemctl c включением его в автозагрузку:
Далее, запустите проверку статуса сервиса:
Корректный статус службы должен выглядеть примерно так:
Конфигурация клиентов
На этом этапе мы создадим скрипт, с помощью которого можно будет генерировать уникальные файлы клиентов, их ключи и сертификаты. Для этого мы будем использовать базовую инфраструктуру конфигурации.
Данная операция сможет оптимизировать работу с точки зрения автоматизации ваших действий при организации доступа к VPN-каналу для каждого из клиентов.
Для этого создайте директорию, где будут сохраняться данные ваших клиентов:
Образец конфигурации клиента скопируйте в папку /vpn-clients/ :
Откройте для редактирования файл base.conf :
В строке, начинающейся со слова, remote нужно будет заменить номер порта 1194 на необходимый вам, если ранее вы его меняли. Этот порт прослушивает сервер OpenVPN:
Проверьте корректность протокола, указанного в строке:
Со следующих строк необходимо снять комментарий:
Следующие строки, наоборот, закомментируйте (на вашем сервере уже произведена настройка на использование tls-crypt вместо tls-auth ):
Значения переменных в следующих строках должны соответствовать переменным, прописанными в файле /etc/openvpn/server.conf . Таким образом, в файле должны присутствовать следующие строки:
Далее, вставьте строку:
И в довершение добавьте строки, с которых нужно будет снять комментарий только для Linux-клиентов:
Теперь можно выйти из файла, сохранив изменения:
Далее, необходимо создать скрипт make_config.sh . Этот исполняемый файл будет создавать базовую конфигурацию клиента в папке
Закройте файл с сохранением изменений.
Также, необходимо дать этому файлу привилегии исполняемого:
Создание клиента
Ранее, вы создали файлы сертификата и ключа 1st_Client.crt и 1st_Client.key . Конфигурационный файл для этого клиента можно сгенерировать, запустив созданный скрипт из директории /vpn-clients/ :
Результатом работы скрипта будет создание файла 1st_Client.ovpn в каталоге
Созданный файл предназначен для передачи клиенту, который, в свою очередь, должен установить его на своё устройство. Это устройство клиент будет использовать для работы в вашей закрытой сети через настроенный вами сервер OpenVPN. На том же клиентском устройстве (смартфон, ноутбук, десктоп) должно быть установлено ПО OpenVPN. Именно к этому ПО клиент подключает полученнный от вас файл с расширением ovpn . К примеру, в случае, если компьютер клиента работает под управлением операционной системы семейства Windows, то необходимо будет с сайта OpenVPN скачать для установки Windows-дистрибутив, установить его на рабочую станцию и скопировать файл сертификата в одну из директорий, которую приложение укажет при первом своём запуске. При помощи этого ПО клиент сможет осуществлять работу с ресурсами извне, несмотря на то, что используемые им ресурсы будут расположены внутри вашей сети. При этом, вам не нужно будет вносить изменения в настройки вашего брандмауэра, тем самым понижая уровень защищённости сети.
Читайте также: