Настройка сервера openvpn на centos 8
Содержание:
Настройка клиента
На сервере:
На сервере генерируем сертификат для клиента. Для этого сначала чистим файл index.txt в папке C:\Program Files\OpenVPN\easy-rsa\keys.
Затем запускаем командную строку от имени администратора:
Переходим в каталог easy-rsa:
cd %ProgramFiles%\OpenVPN\easy-rsa
Запускаем vars.bat:
vars.bat
И генерируем сертификат первого пользователя:
build-key.bat client1
* на все запросы наживаем Enter, кроме Common Name — в данном поле вводим имя клиента (в нашем случае, просто client1). В конце подтверждаем введенную информацию — y.
** На каждого клиента нужно сгенерировать свой сертификат, в противном случае, им будет присваиваться один и тот же IP-адрес, что будет приводить к конфликту.
Получиться, что-то на подобие:
По умолчанию, для Common Name будет подставляться значение из vars.bat — но с ним сертификат не будет создаваться. Необходимо при создании каждого ключа подставлять значение, равное имени сертификата. Например, как выше — подставлено client1.
Теперь из папки keys копируем файлы:
- client1.crt
- client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
На клиенте:
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
* по сути, это тот же файл, который скачивался для сервера.
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:\Program Files\OpenVPN\config. И копируем в нее сертификаты, которые перенесли с сервера.
Теперь открываем блокнот от имени администратора и вставляем следующие строки:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
float
cipher DES-CBC
keepalive 10 120
persist-key
persist-tun
verb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы. Для боевой среды это будет внешний адрес.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно). Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
3: Генерирование сертификатов и ключей клиента
Ранее вы установили и настроили сервер OpenVPN, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN. Эти файлы позже нужно будет установить на клиентские устройства, такие как ноутбук или смартфон.
Создание ключей и сертификатов
Рекомендуется использовать индивидуальные ключи и сертификаты для каждого клиента, которого вы собираетесь подключить к VPN.
Примечание: По умолчанию OpenVPN не поддерживает одновременных клиентских подключений к серверу, созданных с помощью одного сертификата и ключа (см. duplicate-cn в /etc/openvpn/server.conf).
Чтобы создать индивидуальные учетные данные для каждого устройства, которое вы собираетесь подключить к VPN, вы должны повторить этот раздел для каждого из них (но при этом нужно менять имя клиента, например client2 или iphone2). При наличии индивидуальных учетных данных устройства можно впоследствии деактивировать в индивидуальном порядке. В этом руководстве в примерах используется имя клиента client1.
Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.
Вам будет снова предложено изменить или подтвердить переменные и эти две строки, которые должны быть пустыми. Нажмите Enter, чтобы принять значения по умолчанию.
Как и раньше, следующие две строки в конце процесса сборки требуют ответа y:
Если сборка ключей была успешной, результат снова будет выглядеть так:
Пример конфигурационного файла клиента также должен быть скопирован в каталог ключей Easy-RSA. Мы будем использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение .ovpn.
Повторите этот раздел для всех своих клиентов, меняя имя клиента.
Передача ключей и сертификатов на клиентские устройства
Напомним, что клиентские сертификаты и ключи хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.
Теперь необходимо перенести файлы сертификата клиента, ключа и профиля в папку на этом клиентском устройстве.
Например, в данном случае файлы должны располагаться в etc/openvpn/easy-rsa/keys/client1.crt и /etc/openvpn/easy-rsa/keys/client1.key
Файлы ca.crt и client.ovpn одинаковы для всех клиентов
Загрузите эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге
Выбор приложения для передачи зависит от вас и от операционной системы устройства, но рекомендуется выбирать приложения с поддержкой SFTP (протокол передачи файлов SSH) или SCP (Secure Copy). Это передаст файлы клиента по зашифрованному соединению.
Ниже приведен пример команды SCP. Она помещает файл client1.key в каталог Downloads на локальном компьютере.
Также вы можете использовать следующие приложения и мануалы:
- WinSCP
- Использование SFTP для безопасного обмена файлами с удаленным сервером
- Безопасное управление файлами сервера с помощью Filezilla
Затем убедитесь, что на клиентском устройстве есть эти файлы:
- client1.crt
- client1.key
- client.ovpn
- ca.crt
Step 5 — Configuring Domain Names
In this step, we will configure our domain name to redirect traffic for the intranet while also serving the publicly accessible website. Before starting this article, you should have pointed your domain name to DigitalOcean’s name servers.
Note: If you have your own name servers, you’ll want to make these settings in your DNS provider’s control panel instead.
Log into your DigitalOcean account and click on the Networking tab in the top bar. You’ll then see a screen like the following:
To add a domain to your DigitalOcean account, type in your domain name in the first box under the Add a domain heading. In the second box type in the public IP of your intranet server, and click on the Create record button.
Your new domain name will then appear under the Domains subheading as in the second picture. Now click on More next to the domain you want to use, and then select View domain.
This will open up the settings page for that specific domain.
We need to add three records for this domain. One for the Intranet, and two more to ensure that requests for our public website is resolved correctly.
First, create a record for the intranet.
- Click on the orange ‘A’ box under Select record type.
- Enter into the Enter Name field.
- For the IP address, enter the private IP address for your server, which should be .
Next, we need a a record that directs non-intranet traffic to the right place. Create another ‘A’ record, set the name to and set the IP to your server’s public IP.
Finally, create a CNAME record for . Click on the CNAME tab in the top corner, set the name to and enter your domain name ( as the Hostname:
When you are done, your domain records should look like the following image:
The A-record directs requests to only if it originates from the VPN server. This means that only clients connected to the VPN would be able to access web content hosted on . The second ‘A’ record and CNAME record direct traffic that does not have access to the intranet to the publicly available web site.
Note: It may take up to 72 hours for these DNS changes to propagate.
Go to your browser and visit without being connected to the VPN. You should see your browser trying to load the web page only to return an error. Now connect to your VPN and reload the web page. You can now access the web page, as the DNS entry will resolve.
Now that we have thoroughly configured and tested our intranet, let’s look at how we manage access to this newly created network.
4: Создание единого профиля OpenVPN для клиентов
Существует несколько способов управления клиентскими файлами, но самый простой – это использовать единый профиль. Профиль создается путем изменения файла шаблона client.ovpn и добавления центра сертификации сервера, сертификата клиента и его ключа. После этого в приложение OpenVPN клиента необходимо импортировать только профиль client.ovpn.
Создайте единый профиль для клиентского устройства client1 на локальном компьютере, в который загрузите все клиентские файлы. Этот локальный компьютер может быть клиентом или просто временной рабочей областью для объединения файлов аутентификации. Исходный файл шаблона client.ovpn нужно скопировать и переименовать. Как вы это сделаете, зависит от операционной системы вашего локального компьютера.
Примечание. Имя дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора для самого VPN-соединения. Скопируйте client.ovpn с таким названием, которое будет использовать VPN в вашей операционной системе. Например: work.ovpn будет определяться как рабочая сеть, school.ovpn – как школьная и т.д.
В мануале соединение VPN будет называться 8host.ovpn. Откройте файл 8host.ovpn в текстовом редакторе.
Укажите вместо my-server-1 IP-адрес VPN.
Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.
В приведенном ниже разделе нужно закомментировать три строки, чтобы включить сертификат и ключ непосредственно в файл 8host.ovpn. Это должно выглядеть следующим образом:
Чтобы объединить отдельные файлы в единый профиль, содержимое файлов ca.crt, client1.crt и client1.key нужно вставить непосредственно в профиль .ovpn с помощью базового синтаксиса, подобного XML:
В результате в конце файла будут такие строки:
В файле client1.crt есть дополнительная информация; вы можете просто включить весь файл.
Сохраните изменения и выйдите из редактора. Теперь у вас есть единый профиль клиента OpenVPN для настройки client1.
1: Установка и настройка среды OpenVPN
Этот раздел поможет выполнить настройку серверной среды.
Установка и настройка OpenVPN
Для начала установите пакет OpenVPN на сервер. Пакет OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому для установки можно использовать apt. Также вам понадобится пакет easy-rsa, который поможет создать внутренний центр сертификации (ЦС или CA) для VPN.
Обновите индекс пакетов и установите необходимые программы:
Образец конфигурационного файла VPN нужно извлечь из /etc/openvpn и добавить его в свою установку. Для этого используйте команду:
Затем откройте server.conf в текстовом редакторе:
В файл нужно внести пару изменений. Найдите такой раздел:
Обновите строку dh1024.pem:
Это увеличит длину RSA-ключа.
Затем найдите такой раздел:
Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер OpenVPN.
После этого найдите это раздел:
Раскомментируйте строки push «dhcp-option DNS 208.67.222.222» и push «dhcp-option DNS 208.67.220.220».
Так сервер сможет использовать OpenDNS на подключенные клиенты для разрешения DNS, если это возможно. Это поможет предотвратить утечку DNS-запросов за пределы VPN-соединения
Однако на клиентских устройствах важно указать желаемые DNS-решения. Хотя OpenDNS используется в OpenVPN по умолчанию, вы можете использовать любые другие DNS-сервисы
Теперь найдите раздел:
Раскомментируйте обе строки:
По умолчанию OpenVPN работает как пользователь root и, таким образом, имеет полный корневой доступ к системе. OpenVPN нужно ограничить в правах, и для этого нужно использовать nobody и nogroup. Это непривилегированный пользователь, не имеющий возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений.
Сохраните и закройте файл.
Маршрутизация пакетов
Это параметр sysctl, который сообщает ядру сервера пересылать трафик с клиентских устройств в Интернет. В противном случае трафик остановится на сервере. Включить пересылку пакетов можно с помощью этой команды:
Сделайте это значение постоянным, чтобы оно восстанавливалось после перезагрузки:
В начале файла будет:
Раскомментируйте net.ipv4.ip_forward.
Сохраните и закройте файл.
Настройка брандмауэра ufw
ufw является интерфейсом iptables. Настройка ufw довольно проста. Этот брандмауэр по умолчанию входит в Ubuntu 14.04, поэтому нам нужно только добавить несколько правил и внести пару изменений в конфигурации, а затем включить его.
Сначала включите поддержку SSH:
В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.
Необходимо также настроить политику маршрутизации UFW. Мы сделаем это в главном файле конфигурации UFW.
Найдите DEFAULT_FORWARD_POLICY=»DROP». Значение в кавычках замените на ACCEPT.
Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.
Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:
Теперь можно включить брандмауэр:
Выберите y:
Теперь проверьте правила и состояние брандмауэра:
Certificate Authority (CA)
For security purposes, it is recommended that the CA machine be separate from the machine running OpenVPN.
On the CA machine, install , initialize a new PKI and generate a CA keypair that will be used to sign certificates:
# cd /etc/easy-rsa # export EASYRSA=$(pwd) # easyrsa init-pki # easyrsa build-ca
Append the following lines to to make Easy-RSA use elliptic curves:
/etc/easy-rsa/vars
set_var EASYRSA_ALGO ec set_var EASYRSA_CURVE secp521r1 set_var EASYRSA_DIGEST "sha512"
Now set up PKI and generate a CA certificate:
# cd /etc/easy-rsa # export EASYRSA=$(pwd) # export EASYRSA_VARS_FILE=/etc/easy-rsa/vars # easyrsa init-pki # easyrsa build-ca
Revoking certificates and alerting the OpenVPN server
Revoke a certificate
Over time, it may become necessary to revoke a certificate thus denying access to the affected user(s). This example revokes the «client1» certificate.
On the CA machine:
# cd /etc/easy-rsa # easyrsa revoke client1 # easyrsa gen-crl
This will produce the CRL file that needs to be transferred to the OpenVPN server and made active there.
Alert the OpenVPN server
On the CA machine:
# cp /etc/easy-rsa/pki/crl.pem /tmp # chown foo /tmp/crl.pem
On the OpenVPN machine, copy and inform the server to read it:
# mv /tmp/crl.pem /etc/openvpn/server/ # chown root:root /etc/openvpn/server/crl.pem
Edit uncommenting the crl-verify directive, then restart openvpn-server@server.service to re-read it:
/etc/openvpn/server/server.conf
. crl-verify /etc/openvpn/server/crl.pem .