Как создать и настроить свой VPN-сервер
Сейчас на рынке существует множество готовых VPN-сервисов, но не все они достаточно надежны и стабильны. К тому же большинство из них имеют низкую скорость передачи данных, из-за чего страницы загружаются очень долго. Решить эти проблемы легко — для этого достаточно создать собственный VPN-сервер. О том, как поднять свой VPN на сервере, расскажем ниже.
Зачем нужен VPN
VPN (виртуальная частная сеть) — это технология, которая обеспечивает безопасное и защищенное подключение к интернету. Она создает виртуальный туннель между вашим устройством и глобальной сетью, шифрует все данные и направляет их через удаленный сервер. VPN используется для шифрования трафика, изменения IP-адреса и местоположения пользователя. С помощью VPN вы можете безопасно работать в незащищенной сети (такой, как Wi-Fi в кафе или отеле) и не бояться, что ваши данные перехватят злоумышленники. Также VPN помогает обойти блокировки различных ресурсов.
Что такое OpenVPN
OpenVPN — популярная реализация технологии VPN с открытым исходным кодом. С его помощью вы можете создать собственный VPN-сервер с высоким уровнем безопасности гибкими настройками. OpenVPN поддерживает Windows, MacOS, Linux, Android, iOS и ChromeOS, поэтому вы сможете использовать его на разных устройствах.
Как арендовать и настроить свой ВПН-сервер
Чтобы обзавестись собственным VPN, вам необходимо арендовать облачный сервер VPS и развернуть на нем OpenVPN. Конфигурация сервера может быть любой, поэтому подойдет даже минимальный тариф. При заказе сервера нужно выбрать операционную систему Ubuntu 20.04:
Создаем собственный VPN-сервер: установка OpenVPN
Мы производили установку на сервер с ОС Ubuntu 20.04 — для других версий процесс установки и настройки может отличаться. Чтобы начать установку, подключитесь к серверу по SSH.
Установка пакетов
- Обновите списки пакетов с помощью команды:
1 |
sudo apt update |
- Установите пакеты, необходимые для установки и настройки OpenVPN:
1 |
sudo apt install openvpn easy-rsa net-tools |
Настройка удостоверяющего центра
После установки пакетов необходимо развернуть на сервере центр сертификации и сгенерировать корневой сертификат. Для этого:
- Скопируйте необходимые файлы в папку /etc/openvpn/, а затем перейдите в нее:
1 2 |
sudo cp -R /usr/share/easy-rsa /etc/openvpn/ cd /etc/openvpn/easy-rsa |
- Создайте удостоверяющий центр и корневой сертификат:
1 2 3 |
export EASYRSA=$(pwd) sudo ./easyrsa init-pki sudo ./easyrsa build-ca |
После ввода последней команды вам будет предложено ввести кодовую фразу. Указанный вами пароль в дальнейшем будет использоваться для подписи сертификатов и ключей.
У вас появятся 2 файла:
- /etc/openvpn/easy-rsa/pki/ca.crt — сертификат CA
- /etc/openvpn/easy-rsa/pki/private/ca.key — приватный ключ CA.
- Создайте директорию, в которой будут храниться ключи и сертификаты:
1 |
mkdir /etc/openvpn/certs/ |
- Переместите в созданную папку сертификат CA:
1 |
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/certs/ca.crt |
Создание запроса сертификата и закрытого ключа сервера OpenVPN
- Создайте закрытый ключ для сервера и файл запроса сертификата с помощью команды:
1 |
./easyrsa gen-req server nopass |
- Подпишите созданный сертификат ключом сертификационного центра:
1 |
./easyrsa sign-req server server |
Затем введите «yes» и нажмите Enter. После введите кодовую фразу, которую вы задали при настройке удостоверяющего центра.
- Скопируйте сгенерированный сертификат и ключ в директорию /etc/openvpn/certs/:
1 2 |
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:
1 |
openssl dhparam -out /etc/openvpn/certs/dh2048.pem 2048 |
- Создайте ключ HMAC с помощью команды:
1 |
openvpn --genkey --secret /etc/openvpn/certs/ta.key |
Теперь в директории /etc/openvpn/certs/ должно быть 5 файлов. Проверить это можно с помощью команды:
1 |
ls -l /etc/openvpn/certs/ |
Вывод должен выглядеть следующим образом:
Создание ключей клиентов OpenVPN
- Сгенерируйте закрытый ключ и запрос сертификата клиента:
1 |
./easyrsa gen-req client1 nopass |
- Затем подпишите запрос с помощью команды:
1 |
./easyrsa sign-req client client1 |
Введите «yes» и нажмите Enter. Затем введите кодовую фразу, которую вы задали при настройке удостоверяющего центра.
Запуск сервера OpenVPN
Создание конфигурационного файла OpenVPN
Теперь приступим к созданию конфигурационного файла. Для этого:
- Введите команду:
1 |
nano /etc/openvpn/server.conf |
- Скопируйте и вставьте в файл конфигурацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# Порт для 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" # Максимальное число одновременных подключений ;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 уже занята, то в параметре server нужно указать другой IP-адрес, например, 10.10.0.0.
Сохраните изменения и закройте файл, нажав Ctrl+X, Y, Enter.
Проверка корректной работы сервера OpenVPN
- Проверьте, не возникают ли ошибки при запуске конфигурационного файла, с помощью команды:
1 |
openvpn /etc/openvpn/server.conf |
Если все работает, то вы увидите сообщение «Initialization Sequence Completed»:
- Если ошибок нет, запустите службу OpenVPN и добавьте ее в автозагрузку:
1 2 |
systemctl start openvpn@server.service systemctl enable openvpn@server.service |
- Проверьте, работает ли служба, с помощью команды:
1 |
systemctl status openvpn@server.service |
Включение маршрутизации трафика на OpenVPN-сервере
Теперь необходимо настроить маршрутизацию трафика для доступа к глобальной сети. Для этого:
- Создайте директорию /root/bin/:
1 |
mkdir /root/bin/ |
- Введите команду:
1 |
nano /root/bin/vpn_route.sh |
- Добавьте в файл конфигурацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/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 |
Если при создании конфигурационного файла OpenVPN вы задавали подсеть, отличную от 10.8.0.0/24, то укажите свое значение подсети в параметре PRIVATE.
В параметре DEV нужно указать сетевой интерфейс, который используется для выхода в интернет. Узнать его можно с помощью команды:
1 |
route | grep '^default' | grep -o '[^ ]*$' |
После добавления конфигурации сохраните изменения и закройте файл с помощью клавиш Ctrl+X, Y, Enter.
- Задайте права для файла:
1 |
chmod 755 /root/bin/vpn_route.sh |
- Выполните тестовый запуск скрипта:
1 |
bash /root/bin/vpn_route.sh |
- Если ошибок нет, добавьте скрипт в автозагрузку. Для этого создайте файл:
1 |
nano /etc/systemd/system/openvpn-server-routing.service |
- Добавьте в него следующие данные:
1 2 3 4 5 6 |
[Unit] Description=Включение маршрутизации OpenVPN трафика. [Service] ExecStart=/root/bin/vpn_route.sh [Install] WantedBy=multi-user.target |
Чтобы сохранить файл и закрыть его, нажмите Ctrl+X, Y, Enter.
- Добавьте созданную службу в автозагрузку:
1 |
systemctl enable openvpn-server-routing |
Настройка клиента OpenVPN
Теперь необходимо создать файл конфигурации .ovpn для подключения клиента к VPN. Для этого откройте любой текстовый редактор и добавьте в него конфигурацию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# Роль 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/client1.crt* </cert> <key> *Вставьте содержимое файла /etc/openvpn/easy-rsa/pki/private/client1.key* </key> <tls-auth> *Вставьте содержимое файла /etc/openvpn/certs/ta.key* </tls-auth> |
В параметре remote вместо 123.123.123.123 укажите IP-адрес вашего сервера. В тегах вставьте содержимое сгенерированных ранее файлов:
- <ca></ca> — вставьте данные из файла /etc/openvpn/certs/ca.crt,
- <cert></cert> — вставьте данные из файла /etc/openvpn/easy-rsa/pki/issued/client1.crt,
- <key></key> — вставьте данные из файла /etc/openvpn/easy-rsa/pki/private/client1.key,
- <tls-auth></tls-auth> — вставьте данные из файла /etc/openvpn/certs/ta.key.
Вы можете вывести содержимое файла в терминал, затем скопировать его и вставить в конфигурацию. Чтобы вывести содержимое файла, воспользуйтесь командой:
1 |
cat путь_к_файлу |
После внесения всех изменений сохраните конфигурационный файл с расширением .ovpn.
Чтобы подключиться к нашему VPN, необходимо скачать клиент OpenVPN для вашего устройства и импортировать в него созданный конфигурационный файл .ovpn.
⌘⌘⌘
Теперь ваш собственный VPN-сервер запущен и полностью готов к использованию. Надеемся, что наша инструкция по созданию собственного VPN-сервера была для вас полезной и вам больше не придется беспокоиться о том, что злоумышленники перехватят ваши данные.