В данном руководстве будет описан процесс установки и настройки инструмента 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-адрес сервера, отображаемый в панели
# 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-сервера.