Главная › Форумы › SOFTWARE › System settings › Настройка OpenVPN на CentOS 8
- В этой теме 0 ответов, 1 участник, последнее обновление 4 года, 4 месяца назад сделано
E-tec.
-
АвторСообщения
-
29.04.2020 в 15:56 #1361
ОС можно скачать с официального сайта CentoOS. Устанавливаем ОС в обычном режиме, я установил полностью “чистый” сервер без GUI, которая в принципе не нужна на серверной части. Так же желательно установить статический ip адрес, по которому сервер будет доступен в локальной сети (в статье для примера был использован адрес 10.59.0.55). После того как ОС полностью установилась логинимся под root пользователем. Первым делом выставляем правильную тайм зону, если Вы не сделали этого перед установкой ОС.
# \cp /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime
В моем случае часовой пояс пользуется Екатеринбурга, впишите свой нужный сами.Если возникли проблемы с кодировкой в ОС и вы видите вместо букв “квадратики”, исправляется эта ошибка следующим образом. Идем в настройки и меняем параметры:
# nano /etc/vconsole.conf
В строчке FONT меняем значение, чтоб было следующее:
FONT="UniCyr_8x16"
После чего перезагружаем ОС и все будет в порядке!
Далее установим утилиту для синхронизации времени:
# dnf install chrony
Запускам ее и добавляем в автозагрузку:
# systemctl enable chronyd
# systemctl start chronyd
Можно проверить точность времени командой:
# date
Далее настроим SELinux. SELinux расширяет возможности стандартной системы безопасности (на основе прав доступа к файлам). Она позволяет ограничить доступ процессу, который запускается от имени пользователя, у которого прав больше, чем нужно данному процессу. Админить сервер будем только мы, по этому, просто отключим его xD он нам не пригодится…
# setenforce 0
Отключим ему автозагрузку при рестарте ОС. Открываем конфиг любым удобным вам редактором, мне больше нравится “nano”.
# nano /etc/selinux/config
редактируем опцию SELINUX:
SELINUX=disabled
Настроим firewall нашей ОС. Если Вы хотите использовать не стандартный порт для работы ОС. Покажу на примере 443 порта и UDP протокола, как добавить правило для нашей ОС, меняйте параметры под свои нужды.
# firewall-cmd --permanent --add-port=443/udp
Применяем настройки firewall`а:
# firewall-cmd --reload
Так же сразу можно настроить автоматическое удаление старых ядер ОС, а так же настроить samba, либо vsftpd, для передачи сертификатов с сервера на клиенты. На этом подготовка ОС завершена, можно приступить к установке OpenVPN!
Устанавливаем репозиторий epel:
# dnf install epel-release
Устанавливаем необходимые пакеты следующей командой:
# dnf install openvpn easy-rsa
Я люблю, чтоб все файлы с которыми придется оперировать лежали в одном месте по этому перенесем каталог easy-rsa, в корневую директорию openvpn. При этом нужно будет посмотреть какая версия easy-rsa у Вас самая последняя и перенести именно ее. На момент написания версия easy-rsa была 3.0.7. Чтоб узнать какая у Вас переходим в директорию easy-rsa.
# cd /usr/share/easy-rsa
Вводим команду ls чтоб увидеть папки:
Копируем этот каталог в папку с openvpn:
# cp -r /usr/share/easy-rsa/3.0.7 /etc/openvpn/user-crts
Конфигурирование EasyRSA
Для начала скопируем сэмпл конфига vars в директорию с нашей openvpn:
# cp -r /usr/share/doc/easy-rsa/vars.example /etc/openvpn/user-crts/vars
После чего открываем его любым удобным редактором:
# nano /etc/openvpn/user-crts/vars
ВНИМАНИЕ! Прочитайте и проверьте файл vars до выполнения дальнейших действий. (Весьма полезными окажутся содержащиеся в нем комментарии.)
EASYRSA_DN — параметр, определяющий процедуру генерации сертификатов.
Свежие версии по умолчанию используют упрощенный формат cn_only (common name only), требующий ввода только универсального имени.
При использовании «классического» значения org (organization), генератор, помимо универсального имени, потребует указать дополнительные атрибуты: страну, регион, город, название организации и ее подразделения, а также адрес электронной почты.
Мы выберем «классический» вариант из-за большей наглядности результата. Переопределите значение:
set_var EASYRSA_DN "org"
Укажите значения следующих параметров (они будут использоваться по умолчанию при выпуске сертификатов):
set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "PERM KRAY" set_var EASYRSA_REQ_CITY "PERM" set_var EASYRSA_REQ_ORG "Geek-Speak Team" set_var EASYRSA_REQ_EMAIL "info@geek-speak.ru" set_var EASYRSA_REQ_OU "Geek-Speak"
EASYRSA_KEY_SIZE определяет размер генерируемых ключей. По умолчанию используется 2048 бит, чего во многих случаях достаточно.
Ключи размерностью выше 4096 бит генерируются значительно дольше, поддерживаться не всеми клиентами и могут стать причиной замедления инициализации защищенных соединений.
set_var EASYRSA_KEY_SIZE 2048
EASYRSA_CA_EXPIRE устанавливает срок действия ключа удостоверяющего центра (3650 дней), EASYRSA_CERT_EXPIRE — для остальных выпускаемых сертификатов (1080 дней).
set_var EASYRSA_CA_EXPIRE 3650 set_var EASYRSA_CERT_EXPIRE 1080
После этого можно переходить к генерации ключей. Инициализируем PKI:
# ./easyrsa init-pki
Мы должны увидеть:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /usr/share/easy-rsa/3/pki
… а в текущем каталоге появится папка pki.
Генерируем корневой сертификат (CA):
# ./easyrsa build-ca nopass
Генератор попросит указать семь атрибутов для нового сертификата; для шести из них будет предложено значение по умолчанию. Остается придумать универсальное имя на седьмом параметре.
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: Geek-Speak CA
Чтобы оставить значение какого-либо атрибута пустым используйте символ точки .
Обратите внимание, что в примере указан необязательный параметр nopass, благодаря которому EasyRSA не будет запрашивать пароль при каждом вызове.
Создаем ключ Диффи-Хеллмана:
# ./easyrsa gen-dh
Для создания сертификата сервера необходимо сначала создать файл запроса:
# ./easyrsa gen-req server nopass
* на запрос ввода Common Name просто вводим Enter, чтобы использовать настройку из файла vars; nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
… и на его основе — сам сертификат:
# ./easyrsa sign-req server server
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
и вводим пароль, который указывали при создании корневого сертификата.Для создания ta ключа используем команду:
# openvpn --genkey --secret pki/ta.key
Сертификаты сервера готовы и находятся в каталоге pki.
Создаем каталог в /etc/openvpn, в котором будем хранить сертификаты:
# mkdir -p /etc/openvpn/server/keys
Переходим в каталог pki:
# cd pki
Копируем в него необходимые сертификаты:
# cp ca.crt /etc/openvpn/user-crts/pki/issued/server.crt /etc/openvpn/user-crts/pki/private/server.key /etc/openvpn/user-crts/pki/dh.pem /etc/openvpn/user-crts/pki/ta.key /etc/openvpn/server/keys/
Теперь настроим конфигурацию сервера! Создаем файл server.conf:
# touch /etc/openvpn/server/server.conf
После чего открываем его:
# nano /etc/openvpn/server/server.conf
Заполняем параметры:
port 777 # Порт по которому будет работать сервер proto tcp # Протокол может быть udp, либо tcp, если есть необходимость в этом dev tap # Тип подключения tap, либо tun #=============================Сертификаты сервера==================================// ca /etc/openvpn/server/keys/ca.crt cert /etc/openvpn/server/keys/server.crt key /etc/openvpn/server/keys/server.key dh /etc/openvpn/server/keys/dh.pem tls-auth /etc/openvpn/server/keys/ta.key 0 #==================================================================================// #==============================Включаем TLS========================================// tls-server tls-timeout 120 auth SHA1 # по умолчанию SHA1, либо MD5 cipher AES-256-GCM #==================================================================================// server 11.1.1.0 255.255.255.0 # подсеть для туннеля, может быть любой #route 192.168.20.0 255.255.255.0 # указываем подсеть, к которой будем обращаться через vpn, используйте это, только если это ВАМ нужно #push "route 10.59.0.0 255.255.255.0" # передаем маршрут клиентам, используйте это, если вам нужно передать маршрут ВСЕМ клиентам openvpn сети topology subnet # Позволяет использовать все IP адреса в сети Openvpn используемые в файлах ccd ifconfig-pool-persist ipp.txt # файл с записями соответствий clinet - ip client-to-client # позволяет клиентам openvpn подключаться друг к другу client-config-dir /etc/openvpn/ccd # директория с индивидуальными настройками клиентов keepalive 10 120 max-clients 20 # Максимальное количество подключений к серверу #===Запретить OpenVPN менять размер буферов у сокета критично для tun подключения===// #sndbuf 0 # Установить отправляемый объем буфера сокета сервера #rcvbuf 0 # Установить принимаемый объем буфера сокету сервера #push "sndbuf 524288" # Размер принудительно отправляемого буфера сокета клиенту #push "rcvbuf 524288" # Размер принудительно принимаемого буфера сокета от клиента #=====================Использовать если Openvpn "тормозит"==========================// persist-key persist-tun status /etc/openvpn/logs/openvpn-status.log # Статус подключения клиентов к серверу log-append /etc/openvpn/logs/openvpn.log # Логи OpenVPN сервера verb 3 # Качество логирования сервера mute 20 daemon mode server comp-lzo no # Сжатие трафика в туннеле
ВНИМАНИЕ! Параметры sndbuf и rcfbuf НЕ работают, а иной раз снижают скорость у tap подключения, крайне не рекомендуется использовать эти параметры если вы собираетесь использовать именно этот тип подключения!
Создаем каталог для логов сервера и для индивидуальных настроек клиента:
# mkdir /etc/openvpn/logs
# mkdir /etc/openvpn/ccd
Разрешаем автоматический старт сервиса vpn:
# systemctl enable openvpn-server@server
И запускаем его:
# systemctl start openvpn-server@server
Проверяем запустился сервер или нет. Можно проверить в iconfig где увидите новый интерфейс, либо командой:
# systemctl status openvpn-server@server
Если сервер не работает смотрим логи в папке /etc/openvpn/logs и исправляем. Если все в порядке создаем ключи для клиента. Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.
Для генерации ключей идем в папку easy-rsa которую мы скопировали в корень openvpn каталога:
# cd /etc/openvpn/user-crts
Создаем клиентский сертификат:
# ./easyrsa gen-req adm-1 nopass
# ./easyrsa sign-req client adm-1
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
* в данном примере будет создан сертификат для adm-1.Копируем ключи в директорию, которую Вы выбрали для выкачивания сертификатов, через FTP, либо SMB протокол в самом начале (Настройка SMB, настройка FTP). Я использую FTP с специально созданным пользователем по этому путь копирования сертификатов у меня выглядит следующим образом:
# cp /etc/openvpn/user-crts/pki/issued/adm-1.crt /etc/openvpn/user-crts/pki/private/adm-1.key /etc/openvpn/user-crts/pki/ca.crt /etc/openvpn/user-crts/pki/ta.key /home/ftpuser/FTP
Даем права на перемещение файлов с сервера локальному ПК:
# chmod -R a+r /home/ftpuser/FTP
Сертификат для клиента Adm-1 готов, идем настраивать клиентский ПК! Если ПК на windows, скачиваем софт с официального сайта openvpn. Устанавливаем в корень диска C:\. Должен получиться путь C:\openvpn. Далее в корне папки openvpn создаем папку ssl, куда нужно будет скопировать ключи и сертификаты клиента adm-1. После чего из папки sample-config копируем конфиг client.openvpn в директорию C:\openvpn\config. Открываем его блокнотом или любым другим удобным текстовым редактором. Удаляем из него все, и заполняем нужными нам параметрами:
remote geek-speak.ru 777 # IP и порт сервера (p.s. можно использовать доменное имя, если openvpn находится за доменом) client # Авторизоваться как клиент dev tap # Тип подключения tap, либо tun proto tcp # Протокол может быть udp, либо tcp, в зависимости какой использует сервер resolv-retry infinite nobind #user nobody # Параметр для linux пользователей в Windows НЕ нужно #group nogroup # Параметр для linux пользователей в Windows НЕ нужно persist-key persist-tun #========================Сертификаты для подключения================================// ca C:\\Users\\Esmertec\\OpenVPN\\ssl\\ca.crt # Указываем пути где у вас лежат ключи для подключения cert C:\\Users\\Esmertec\\OpenVPN\\ssl\\adm-1.crt # Указываем пути где у вас лежат ключи для подключения key C:\\Users\\Esmertec\\OpenVPN\\ssl\\adm-1.key # Указываем пути где у вас лежат ключи для подключения #===================================================================================// cipher AES-256-GCM comp-lzo no verb 4 mute 20 float #==============================TLS аутентификация===================================// tls-client tls-auth C:\\Users\\Esmertec\\OpenVPN\\ssl\\ta.key 1 # Указываем пути где у вас лежат ключи для подключения auth-nocache auth SHA1 # по-умолчанию. Можно MD5 remote-cert-tls server #===================================================================================// #============Запретить OpenVPN менять размер буферов у сокета=======================// #sndbuf 0 #rcvbuf 0 #push "sndbuf 393216" #push "rcvbuf 393216" #===================================================================================//
После чего запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора. Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Либо включаем автозапуск при старте системы в службах windows:
Если клиент так же на linux как и сервер, устанавливаем клиента из репозитория свей системы:
Debian и ее производные:
# apt install openvpn
red hat и ее производные:
# yum install epel-release
# yum install openvpn
После чего копируем в каталог /etc/openvpn/client ключи и сертификаты с сервера. В корне openvpn создаем конфиг файл для подключения:
# touch /etc/openvpn/client.conf
Открываем его любым удобным вам редактором я использую “nano”:
# nano /etc/openvpn/client.conf
Заполняем его:
remote geek-speak.ru 777 # IP и порт сервера client # Авторизоваться как клиент dev tap # Тип подключения tap, либо tun proto tcp # Протокол может быть udp, либо tcp, в зависимости какой использует сервер resolv-retry infinite nobind user nobody # Параметр для linux пользователей в Windows НЕ нужно group nogroup # Параметр для linux пользователей в Windows НЕ нужно persist-key persist-tun #========================Сертификаты для подключения================================// ca /etc/openvpn/client/ca.crt cert /etc/openvpn/client/adm-1.crt key /etc/openvpn/client/adm-1.key #===================================================================================// cipher AES-256-GCM comp-lzo no verb 4 mute 20 float #==============================TLS аутентификация===================================// tls-client tls-auth /etc/openvpn/client/ta.key 1 auth-nocache auth SHA1 # по-умолчанию. Можно MD5 remote-cert-tls server #===================================================================================// #============Запретить OpenVPN менять размер буферов у сокета=======================// #sndbuf 0 #rcvbuf 0 #push "sndbuf 393216" #push "rcvbuf 393216" #===================================================================================//
Создаем каталог для логов клиента Openvpn:
# mkdir /var/log/openvpn
После чего запускаем клиент.
Debian и ее производные:
# service start openvpn@client
# service enable openvpn@client
red hat и ее производные:
# systemctl start openvpn@client
# systemctl enable openvpn@client
Чтоб проверить вводим команду ifconfig так же увидим новый адаптер, либо через проверку статуса, или же смотрим сразу логи.
Настройка индивидуальных параметров клиента. Создадим файл с названием сертификата, кому хотим выделить персональные настройки, в каталоге сервера /etc/openvpn/ccd. Я для примера создам для нашего клиента adm-1:
# touch /etc/openvpn/ccd/adm-1
откроем файл любым удобным Вам редактором:
# nano /etc/openvpn/ccd/adm-1
Заполним файл следующими параметрами:
ifconfig-push 10.2.0.10 255.255.255.0 # Желаемый статический IP адрес и маска клиента в тунеле iroute 192.168.0.0 255.255.255.0 # Локальная сеть клиента push "route 10.59.0.0 255.255.255.0 192.168.0.5 1" # Передать клиенту роут в сеть сервера, может быть абсолютно любой, экспериментируйте =), либо удалите или закомментируйте параметр
P.S. Роут прописывается по аналогии, как это делается в windows, т.е. ip и маска сети, куда нужно идти и шлюза за которым эта сеть находится. 1″ – это метрика, ставьте под свои нужды, либо пишите без нее
На этом настройка завершена!
Полезные статьи по поводу, медленной скорости openvpn внутри туннеля: статья 1, статья 2 -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.