Тематические термины: VPN, CentOS
Для удобства настройки заходим под суперпользователем:
Обновляем установленные пакеты:
yum update
Установим правильную временную зону:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время.
Устанавливаем сервис для синхронизации времени:
yum install chrony
Разрешаем автозапуск службы chrony и запускаем ее:
systemctl enable chronyd –now
Отключаем Selinux:
setenforce 0
Чтобы Selinux не включился после перезагрузки, откроем данный файл:
vi /etc/selinux/config
И отредактируем строчку SELINUX=enforcing на:
SELINUX=disabled
Создаем правило для firewalld:
firewall-cmd –permanent –add-port=443/udp
* в данной инструкции мы настроим работу OpenVPN на порту 443 по UDP. Если в вашем случае необходим другие порт и протокол, меняем значения на соответствующие.
… и применяем его:
firewall-cmd –reload
* если используется iptables, правило создаем командой iptables -I 1 INPUT -p udp –dport 443 -j ACCEPT, где 443 — порт, который мы будем использовать для openvpn.
Устанавливаем репозиторий epel:
yum install epel-release
Устанавливаем необходимые пакеты следующей командой:
yum install openvpn easy-rsa
В основе идеи VPN лежит шифрование трафика, а значит для его работы необходимы сертификаты.
Переходим в каталог easy-rsa:
cd /usr/share/easy-rsa/3
* в зависимости от версии easy-rsa, последний каталог может быть другим. Увидеть точное название каталога можно командой ls /usr/share/easy-rsa/.
Чтобы упростить и ускорить процесс создания ключей, создаем следующий файл:
export KEY_COUNTRY=”RU“export KEY_PROVINCE=”Sankt-Petersburg“export KEY_CITY=”Sankt-Petersburg“export KEY_ORG=”DMOSK COMPANY“export KEY_EMAIL=”[email protected]“export KEY_CN=”DMOSK“export KEY_OU=”DMOSK“export KEY_NAME=”name-openvpn-server.admins24.com“export KEY_ALTNAMES=”name-openvpn-server”
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.* так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.
Запускаем созданный файл на исполнение:
Инициализируем PKI:
./easyrsa init-pki
Мы должны увидеть:
…init-pki complete; you may now create a CA or requests.…
… а в текущем каталоге появится папка pki.
Генерируем корневой сертификат:
./easyrsa build-ca
… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Создаем ключ Диффи-Хеллмана:
./easyrsa gen-dh
Для создания сертификата сервера необходимо сначала создать файл запроса:
./easyrsa gen-req vpn-server nopass
* на запрос ввода Common Name просто вводим Enter, чтобы использовать настройку из файла vars; nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
… и на его основе — сам сертификат:
./easyrsa sign-req server vpn-server
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата.
Для создания ta ключа используем команду:
openvpn –genkey –secret pki/ta.key
Сертификаты сервера готовы и находятся в каталоге pki.
Создаем каталог в /etc/openvpn, в котором будем хранить сертификаты:
mkdir /etc/openvpn/keys
Копируем в него содержимое каталога pki:
cp -r pki/* /etc/openvpn/keys/
Создаем конфигурационный файл:
vi /etc/openvpn/server.conf
И вставляем в него следующее:
local 192.168.0.15port 443proto udpdev tunca keys/ca.crtcert keys/issued/vpn-server.crtkey keys/private/vpn-server.keydh keys/dh.pemtls-auth keys/ta.key 0server 172.16.10.0 255.255.255.0ifconfig-pool-persist ipp.txtkeepalive 10 120max-clients 32client-to-clientpersist-keypersist-tunstatus /var/log/openvpn/openvpn-status.loglog-append /var/log/openvpn/openvpn.logverb 0mute 20daemonmode servertls-servercomp-lzo
* где из всех параметров, обязательно, внести изменения нужно в следующие — local: IP-адрес, на котором будет обрабатывать запросы OpenVPN; port: сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть уже занят в вашей системе — посмотреть список используемых портов можно командой ss -tunlp. Если порт занят, используйте любой из свободных, например 1194).
Создаем каталог для логов сервера:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn:
systemctl enable [email protected]
И запускаем его:
systemctl start [email protected]
Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.
Генерируем сертификаты для клиента. Для этого переходим в каталог easy-rsa (если мы из него выходили):
Запускаем еще раз vars:
Создаем запрос и сам сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
* как и при генерировании сертификата сервера, подтверждаем правильность данных и вводим пароль корневого сертификата. В данном примере мы создадим сертификат для client1.
На сервере скопируем ключи во временную директорию, выполнив последовательно 3 команды:
mkdir /tmp/keys
cp pki/issued/client1.crt pki/private/client1.key pki/dh.pem pki/ca.crt pki/ta.key /tmp/keys
chmod -R a+r /tmp/keys
* сертификаты скопированы в каталог /tmp для удобства переноса их на клиентский компьютер.
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее файлы ca.crt, client.crt, client.key, dh2048.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.
После переноса файлов, не забываем удалить ключи из временного каталога на сервере:
# rm -R /tmp/keys
Теперь возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
clientresolv-retry infinitenobindremote 192.168.0.15 443proto udpdev tuncomp-lzoca ca.crtcert client1.crtkey client1.keydh dh.pemtls-clienttls-auth ta.key 1floatkeepalive 10 120persist-keypersist-tunverb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
Для настройки доступа к локальной сети, воспользуйтесь инструкцией Настройка доступа к локальной сети клиентам OpenVPN в CentOS 7.
Позволяет требовать от пользователя ввод логина и пароля при каждом подключении. Также идентификация каждого пользователя необходима для уникальной идентификации каждого из них и выдачи разных IP-адресов.
Открываем конфигурационный файл openvpn:
И добавляем следующую строчку:
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
* как путь, так и название файла openvpn-plugin-auth-pam.so могут отличаться. Это зависит от версии Linux и OpenVPN. Чтобы найти путь до нужного файла, можно воспользоваться командой find / -name “openvpn-*auth-pam*” -print.
Перезапускаем сервер:
systemctl restart [email protected]
Создаем учетную запись для авторизации:
useradd vpn1 -s /sbin/nologin
passwd vpn1
В конфигурационный файл клиента добавляем:
auth-user-pass
Можно пробовать подключаться.
Если необходимо настроить авторизацию, но автоматизировать вход клиента, открываем конфигурационный файл последнего и строку для авторизации меняем на:
auth-user-pass auth.txt
* где auth.txt — файл, в котором мы будем хранить логин и пароль.
Создаем текстовый файл auth.txt в той же папке, где находится файл конфигурации со следующим содержимым:
usernamepassword
* где username — логин пользователя, а password — пароль.
Переподключаем клиента.
Описанный метод аутентификации является базовым и требует наличие обычной системной учетной записи. Если необходима более сложная авторизация на базе LDAP, можно воспользоваться инструкцией
настройка OpenVPN сервера с аутентификацией через LDAP (написана на базе Linux Ubuntu).
Если необходимо, чтобы клиент OpenVPN запускался при старте операционной системы Windows и подключался к серверу, просто открываем службы и находим OpenVPNService. Переводим его в режим автозапуска:
На сервере для каждого клиента генерируем свой сертификат. Например, для client2 вводим следующие команды:
./easyrsa gen-req client2 nopass
После чего переходим к каталог pki, где находятся новые сертификаты и копируем их на клиентский компьютер. Полный список файлов, которые необходимо копировать:
Также на сервере открываем следующий файл и заносим статический адрес для клиента:
vi /etc/openvpn/ipp.txt
client,172.16.10.4client2,172.16.10.24
* в данном примере клиент client будет получать IP 172.16.10.4, а client2 — 172.16.10.24.
В конфигурационном файле server.conf должна быть строчка:
ifconfig-pool-persist ipp.txt
Теперь на клиенте не забываем указать правильные названия файлов в конфигурационном файле клиента:
cert client2.crtkey client2.key
Пробуем подключиться.
Также статические адреса могут назначаться на основе учетных записей пользователей.
В конфигурационный файл добавим:
client-config-dir ccdusername-as-common-name
Создадим каталог ccd:
mkdir /etc/openvpn/ccd
Создадим файл с индивидуальными настройками пользователя:
vi /etc/openvpn/ccd/vpn1
* где vpn1 — пользователь, под которым будем подключаться по VPN.
Добавляем в него:
ifconfig-push 172.16.10.5 172.16.10.6
* в данном примере мы задали для пользователя vpn1 адрес 172.16.10.5.* возможны варианты — (1, 2) (5, 6) (9, 10) (13, 14) (17, 18) (21, 22) (25, 26) (29, 30) (33, 34) (37, 38) (41, 42) (45, 46) (49, 50) (53, 54) (57, 58) (61, 62) (65, 66) (69, 70) (73, 74) (77, 78) (81, 82) (85, 86) (89, 90) (93, 94) (97, 98) (101, 102) (105, 106) (109, 110) (113, 114) (117, 118) (121, 122) (125, 126) (129, 130) (133, 134) (137, 138) (141, 142) (145, 146) (149, 150) (153, 154) (157, 158) (161, 162) (165, 166) (169, 170) (173, 174) (177, 178) (181, 182) (185, 186) (189, 190) (193, 194) (197, 198) (201, 202) (205, 206) (209, 210) (213, 214) (217, 218) (221, 222) (225, 226) (229, 230) (233, 234) (237, 238) (241, 242) (245, 246) (249, 250) (253, 254).
Перезапускаем openvpn:
Настройка делает так, что клиенты VPN-сервера начинают использовать последний как шлюз по умолчанию. Таким образом, весь трафик идет через наш сервер.
Открываем на сервере конфигурационный файл:
и добавляем:
push “redirect-gateway def1”push “dhcp-option DNS 77.88.8.8”
* сервер должен быть настроен в качестве шлюза. Подробнее в инструкции Настройка Интернет шлюза на CentOS 7.
Диагностировать большинство возникающих ошибок можно с помощью опции verb в конфигах клиента и сервера. В примерах выше значение данного параметра выставлялась в 0 — могут быть такие варианты:
Ниже приведены наиболее часто возникающие проблемы и способы их решения.
Описание: при попытке установить сервер, получаем ошибку.
Причина: не настроен репозиторий для данного пакета.
Решение: устанавливаем EPEL репозиторий:
Описание: при запуске сервера получаем данную ошибку.
Причина: как правило, связано с отсутствием сертификата.
Решение: открываем лог /var/log/openvpn/openvpn.log и смотрим, с каким сертификатом проблема. Проверяем, что все файлы скопированы и что мы не забыли сгенерировать все сертификаты.
Описание: с периодичностью от 1 до 5 минут постоянно рвется соединение с сервером. После нескольких минут переподключается.
Причина: как правило, конфликт IP-адресов. Такая ситуация возникает при случаях, когда подключение выполняется с нескольких компьютеров одновременно с одинаковыми сертификатами.
Решение:
Способ 1. Настройте клиента для подключения к серверу с уникальными сертификатами. Для каждого подключения генерируем свои ключи. Рекомендуется использовать именно этот способ.
Способ 2. Можно настроить сервер openVPN для выдачи различных IP-адресов, независимо от сертификата. Для этого открываем конфигурационный файл:
… и добавляем:
…duplicate-cn
Перезапускаем сервис:
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies