Установка и настройка OpenVPN на сервере под управлением CentOS 7

В данном руководстве будет описан процесс установки и настройки инструмента OpenVPN на виртуальном сервере под управлением CentOS 7. OpenVPN — это открытый программный продукт для создания виртуальных частных сетей и подключения к ним по открытым интернет-каналам.

Прежде чем начать, нужно установить дополнительные пакеты из репозитория Enterprise Linux (EPEL). Это необходимо потому, что OpenVPN недоступен в CentOS по умолчанию. Репозиторий EPEL управляется сообществом Fedora Project и содержит нестандартные для CentOS, но популярные пакеты приложений.

yum install epel-release

Шаг #1: Установка пакета OpenVPN

Прежде всего, необходимо установить OpenVPN. Также мы установим инструмент Easy RSA — он будет использоваться для создания пар SSL-ключей, которые обеспечат безопасность VPN-соединений.

yum install openvpn easy-rsa –y

Шаг #2: Настройка сервиса

В директории документации OpenVPN содержатся файлы с тестовыми конфигурациями программы. Скопируем файл server.conf — на его основе мы создадим свою конфигурацию.

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

Теперь откроем его для редактирования:

nano /etc/openvpn/server.conf

Здесь нужно будет внести несколько изменений. Когда в дальнейшем мы будем генерировать ключы в программе Easy RSA, их размер будет по умолчанию составлять 2048 байт, поэтому нужно убедиться, что соответствующее значение указано в файле настроек. Нужно изменить название файла dh на dh2048.pem:

dh /etc/openvpn/dh2048.pem

Затем нужно раскомментировать (удалить символ “;”) строку, которая сообщает клиенту о необходимости редиректа трафика через OpenVPN.

push redirect-gateway def1 bypass-dhcp

Затем нужно указать DNS-серверы, поскольку клиентские приложения не смогут использовать серверы интернет-провайдера.

Для этого нужно раскомментировать строки, начинающиеся с push "dhcp-option DNS" для передачи DNS-серверов клиенту:

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Нам нужно, чтобы OpenVPN запускался без привилегий, поэтому нужно указать, что он запускается от имени пользователя и группы nobody. Для этого нужно раскомментировать соответствующие строки:

user nobody
group nobody

Также нужно указать пути до сгенерированных ранее сертификатов и ключей:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key #This file should be kept secret
tls-auth /etc/openvpn/ta.key 0 # This file is secret

Затем нужно сохранить файл и выйти из него. Для этого используйте в редакторе nano сочетание клавиш CTRL+X, затем подтвердите сохранение файла нажатием Y

Шаг #3: Создание ключей и сертификатов

После завершения работы с конфигурационным файлом, нужно создать ключи и сертификаты. Пакет Easy RSA включает скрипты, с помощью которых можно это сделать.

Создадим директорию, в которой будут храниться ключи:

mkdir -p /etc/openvpn/easy-rsa/keys

В эту директорию нужно скопировать скрипты для генерации ключей и сертификатов:

cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Примечание: Если на данном этапе вы увидели ошибку (отсутствие директории 2.0), значит в вашем дистрибутиве OpenVPN по-умолчанию используется более поздняя версия easy-rsa. В этом случае вручную скачайте easy-rsa и скопируйте содержимое архива, последовательно выполнив команды:

cd /usr/share/easy-rsa
wget https://codeload.github.com/OpenVPN/easy-rsa-old/tar.gz/2.3.3
tar xvzf 2.3.3
cd easy-rsa-old-2.3.3
cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Также следует предотвратить возможность сбоя загрузки конфигурации SSL из-за невозможности определения версии программы. Для скопируем нужный конфигурационный файл и удалим из названия номер версии:

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Теперь создадим ключи и сертификаты. Для этого перейдем в директорию easy-rsa и запустим команду source для новых переменных:

cd /etc/openvpn/easy-rsa
source ./vars

Затем нужно удалить все предыдущие версии ключей и сертификатов, которые могут содержаться в этой директории:

./clean-all

Также нужно сгенерировать файл обмена по алгоритму Диффи-Хеллмана. Процесс может занять несколько минут:

./build-dh

Указываем информацию об организации, выдавшей сертификат:

./build-ca

Система задаст несколько вопросов - можно просто нажимать Enter вместо ответа или указать информацию о вашей организации.

Теперь нужно сгенерировать ключ и сертификат сервера. И снова можно просто нажимать Enter в ответ на вопросы системы. Единственное обязательное поле: common name - укажите здесь значение server. Чтобы сохранить данные, в конце процедуры следует нажать Y (yes).

./build-key-server server

Сгенерируем дополнительный ключ ta.key.

openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key

Теперь скопируем созданные сертификаты и ключи в директорию OpenVPN.

cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn

Всем клиентским приложениям для установления связи также понадобятся эти ключи и сертификаты. Лучше создавать отдельные ключи для каждого пользовательского приложения и давать ключам описательные имена. Сейчас же мы рассматриваем ситуацию с одним клиентом, поэтому назовем его просто client:

cd /etc/openvpn/easy-rsa
./build-key client

Шаг 4: Маршрутизация

Чтобы упростить настройку, проведем все манипуляции с помощью стандартного фаервола iptables, а не нового инструмента firewallcd.

Прежде всего надо убедиться в том, что сервис iptables установлен и включен.

yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush

Примечание: На следующем шаге вам потребуется имя основого (внешнего) сетевого интерфейса сервера (например, вида eth* или ens*). Запомните это имя, выполнив команду ниже и выбрав тот сетевой интерфейс, которому назначен основной IP-адрес сервера, отображаемый в панели 1cloud:

ifconfig -a

Затем следует добавить в iptables правило, согласно которому соединения будут направляться в создаваемую подсеть OpenVPN:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <имя_интерфейса> -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

Например:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

Активируем IP-форвардинг в sysctl, отредактировав файл sysctl.conf для редактирования:

nano /etc/sysctl.conf

В самом верху добавляем следующую строку:

net.ipv4.ip_forward = 1

Сохраним документ нажатием CTRL+X, Y, Enter.

Перезапускаем сетевой сервис для применения внесенных изменений:

systemctl restart network.service

Шаг 5: Запуск OpenVPN

Теперь все готово к запуску OpenVPN. Добавим этот сервис в systemctl:

systemctl -f enable openvpn@server.service

Запускаем OpenVPN:

openvpn --config /etc/openvpn/server.conf --daemon

На этом конфигурация со стороны сервера завершена. Проверим, что в системе успешно добавился новый виртуальный сетевой адаптер:

ifconfig

Настроим подключение со стороны клиента.

Шаг 6: Настройка клиента

Вне зависимости от того, какая операционная система установлена на клиентском устройстве, для соединения с сервером все равно потребуются ключи и сертификаты, сгенерированные на сервере.

Необходимые сертификаты (в нашем случае для клиента "client") хранятся в директории /easy-rsa:

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key

Загрузить эти файлы на клиентское устройство можно с помощью SFTP или другим способом. Можно даже просто открыть их в текстовом редакторе и скопировать содержимое в новые файлы, созданные прямо непосредственно на пользовательском компьютере (главное - сохранить под идентичными именами).

Теперь создадим файл под client.ovpn - конфигурационный файл для клиента OpenVPN. В нем содержатся параметры подключения к серверу. Ниже представлено содержимое этого файла, в котором необходимо заменить имя клиента (в нашем случае client), указать корректный ip-адрес сервера и верный путь к файлам сертификатов и ключей:

client
dev tun
proto udp
remote <IP-адрес сервера> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key

Теперь этот файл можно использовать для подключения к серверу.

Подключение с компьютера под управлением Windows:

Скачиваем официальную версию бинарных файлов OpenVPN Community Edition с графическим интерфейсом управления.

Перемещаем .ovpn-файл в директорию C:\Program Files\OpenVPN\config, затем нажимаем Connect в графическом интерфейсе OpenVPN.

MacOS:

Для соединения можно использовать open-source инструмент Tunnelblick. Перемещаем .ovpn-файл в директорию ~/Library/Application Support/Tunnelblick/Configurations или просто кликнаем по этому файлу.

Linux:

На Linux нужно установить OpenVPN из официальных репозиториев конкретного дистрибутива. Затем запустить его с помощью команды:

sudo openvpn --config ~/path/to/client.ovpn

На этом все. Теперь у нас есть полностью функциональная частная виртуальная сеть с собственным OpenVPN-сервером на CentOS 7 VPN.

После успешного подключения клиента следует проверить, туннелируется ли трафик через VPN. Сделать это можно с помощью любого сервиса, показывающего ваш публичный IP-адрес (например, Google) - он должен отображать адрес VPN-сервера.


Ознакомиться с другими инструкциями вы можете на нашем сайте. А чтобы попробовать услугу — кликните на кнопку ниже.

Последнее обновление: 07.12.2021