Настройка OpenVPN на CentOS 8 - Geek-Speak

Настройка OpenVPN на CentOS 8

Главная Форумы SOFTWARE System settings Настройка OpenVPN на CentOS 8

Помечено: , ,

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #1361
    Esmertec
    Хранитель

    ОС можно скачать с официального сайта 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

    Переходим в директорию user-crts. Чтобы упростить и ускорить процесс создания ключей, создаем следующий и редактируем следующий файл:
    # cd /etc/openvpn/user-crts
    # touch vars
    # nano vars

    Вписываем туда свои данные:

    export KEY_COUNTRY="RU"
    export KEY_PROVINCE="Perm Kray"
    export KEY_CITY="Perm"
    export KEY_ORG="Geek-Speak Team"
    export KEY_EMAIL="esmertec@geek-speak.ru"
    export KEY_CN="GSTeam"
    export KEY_OU="GSTeam"
    export KEY_NAME="name-openvpn-server.geek-speak.ru"
    export KEY_ALTNAMES="name-openvpn-server"

    * где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.
    * так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.

    Запускаем созданный файл на исполнение:
    # . ./vars

    После этого можно переходить к генерации ключей. Инициализируем 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
    После ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

    Создаем ключ Диффи-Хеллмана:
    # ./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 443 # Порт по которому будет работать сервер
    proto udp # Протокол может быть udp, либо tcp, если есть необходимость в этом
    dev tun # Тип подключения 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 BF-CBC
    #==================================================================================//
    
    server 10.2.0.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" # передаем маршрут клиентам
    
    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 255 # Максимальное количество подключений к серверу
    
    #===Запретить OpenVPN менять размер буферов у сокета критично для tun подключения===//
    sndbuf 393216 # Установить отправляемый объем буфера сокета сервера
    rcvbuf 393216 # Установить принимаемый объем буфера сокету сервера
    push "sndbuf 393216" # Размер принудительно отправляемого буфера сокета клиенту
    push "rcvbuf 393216" # Размер принудительно принимаемого буфера сокета от клиента
    #=====================Использовать если Openvpn "тормозит"==========================//
    
    persist-key
    persist-tun
    status /etc/openvpn/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

    Запускаем vars:
    # . ./vars

    Создаем клиентский сертификат:
    # ./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 10.59.0.55 443 # локальный, либо внешний IP и порт сервера
    client # Авторизоваться как клиент
    dev tun # Тип подключения tap, либо tun
    proto udp # Протокол может быть udp, либо tcp, в зависимости какой использует сервер
    resolv-retry infinite
    nobind
    #user nobody # Параметр для linux пользователей в Windows НЕ нужно
    #group nogroup # Параметр для linux пользователей в Windows НЕ нужно
    persist-key
    persist-tun
    
    #========================Сертификаты для подключения================================//
    ca C:\\OpenVPN\\ssl\\ca.crt
    cert C:\\OpenVPN\\ssl\\adm-1.crt
    key C:\\OpenVPN\\ssl\\adm-1.key
    #===================================================================================//
    
    comp-lzo no
    verb 4
    mute 20
    float
    
    #==============================TLS аутентификация===================================//
    tls-client
    tls-auth C:\\OpenVPN\\ssl\\ta.key 1
    auth-nocache
    auth SHA1 # по-умолчанию. Можно MD5
    remote-cert-tls server
    #===================================================================================//
    
    #============Запретить OpenVPN менять размер буферов у сокета=======================//
    sndbuf 0
    rcvbuf 0
    #===================================================================================//

    После чего запускаем с рабочего стола программу «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 10.59.0.55 443 # IP и порт сервера
    client # Авторизоваться как клиент
    dev tun # Тип подключения tap, либо tun
    proto udp # Протокол может быть 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
    #===================================================================================//
    
    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
    #===================================================================================//

    Создаем каталог для логов клиента 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 # Передать клиенту роут в сеть сервера, может быть абсолютно любой, экспериментируйте =), либо удалите или закомментируйте параметр

    На этом настройка завершена!
    Полезные статьи по поводу, медленной скорости openvpn внутри туннеля: статья 1, статья 2

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Для ответа в этой теме необходимо авторизоваться.
Авторизация
*
*
Регистрация
*
*
*
Пароль не введен
*
Генерация пароля