258
0
Время чтения ≈ 18 минут

Содержание:

Virtual Private Network (VPN) дословно переводится как «виртуальная частная сеть». VPN создаёт надёжное шифрованное соединение между устройствами — VPN-туннель. Благодаря такому соединению, при подключении к незащищённой сети (например, WiFi в кафетерии), трафик пройдёт через VPN-сервер, что защитит его от постороннего вмешательства.

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

В сложившейся ситуации лучшим решением будет настроить собственную виртуальную частную сеть. В этой статье расскажем как установить собственную виртуальную частную сеть на примере VPN-клиента OpenVPN и Ubuntu 18.04. Установка OpenVPN на CentOS, Debian и другие популярные Linux дистрибутивы происходит по похожей схеме.

Теория

Что такое VPN

VPN-соединение создаётся за счёт связки клиент-серверной архитектуры. Клиенты подключаются к серверу VPN, объединяются в виртуальную сеть, безопасно обмениваются данными. Для подключения к Интернету клиент обращается к серверу VPN, а тот, в свою очередь, получает данные из глобальной сети и передаёт их обратно клиенту.

Другими словами, VPN создаёт безопасный коридор между вашими устройствами и сетью. Этот коридор незаметен, а данные, находящиеся в нём, невозможно перехватить. Все соединения идут не напрямую, а через сервер, который может находиться в любой точке мира.

OpenVPN

Один из способов создания виртуальной частной сети – использование бесплатной программы OpenVPN. Утилиту или её исходный код можно скачать на официальном сайте. OpenVPN работает при помощи сертификатов и асимметричного шифрования. То есть передаваемые данные шифруются одним ключом, а расшифровываются другим.

Пара ключей шифрования

  • Публичный ключ – сертификат, который может быть в свободном доступе, производит шифрование данных (email сообщения, проверка ЭЦП).
  • Приватный ключ – хранящийся в ограниченном доступе, только у заинтересованных лиц, расшифровывает данные, зашифрованные публичным ключом.

Для того чтобы такая пара ключей работала, они должны быть подписаны центром авторизации (certification authority, CA). При этом CA имеет свой сертификат и приватный ключ, которые нужны для идентификации созданной пары ключей.

Что нужно для работы OpenVPN

Для настройки VPN необходим виртуальный частный сервер (virtual private server, VPS/VDS). В  качестве ОС будет использоваться Ubuntu — один из самых популярных и стабильных серверных дистрибутивов на базе Linux.

VPS можно арендовать у подходящего хостинг-провайдера. При выборе виртуального сервера важно, чтобы он подходил под следующие условия:

  • Оперативная память (RAM) — не менее 512 МБ.
  • Скорость сетевого интерфейса — 100 мб/сек или выше.
  • Физический сервер должен находиться максимально близко к будущему пользователю. Это обеспечит минимальную задержку (пинг) и позволит соответствовать местным законам.

Такие факторы, как объём постоянной памяти и тип накопителя, практически не имеют значения.

Установка OpenVPN

Подготовка

Установка OpenVPN на Ubuntu 18.04 начинается с установки пакетов OpenVPN и Easy-rsa из репозитория. Утилита Easy-rsa необходима для управления ключами и сертификатами.

Перед инсталляцией необходимо обновить список пакетов:

sudo apt update

Теперь нужно выполнить установку OpenVPN и Easy–rsa:

sudo apt install openvpn easy-rsa

Также в процессе работы пригодится пакет NetTOOLS, включающий в себя все необходимые сетевые инструменты. Установка выполняется командой:

sudo apt install net-tools

Настройка центра сертификации

Настройка сервера OpenVPN на Ubuntu начинается с установки центра сертификации и создания корневого сертификата:

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 – сертификат CA. Он необходим клиентам и серверу для проверки подписи CA.
  • /etc/openvpn/easy-rsa/pki/private/ca.key – приватный ключ CA.

Для удобства нужно создать каталог, в котором будут храниться все необходимые сертификаты и ключи OpenVPN:

mkdir /etc/openvpn/certs/

Теперь необходимо скопировать корневой сертификат OpenVPN в созданную папку:

cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/certs/ca.crt

Ключи OpenVPN для сервера

Генерация ключей для сервера OpenVPN выполняется следующей командой:

./easyrsa gen-req server nopass

Далее созданный сертификат подписывается ключом CA:

./easyrsa sign-req server server

Появится предупреждение с запросом подтвердить подпись. Нужно написать «yes» и ввести пароль центра сертификации.

Созданные файлы копируются в каталог для сертификатов:

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 (hash-based message authentication code):

openvpn --genkey --secret /etc/openvpn/certs/ta.key

Теперь в папке, созданной для хранения сертификатов, должно быть 5 файлов. Проверить их наличие можно командой:

ls -l /etc/openvpn/certs/

Создание ключей клиентов OpenVPN

Сгенерировать ключи и выполнить их подпись можно следующей командой:

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

На вопрос о намерении подписать нужно ответить «yes» и ввести пароль CA.

Запуск сервера OpenVPN

Создание конфигурационного файла OpenVPN

Для настройки OpenVPN нужно создать файл конфигурации клиента:

nano /etc/openvpn/server.conf

Далее в него копируется следующий конфиг OpenVPN сервера:

# Порт для использования
port 1194

# TCP/UDP Рекомендуется использовать UDP протокол
;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 #не распространяется и хранится в секрете

# параметры DH
dh /etc/openvpn/certs/dh2048.pem

# Создание виртуальной сети и ее параметры

# Параметры IP
server 10.8.0.0 255.255.255.0

# При перезагрузке сервера, клиенту будет присвоен прежний IP адрес
ifconfig-pool-persist /etc/openvpn/ipp.txt

# Настройка для установки шлюза по умолчанию (для клиентов при подключении к VPN сервер VPN становится шлюзом)
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"

# MAX число одновременных подключений
;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

Теперь файл необходимо сохранить и закрыть. Для этого нужно воспользоваться сочетанием клавиш «Ctrl+X», затем «Y» и подтвердить операцию нажатием «Enter».

Тестирование сервера OpenVPN

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

openvpn /etc/openvpn/server.conf

Проверка конфигурации OpenVPN

Об успешном старте сигнализирует сообщение «Initialization Sequence Completed».

Если всё в порядке, то можно запускать службу OpenVPN сервера для постоянной работы. Также нужно добавить программу в автозагрузку, чтобы развёртывание OpenVPN осуществлялось при каждом запуске системы. Все это делается двумя командами:

systemctl start openvpn@server.service
systemctl enable openvpn@server.service

Команда systemctl использует формат вида «openvpn–server@<configuration>.service». Где «<configuration>» – конфигурация из папки «/etc/openvpn/» без расширения .conf.

Получить информацию о работе службы можно с помощью команды:

systemctl status openvpn@server.service

Статус службы OpenVPN

Включение маршрутизации трафика на OpenVPN сервере

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

Для начала создаётся файл «vpn_route.sh» а каталоге «/root/bin/».

nano /root/bin/vpn_route.sh

Если папка отсутствует, её необходимо создать:

mkdir /root/bin/

Далее, в открывшийся файл, нужно внести конфигурацию:

#!/bin/sh

# укажите имя интерфейса, иначе скрипт попытается выбрать его автоматически
#DEV='eth0'
# проверить можно командой “ip a”
DEV='ens3'

# Значение подсети
# изменяется в соответствии с конфигурацией 
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

После сохранения нужно сделать файл исполняемым:

chmod 755 /root/bin/vpn_route.sh

Далее проводится пробный запуск скрипта для выявления ошибок:

bash /root/bin/vpn_route.sh

Если всё в порядке, то остаётся добавить добавить созданный скрипт в автозагрузку. Для этого нужно создать службу systemd:

nano /etc/systemd/system/openvpn-server-routing.service

В открывшийся файл вносятся следующие данные:

[Unit]
Description=Включение маршрутизации OpenVPN трафика.
[Service]
ExecStart=/root/bin/vpn_route.sh
[Install]
WantedBy=multi-user.target

Теперь нужно добавить созданную службу в автозагрузку:

systemctl enable openvpn-server-routing

Настройка клиента OpenVPN сервера

Перенос ключей и сертификатов

На данном этапе настройки конфигурации OpenVPN необходимо разместить ранее созданные файлы на клиентском компьютере.

Если клиент OpenVPN на Windows, создается папка по пути «C:\Program Files\OpenVPN\certs\». В нее перемещаются следующие элементы:

  • Файлы ca.crt и ta.key из папки /etc/openvpn/certs.
  • Файл client1.crt из папки /etc/openvpn/easy-rsa/pki/issued.
  • Файл client1.key из папки /etc/openvpn/easy-rsa/pki/private/.

Кстати. Выполнить перенос данных можно с помощью FTP-клиента WinSCP.

Если клиент работает на Ubuntu, файлы переносятся следующим образом:

  1. С сервера из папки /etc/openvpn/certs файлы ca.crt и ta.key, копируются в папку /etc/openvpn/certs.
  2. С сервера из папки /etc/openvpn/easy-rsa/pki/issued/ файл client1.crt, копируются в папку /etc/openvpn/certs.
  3. С сервера из папки /etc/openvpn/easy-rsa/pki/private/ файл client1.key, копируется в папку /etc/openvpn/certs.

Отправить файлы на устройство под управлением Linux можно с помощью FTP-клиента FileZilla.

Настройка OpenVPN на Windows

Клиент для Windows можно скачать с официального сайта.

Ранее в папку «C:\Program Files\OpenVPN\certs\» были перемещены сертификаты и ключи для подключения к OpenVPN серверу. Теперь необходимо добавить конфигурацию для работы программы. Для этого нужно создать в папке «C:\Program Files\OpenVPN\config\» файл «client.ovpn» и добавить в него следующие строки:

# Роль программы. 
client
 
# IP адрес OpenVPN сервера
remote XXX.XXX.XXX.XXX
 
# Порт сервера. Берется из конфигурации сервера
port 1194 
 
# не изменяется
dev tun
 
# Протокол как на сервере
;proto tcp
proto udp
 
# Имя хоста/IP и порт сервера. 
#Удаленные сервера для баланса нагрузки
 
;remote my–server–1 1194
;remote my–server–2 1194
 
# Случайный выбор хостов. Если не указано, берется по порядку
;remote–random
 
# Преобразование имени хоста 
# (в случае непостоянного подключения к интернету)
resolv-retry infinite
 
# Привязка к локальному порту
nobind

# Маршрутизация всего трафика через VPN-сервер 
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
 
# Сертификаты
 
ca "C:\\Program Files\\OpenVPN\\certs\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\certs\\client1.crt"
key "C:\\Program Files\\OpenVPN\\certs\\client1.key"
 
# Дополнительная защита
remote-cert-tls server 
 
# Ключ HMAC
tls-auth "C:\\Program Files\\OpenVPN\\certs\\ta.key" 1
 
# Шифры как на сервере
cipher AES-256-CBC
 
# Сжатие. Если на сервере отключено, не включается
#comp–lzo
 
# Вербальность журнала.
verb 3

После сохранения остаётся выбрать в программе профиль «client» и нажать «Подключиться» для установки соединения с сервером.

Настройка клиента на Ubuntu

Клиент OpenVPN поставляется совместно с серверной частью, поэтому при установке указывается тот же пакет, что и в начале статьи – «openvpn»:

sudo apt install openvpn

Ранее ключи уже были сгенерированы (ca.crt, client1.crt, client1.key, ta.key) и перемещены в папку «/etc/openvpn/certs/». Проверить их наличие можно следующей командой:

ls –l /etc/openvpn/certs/

Если все 5 файлов присутствуют, то можно переходить к созданию конфигурационного файла OpenVPN client:

sudo nano /etc/openvpn/client.conf

В открывшийся файл настроек необходимо внести следующую конфигурацию:

# Роль программы. 
client
 
# IP адрес OpenVPN сервера
remote XXX.XXX.XXX.XXX 
# Порт сервера. Берется из конфигурации сервера
port 1194 
 
# не изменяется
dev tun
 
# Протокол как на сервере
;proto tcp
proto udp
 
# Имя хоста/IP и порт сервера. 
#Удаленные сервера для баланса нагрузки
 
;remote my–server–1 1194
;remote my–server–2 1194
 
# Случайный выбор хостов. Если не указано, берется по порядку
;remote–random
 
# Преобразование имени хоста 
# (в случае непостоянного подключения к интернету)
resolv-retry infinite
 
# Привязка к локальному порту
nobind

# Маршрутизация всего трафика через VPN-сервер 
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
 
# Сертификаты
 
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client1.crt
key /etc/openvpn/certs/client1.key
 
 
# Дополнительная защита
remote-cert-tls server
 
# Ключ HMAC
tls-auth /etc/openvpn/certs/ta.key 1
 
# Шифры как на сервере
cipher AES-256-CBC
 
# Сжатие. Если на сервере отключено, не включается
#comp–lzo
 
# Вербальность журнала.
verb 3

Перед тем как запустить OpenVPN, нужно заменить некоторые значения на собственные. Далее файл сохраняется и закрывается.

Выполнить тестовый запуск клиента с указанными параметрами можно следующей командой:

sudo openvpn /etc/openvpn/client.conf

Об успешном подключении просигнализирует сообщение: «Initialization Sequence Completed».

Теперь можно запустить службу OpenVPN для работы в скрытом режиме:

sudo systemctl start openvpn@client.service

Проверка статуса службы:

sudo systemctl status openvpn@client.service

Добавление службу в автозагрузку:

sudo systemctl enable openvpn@client.service

Остановка службы VPN:

sudo systemctl stop openvpn@client.service

Удаление из автозагрузки:

sudo systemctl disable openvpn@client.service

Встраивание сертификатов в файл .ovpn

Содержимое сертификатов и ключей можно указать в конфигурационном файле .ovpn. Это позволяет использовать только один документ для переноса всех аутентификационных данных, что существенно ускоряет процесс подготовки клиентской части.

Данные сертификатов заносятся в парные теги, которые имеют такое же наименование, как и стандартные опции (ca, cert, dh, tls–auth, key и т. д.). Далее это будет показано на примере ранее созданного конфигурационного файла client.conf.

Для начала нужно удалить из файла прописанные сертификаты и ключи:

ca "C:\\Program Files\\OpenVPN\\certs\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\certs\\client1.crt"
key "C:\\Program Files\\OpenVPN\\certs\\client1.key"
tls–auth "C:\\Program Files\\OpenVPN\\certs\\ta.key" 1

Так как «tls–auth» – дополнительная опция, то её необходимо добавить отдельной строкой, введя:

key-direction 1

Далее нужно создать парные теги, как ниже, и перенести данные о ключах:

<ca>
 [...]
</ca>
<cert>
[...]
</cert>
<key>
 [...]
</key>
<tls-auth>
 [...]
</tls-auth>

Вместо многоточия указывается содержание публичного или приватного ключа между заголовками «BEGIN» и «END».

Встраивание сертификатов в файл .ovpn

После сохранения настроек файл можно передать клиентам OpenVPN.

Заключение

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

Настроить OpenVPN на Ubuntu для создания своей собственной сети достаточно легко. Нужно лишь внимательно следует следовать приведённой инструкции и правильно выбрать поставщика хостинг-услуг.

Виртуальные сервера Eternalhost — проверенное решение для создания собственной сети VPN! Оперативная техподдержка 24/7 и бесплатная защита от DDoS.

Оцените материал:
[Всего голосов: 0    Средний: 0/5]
Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments

Начни экономить на хостинге сейчас — 14 дней бесплатно!