Сегодня в этой статье мы обсудим установку и настройку собственного OpenVPN сервера на Linux-дистрибутив Ubuntu 20.04.
Что такое и для чего вам нужен VPN?
Виртуальная Частная Сеть (Virtual Private Network) - сеть, в которой участвуют 2 и более устройства, между которыми происходит зашифрованный обмен данными. Авторизация клиента происходит по секретному слову (паролю), или же по специальному сертификату.
Принцип работы VPN сети схож с оным в обычных локальных сетях, за исключением того, что при VPN соединении устройства могут находиться где угодно.
VPN соединения часто используются в корпоративном сегменте для организации сети между филиалами (как пример - объединения нескольких филиалов с центральным офисом) для доступа и обмена информацией между ними (доступ к файлам, удаленный рабочий стол, мониторинг инфраструктуры т.п.)
Для простых пользователей зачастую использование VPN сводится к простой задаче, получение доступа к определенным сервисам, не работающим в конкретной стране, регионе, или же анонимизацией трафика, скрытия актуального IP адреса устройства пользователя.
Подключаемся и устанавливаем OpenVPN
В данной статье мы рассмотрим объединение в сеть нескольких устройств и доступ к файлам на центральном устройстве (сервере)
Для начала нам необходим ПК или выделенный сервер в облаке с установленной на него Ubuntu 20.04 (руководство по установке вы можете найти в интернете)
В качестве сервера я буду использовать вируальную машину с установленной Ubutnu 20.04 Server, выпущенную в сеть, и имеющую статический белый IP адрес и открытый извне порт 4321
Подключаемся к серверу по SSH (рекомендую под Windows использовать клиент Putty) с использование логина-пароля пользователя с правами sudo
P.S. Если вы используете на сервере desktop-редакцию Ubuntu (с графической оболочкой), то все описанные ниже действия вы так же можете проводить в приложении “Терминал”, в меню приложений Ubuntu
Перед нами появляется запрос проверки подлинности сертификата SSH - соглашаемся, так как мы знаем, что это действительно наш сервер
После того как мы вошли на сервер, выполняем проверку и установку последних обновлений
sudo apt update sudo apt upgrade
По окончании обновления устанавливаем пакеты OpenVPN и EasyRSA - первый - собственно наш сервер, а второй - для генерации сертификатов и публичных ключей подключающихся к нему пользователей
sudo apt install openvpn easy-rsa
По завершении установки мы можем приступить к конфигурированию будущего сервера.
OpenVPN. Готовим среду для создания сертификатов
В начале нам потребуются сертификаты и ключи для создания безопасного соединения клиент-сервер. Так как сертификаты будем выпускать свои, воспользуемся ранее скачанным инструментом EasyRSA
Для удобства создадим папку в /opt и поместим копию инструментария в отдельную подпапку, например /opt/ovpn/
sudo mkdir /opt/ovpn sudo mkdir /opt/ovpn/easy-rsa
Копируем EasyRSA
sudo cp -R /usr/share/easy-rsa /opt/ovpn/
Теперь переходим в папку и приступаем к созданию сертификатов
cd /opt/ovpn/easy-rsa/ sudo ./easyrsa init-pki
Команда выше подготавливает среду для создания ключей и сертификатов
После подготовки мы можем начать с генерации CA-ключа (Ключ центра сертификации сервера).
sudo ./easyrsa build-ca
Будет запрошен пароль, необходимый для защиты от несанкционированного выпуска клиентских сертификатов третьими лицами в случае доступа к серверу. Рекомендуется использовать сложный, но в то же время запоминающийся пароль.
При запросе Common Name - вводим имя сервера (в примере он указан как OVPN-SERVER1)
OpenVPN. Создаем сертификат сервера
После подготовки CA мы можем подать на него запрос о выпуске сертификата для нашего сервера - с его помощью мы в последствии и сможем выпустить сертификат, с которым клиенты смогут убедиться в подлинности данного сервера
sudo ./easyrsa gen-req server nopass
У вас будет запрошено Common Name - вводим имя вашего будущего сервера
Далее вам следует подтвердить запрос на выпуск сертификата командой
sudo ./easyrsa sign-req server server
У вас будет запрошено подтверждение выпуска - вводим “yes” и нажимает ENTER, после чего вводим пароль от CA сертификата
Далее нам необходим TLS (transport layer security, или HMAC) ключ для безопасной авторизации клиентов. Генерируем его следующей командой
sudo openvpn --genkey --secret /opt/ovpn/easy-rsa/pki/ta.key
После создания TLS ключа также создаем ключ DH (Диффи Хеллмана)
sudo ./easyrsa gen-dh
Эта процедура займет от 1 до 5 минут, в зависимости от мощности ЦП вашего сервера
Сертификаты сервера успешно созданы, теперь для удобства копируем их в папку /opt/ovpn/keys
sudo mkdir -p /opt/ovpn/keys sudo cp -r pki/ /opt/ovpn/keys
Создаем сертификаты пользователей
Для подключения пользователей необходимо сертификаты. Для этого с помощью того же EasyRSA генерируем сертификат клиента без пароля (в примере будет использоваться вход только по сертификату)
sudo ./easyrsa build-client-full user1 nopass
Где user1 - имя нашего будущего пользователя
Настраиваем параметры сервера и производим первый запуск
Перед тем как запускать сервер необходимо правильно прописать в конфигурации пути до созданных сертификатов, IP адреса пула VPN а так же другие параметры, о которых будет сказано ниже. Для начала мы создадим базовую конфигурацию сервера. Создаем ее с помощью редактора Nano по пути /etc/openvpn/server.conf
sudo nano /etc/openvpn/server.conf
Копируем в созданный файл следующие строки
local 192.168.1.128 port 4321 proto udp dev tun ca /opt/ovpn/keys/pki/ca.crt cert /opt/ovpn/keys/pki/issued/server.crt key /opt/ovpn/keys/pki/private/server.key dh /opt/ovpn/keys/pki/dh.pem tls-auth /opt/ovpn/keys/pki/ta.key 0 server 10.11.12.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 360 max-clients 10 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 4 mute 20 daemon mode server tls-server
Подробнее обо всех параметрах вы можете прочесть на официальном сайте OpenVPN, или в файле-примере (https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/server.conf).
На данный момент нас интересуют несколько пунктов:
local — IP-адрес нашего сервера, с которого будут приходить подключения от клиентов port — порт, который должен быть открыт извне, для подключения клиентов. В нашем случае - 4321 ca — сертификат нашего локального центра сертификации cert — открытый сертификат сервера key — закрытый сервера. dh — ключ DH (Диффи Хеллмана) tls-auth — TLS ключ авторизации server — IP адрес сервера в сети VPN max-clients — максимальное число подключений пользователей
Проверяем правильность всех параметров, сохраняем и выходим из Nano комбинацией ctrl+x
Теперь создадим папку для хранения логов, куда будет писаться журнал состояния сервера
sudo mkdir /var/log/openvpn
С конфигурированием сервера мы закончили, теперь мы можем попробовать запустить его командой
sudo systemctl enable openvpn@server --now
И проверить его статус
sudo systemctl status openvpn@server
Перед тем, как мы будем подключать клиента к нашему серверу, нам необходимо скопировать клиентские сертификаты в удобную для доступа папку, для дальнейшей их загрузки. Выполняем на сервере команды, приведенные ниже
sudo mkdir /opt/ovpn/cli_keys sudo cp pki/issued/user1.crt pki/private/user1.key pki/ca.crt pki/ta.key /opt/ovpn/cli_keys sudo chmod -R a+r /opt/ovpn/cli_keys
После чего набор клиентских сертификатов будет сохранен в папку /opt/ovpn/cli_keys, откуда позже мы их можем скачать
Загрузка и установка клиента OpenVPN на систему Windows
Для начала нам необходимо с помощью утилиты WinSCP (Скачать для Windows) подключиться и скачать подготовленные клиентские сертификаты (которые мы сохранили в папке /opt/ovpn/cli_keys на сервере)
Заходим в WinSCP и подключаемся к нашему серверу
Переходим в каталог /opt/ovpn/cli_keys и копируем содержимое в любую удобную для вас папку на клиентскую машину
После чего скачиваем последнюю версию OpenVPN по ссылке - https://openvpn.net/community-downloads/ и устанавливаем без изменения галочек и пути установки
По окончании установки OpenVPN переходим в папку
C:\Program Files\OpenVPN\config - для 64 битной Windows
C:\Program Files x86\OpenVPN\config - для 32 битной Windows
и копируем туда ранее скачанные сертификаты клиента из папки cli_keys
В том же каталоге создаем файл config.ovpn и открываем его с помощью текстового редактора (например “Блокнот” или "Notepad++")
В этот файл копируем приведенную ниже базовую конфигурацию клиента
client resolv-retry infinite nobind remote 12.221.98.11 4321 proto udp dev tun ca ca.crt cert user1.crt key user1.key tls-client tls-auth ta.key 1 float keepalive 10 120 persist-key persist-tun verb 3
где 12.221.98.11 - IP адрес сервера, доступный из вне (белый IP адрес), а 4321- порт, указанный в конфигурации сервера
Сохраняем файл и запускаем OpenVPN от имени администратора
В трее появится значок OpenVPN, щелкаем по нему правой кнопкой и выбираем “Подключиться”
Если все прошло успешно, то вы увидите лог подключения и уведомление о присвоении адреса VPN
Поздравляем! Теперь вы можете пользоваться удаленными ресурсами на сервере с вашего клиентского ПК, к примеру, подключаться к серверу по SSH для удаленного управления - сервером будет являться первый адрес из пула VPN - в данном примере - 10.11.12.1
Для доступа к локальной сети сервера, в конфиг OpenVPN (/etc/openvpn/server.conf) достаточно добавить
push "route 10.11.12.0 255.255.255.0" push "route 192.168.111.0 255.255.255.0"
Где 10.11.12.0 - подсеть нашего VPN, а 192.168.111.0 - подсеть локальной сети сервера
После чего перезапустить его командой
sudo systemctl restart openvpn@server
Читай как установить Docker на Ubuntu в нашей статье