VPN пользуется большой популярностью: с его помощью люди могут безопасно выходить в интернет, обходить ограничения на сайтах. Кроме того, VPN позволяет подключаться к корпоративным порталам, если доступ к ним разрешен только сотрудникам компании.
Но что делать, если вы не хотите указывать свои данные в VPN-сервисах? В таком случае вы можете заказать собственный сервер и установить на него программу OpenVPN. Об этой процедуре мы расскажем в статье и ответим на два вопроса:
- Как установить OpenVPN на серверную ОС (например Ubuntu)?
- Как настроить OpenVPN на сервере?
Начнем с теории.
Что такое OpenVPN и зачем он нужен
Прежде чем рассказать об OpenVPN, дадим общее описание технологии VPN.
VPN (Virtual Private Network) — это виртуальная частная сеть. Чтобы рассказать о ней подробнее, разделим понятие виртуальной частной сети на три части:
- Сеть — это несколько узлов (например, компьютеров или серверов), которые соединены между собой. Сети используются для обмена данными между узлами: на этом строится работы многих сервисов.
- Частная — это сеть, которая строится “поверх” Всемирной паутины: к ней могут подключиться только те пользователи, которым выдан доступ. Информация об этих пользователях маркируется и защищается шифром — так она не попадет в общий доступ.
- Виртуальная — то есть независимая от физических комплектующих. В виртуальной сети узлы связаны между собой при помощи “виртуальных кабелей” — программного обеспечения.
По своей сути VPN-соединение — это зашифрованный канал между компьютером и сервером. Создание такого “туннеля” происходит по следующему алгоритму:
- Вы подключаетесь к VPN с компьютера, вводя логин и пароль.
- Сервер идентифицирует сеть и сверяет ваши аутентификационные данные с собственной базой. Если логин и пароль совпали, между компьютером и сервером устанавливается соединение.
- Компьютер направляет запрос со своего IP-адреса (его выдает интернет-провайдер) на сервер.
- Сервер отвечает на запрос и присваивает вашему компьютеру другой IP. Компьютер будет подключаться к сервисам под новым адресом.
OpenVPN — это инструмент, который позволяет создать собственный VPN на сервере. Благодаря гибким настройкам OpenVPN вы можете сделать подключение к серверу безопасным — это достигается при помощи шифрования входящего и исходящего трафика.
OpenVPN можно установить на любую из популярных операционных систем: например на Windows, MacOS, Android, iOS, ChromeOS и ОС семейства Linux.
В качестве примера ниже описана настройка OpenVPN на ОС Ubuntu.
Как сделать свой VPN-сервер на VPS
Для того чтобы создать свой ВПН-сервер с помощью OpenVPN, вам понадобится VDS (VPS) любой мощности с предустановленной ОС Ubuntu версии 22.04.
Создание сервера VPN проводится в несколько этапов:
- Установка OpenVPN на VPS
- Создание удостоверяющего центра
- Создание ключей клиентов
- Настройка конфигурационного файла
- Включение маршрутизации трафика
Каждый этап установки и настройки требует подключения по SSH. Это можно сделать по инструкции.
Установка OpenVPN на VPS с Ubuntu
Чтобы установить OpenVPN:
- Обновите пакеты:
sudo apt update
sudo apt upgrade - Установите OpenVPN на сервер (server) Ubuntu:
sudo apt install openvpn easy-rsa net-tools
Создание удостоверяющего центра
- Скопируйте файлы OpenVPN в директорию /etc/openvpn/:
sudo cp -R /usr/share/easy-rsa /etc/openvpn/
Затем перейдите в папку с копиями файлов:cd /etc/openvpn/easy-rsa
- Сгенерируйте удостоверяющий центр и его корневой сертификат. Для этого поочередно выполните следующие команды:
export EASYRSA=$(pwd)
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca
Далее введите пароль: он будет использоваться для подписи ключей и сертификатов в будущем.
После этого будут созданы два файла:
/etc/openvpn/easy-rsa/pki/ca.crt — сертификат,
/etc/openvpn/easy-rsa/pki/private/ca.key — приватный ключ. - Создайте отдельную директорию для файлов сертификата:
- Переместите файл сертификата в созданную директорию:
cp /etc/openvpn/easy-rsa/pki/ca.crt
/etc/openvpn/certs/ca.crt
mkdir /etc/openvpn/certs/
На следующих этапах будет описана настройка OpenVPN на VPS.
Создание серверных ключей
- Создайте закрытый ключ и файл запроса. Для этого выполните команду:
./easyrsa gen-req server nopass
- Подпишите файлы с помощью ключа, созданного на предыдущем этапе:
./easyrsa sign-req server server
После этого подтвердите действие и введите пароль, который вы сгенерировали ранее. - Скопируйте файл запроса и приватный ключ. Для этого поочередно выполните команды:
cp /etc/openvpn/easy-rsa/pki/issued/server.crt
/etc/openvpn/certs/
cp /etc/openvpn/easy-rsa/pki/private/server.key
/etc/openvpn/certs/ - Сформируйте файл параметров по стандарту Diffie–Hellman:
openssl dhparam -out /etc/openvpn/certs/dh2048.pem 2048
- Сгенерируйте HMAC-ключ:
openvpn --genkey --secret /etc/openvpn/certs/ta.key
После выполненных действий в папке /etc/openvpn/certs/ должно быть пять файлов. Проверьте их наличие с помощью команды:
ls -l /etc/openvpn/certs/
Вывод будет иметь следующий вид:
total 24
-rw------- 1 root root 1204 Jan 01 00:00 ca.crt
-rw-r--r-- 1 root root 424 Jan 01 00:05 dh2048. pem
-rw------- 1 root root 4608 Jan 01 00:10 server.crt
-rw------- 1 root root 1704 Jan 01 00:15 server.key
-rw------- 1 root root 636 Jan 01 00:20 ta.key
Создание ключей клиента
- Сгенерируйте закрытый ключ и запрос на сертификат:
./easyrsa gen-req client-1 nopass
- Подпишите файл:
./easyrsa sign-req client client-1
После этого подтвердите действие и введите пароль, который вы сгенерировали ранее.
Настройка конфига сервера OpenVPN на Ubuntu
Конфигурация сервера (server) OpenVPN зависит от настроек, которые прописаны в файле server.conf. В качестве примера мы задействовали стандартные значения.
Для настройки:
- Откройте конфигурационный файл OpenVPN:
sudo nano /etc/openvpn/server.conf
- Добавьте следующее содержимое:
# Порт для OpenVPN
port 1194# Протокол, который использует OpenVPN
;proto tcp
proto udp# Интерфейс
;dev tap
dev tun# Ключи
# Сертификат CA
ca /etc/openvpn/certs/ca.crt
# Сертификат сервера
cert /etc/openvpn/certs/server.crt
# Приватный ключ сервера
key /etc/openvpn/certs/server.key #не распространяется и хранится в секрете# параметры Diffie Hellman
dh /etc/openvpn/certs/dh2048.pem# Создание виртуальной сети и ее параметры
# IP и маска подсети
server 10.8.0.0 255.255.255.0# После перезапуска сервера клиенту будет выдан прежний IP
ifconfig-pool-persist /etc/openvpn/ipp.txt# Установка шлюза по умолчанию
push "redirect–gateway def1 bypass–dhcp"# Разрешить использовать нескольким клиентами одну и ту же пару ключей
# не рекомендуется использовать, закомментирована
;duplicate–cn# Пинговать удаленный узел с интервалом в 10 секунд
# Если узел не отвечает в течение 120 секунд, то будет выполнена попытка повторного подключения к клиенту
keepalive 10 120# Защита от DoS–атак портов UDP с помощью HMAC
remote-cert-tls client
tls-auth /etc/openvpn/certs/ta.key 0 # файл хранится в секрете# Криптографические шифры
cipher AES-256-CBC #для клиентов нужно указывать такой же# Сжатие и отправка настроек клиенту
;compress lz4–v2
;push "compress lz4–v2"# Максимальное число одновременных подключений к OpenVPN (Ubuntu server)
;max–clients 100# Понижение привилегий демона OpenVPN
# после запуска
# Не использовать для Windows
;user nobody
;group nobody# При падении туннеля не выключать интерфейсы, не перечитывать ключи
persist-key
persist-tun# Лог текущих соединений
# Каждую минуту обрезается и перезаписываться
status openvpn–status.log# Логи syslog
# Используется только один. Раскомментировать необходимый# перезаписывать файл журнала при каждом запуске OpenVPN
;log openvpn.log# дополнять журнал
;log–append openvpn.log# Уровень вербальности
#
# 0 тихий, кроме фатальных ошибок
# 4 подходит для обычного использования
# 5 и 6 помогают в отладке при решении проблем с подключением
# 9 крайне вербальный
verb 4# Предупреждение клиента о перезапуске сервера
explicit-exit-notify 1
Важно: если подсеть адресов 10.8.0.0/24 занята другими сервисами, укажите другой IP формата 10.x.x.x.
Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X. - Проверьте конфигурационный файл на ошибки:
openvpn /etc/openvpn/server.conf
Если конфиг настроен корректно, в последней строке вывода вы увидите сообщение Initialization Sequence Completed. - Запустите службу OpenVPN:
systemctl start openvpn@server.service
- Добавьте OpenVPN в автозагрузку:
systemctl enable openvpn@server.service
- Проверьте работу службы:
systemctl status openvpn@server.service
Если служба работает, в выводе отобразится статус Active (running).
Включение маршрутизации трафика
- Создайте новую директорию:
mkdir /root/bin/
- Откройте файл скрипта маршрутизации:
sudo nano /root/bin/vpn_route.sh
- Добавьте строки:
#!/bin/sh
# Сетевой интерфейс для выхода в интернет
DEV='eth0'# Значение подсети
PRIVATE=10.8.0.0/24
if [ -z "$DEV" ]; then
DEV="$(ip route | grep default | head -n 1 | awk '{print $5}')"
fi
# Маршрутизация транзитных IP-пакетов
sysctl net.ipv4.ip_forward=1
# Проверка блокировки перенаправленного трафика iptables
iptables -I FORWARD -j ACCEPT
# Преобразование адресов (NAT)
iptables -t nat -I POSTROUTING -s $PRIVATE -o $DEV -j MASQUERADE
Где:- 10.8.0.0/24 — ваша подсеть,
- eth0 — название сетевого интерфейса. Его можно узнать при помощи команды:
route | grep '^default' | grep -o '[^ ]*$'
Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.
- Назначьте права измененному файлу:
chmod 755 /root/bin/vpn_route.sh
- Запустите скрипт в тестовом режиме:
bash /root/bin/vpn_route.sh
- Если скрипт завершился без ошибок, создайте файл:
sudo nano
/etc/systemd/system/openvpn-server-routing.service - Добавьте строки:
[Unit]
Description=Включение маршрутизации трафика OpenVPN.
[Service]
ExecStart=/root/bin/vpn_route.sh
[Install]
WantedBy=multi-user.target
Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X. - Добавьте созданную службу в автозагрузку:
systemctl enable openvpn-server-routing
Настройка клиента OpenVPN
Чтобы настроить клиентскую часть OpenVPN, необходимо создать файл .ovpn — он понадобится для подключения к VPN. Добавьте в него следующее содержимое:
# Роль
client
# IP сервера OpenVPN
remote 123.123.123.123
# Порт сервера OpenVPN, совпадает с конфигурацией сервера
port 1194
# Интерфейс
dev tun
# Протокол OpenVPN, как на сервере
;proto tcp
proto udp
# Имя хоста, IP-адрес и порт сервера
;remote my–server–1 1194
;remote my–server–2 1194
# Случайный выбор хостов. Если не указано, выбор производится по порядку
;remote–random
# Преобразование имени хоста
# (в случае непостоянного подключения к интернету)
resolv-retry infinite
# Привязка к локальному порту
nobind
# Шлюз по умолчанию
redirect-gateway def1 bypass-dhcp
# При падении туннеля не выключать интерфейсы, не перечитывать ключи
persist-key
persist-tun
# Настройка HTTP прокси при подключении OpenVPN серверу
;http–proxy–retry # retry on connection failures
;http–proxy [proxy server] [proxy port #]
# Отключение предупреждений о дублировании пакетов
;mute–replay–warnings
# Дополнительная защита
remote-cert-tls server
# Ключ HMAC
key-direction 1
# Шифрование
cipher AES-256-CBC
# Сжатие. Если на сервере отключено, не включается
#comp–lzo
# Вербальность журнала
verb 3
# Сертификаты
<ca>
Содержимое файла /etc/openvpn/certs/ca.crt
</ca>
<cert>
Содержимое файла /etc/openvpn/easy-rsa/pki/issued/client-1.crt
</cert>
<key>
Содержимое файла /etc/openvpn/easy-rsa/pki/private/client-1.key
</key>
<tls-auth>
Содержимое файла /etc/openvpn/certs/ta.key
</tls-auth>
Вместо 123.123.123.123 добавьте адрес вашего сервера. Также заполните теги:
- <ca></ca> — данными из файла /etc/openvpn/certs/ca.crt,
- <cert></cert> — данными из файла /etc/openvpn/easy-rsa/pki/issued/client-1.crt,
- <key></key> — данными из файла /etc/openvpn/easy-rsa/pki/private/client-1.key,
- <tls-auth></tls-auth> — данными из файла /etc/openvpn/certs/ta.key.
После этого сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.
Теперь ваш VPN-сервер на Ubuntu готов к использованию. Чтобы приступить к работе, загрузите клиент OpenVPN на компьютер или другое устройство. Обратите внимание, что нельзя получить доступ с использованием vpn-сервиса к ресурсам, доступ к которым ограничен на территории Российской Федерации.