VPN не только позволяет обходить региональные ограничения, но и обеспечивает безопасное использование интернета в общественных местах и постоянный доступ к локальной сети. Бесплатные VPN-сервисы ненадёжны, платные слишком уж завышают ценник и тоже могут блокировать пользователей или быть недоступны. Остаётся лишь настроить личный сервер, который выйдет и дешевле, и безопаснее. Это не так сложно, как кажется на первый взгляд.
Что для этого потребуется: 4 этапа
Поднятие своего собственного VPN-сервера состоит из нескольких шагов. Это под силу даже неопытному пользователю, достаточно следовать инструкции в статье.
- Нужен удалённый компьютер, на который будет устанавливаться специальное ПО. Проще всего арендовать его в одном из крупных и надёжных сервисов — далее в статье я расскажу о таких.
- Надо подключиться к серверу по SSH-протоколу с помощью программы Termius и установить на него WireGuard — софт для настройки VPN-соединения.
- После установки VPN надо его правильно сконфигурировать.
- После настройки WireGuard останется лишь инсталлировать приложение на клиентское устройство и присоединиться к настроенному серверу.
Этап №1. Аренда сервера (выбираем с оплатой криптовалютой)
Поднимать VPN будем на удалённом сервере. Существует огромное количество сервисов, предоставляющих VPS (Virtual Private Server) по адекватным ценам. Ниже представлены популярные поставщики услуг:
- AWS: первые 12 месяцев бесплатно, затем 10 долларов в месяц, 15 ТБ трафика;
- Hetzner: 3 евро в месяц, 20 ТБ трафика, требуется подтверждение личности по документу;
- Vultr: 3,5 доллара в месяц (только при выборе VPS в США), 500 ГБ трафика;
- Pulseheberg: 4 евро в месяц;
- DigitalOcean: 5 долларов в месяц, 1 ТБ трафика.
К сожалению, сейчас их невозможно оплатить российскими картами, поэтому в этой статье я буду использовать и рекомендовать сервис СrownСloud. Его прелесть в том, что оплатить сервер можно с помощью криптовалюты (только BTC), которая доступна к использованию даже пользователям из России.
Самый дешёвый сервер можно арендовать за 2,5 доллара в месяц, правда, оплатить придётся на весь год — 30 долларов в сумме. За эту сумму вы получите 512 ГБ трафика ежемесячно. Оплата помесячно доступна для более дорогих решений — от 4 долларов в месяц за 1 ТБ трафика. Можно купить этот план для проверки, а затем сменить на более дешёвый, заплатив сразу за весь год.
Для тех, кто уже знает, как настраивать WireGuard, я советую взять KVM-сервер, ибо установка на нём будет проще и быстрее. В этом же материале я покажу на примере OpenVZ VPS.
На главной странице выбираем раздел Classic OpenVZ Plans.
Выбираем подходящий план — достаточно и самого дешёвого, но, как я сказал ранее, его придётся оплатить сразу на год. Поэтому для примера я выбрал вариант за 4 доллара в месяц. Переходим к оплате, кликнув на расположение сервера справа — США или Германия.
На этом этапе выберите операционную систему Ubuntu 20.04 x86_64 и перейдите к оплате, нажав кнопку Continue и затем Checkout.
Далее придется заполнить регистрационную форму — можете ввести туда абсолютно любые данные. Главное, чтобы они выглядели достоверно. Только укажите свою почту, к которой имеете доступ, а также запомните пароль. В самом низу выберите способ оплаты Bit-pay (Bitcoin) и поставьте флаг около условий обслуживания. Нажмите Complete Order и перейдите к окну оплаты.
Откроется окно сервиса BitPay. Если потребуется регистрация в этом сервисе — сделайте это, она занимает несколько минут и не требует ввода личных данных. Далее выберите подходящий кошелёк, на котором хранятся ваши цифровые активы. Я рекомендую использовать Electrum Wallet. Показывать пример буду также на нём, предполагая, что вы уже создали его и храните на нём средства.
Когда появится сумма, необходимая к оплате, нажмите «Пополнить кошелёк». Откроется приложение кошелька и сразу после этого — окно транзакции с заполненными данными.
Обязательно зайдите в «Инструменты» > «Настройки» и временно отключите пункт «Использовать возможность замены комиссии» или RBF (Replace-by-fee). Затем в поле «Комиссия» введите число, которое было указано на сайте (черная плашка внизу с надписью Required Fee Rate на изображении выше). Нажмите «Отправка», чтобы отправить транзакцию сразу. Возможно, потребуется ввести пароль от вашего кошелька.
Как только транзакция попадёт в сеть, сервис BitPay сообщит об успешной оплате. Вернитесь на CrownCloud.
На открывшейся странице выберите вкладку Services > My services. Откроется список приобретённых серверов. Сразу после оплаты вы увидите статус Pending — это из-за того, что транзакция попала в сеть, но еще не подтвердилась. После получения первого подтверждения VPS станет активным. Этот процесс занимает не более 20 минут.
Как только удалённая машина станет активна, кликните на неё — вы увидите её IP-адрес, по которому будете подключаться к ней в следующем пункте.
Нажмите на вкладку Hello, <ваш юзернейм>, выберите Email History. Найдите сообщение с темой CrownCloud — New VPS Information и откройте его. Там вы увидите пароль от root-пользователя сервера и данные для панели управления VPS. Запомните их.
Сразу же перейдите в панель управления. Введите пароль и логин, которые получили выше, и выберите Manage под нужным сервером. Нажмите на панель Settings и кликните на кнопку Re-enable TUN/TAP. Подождите 2-3 минуты и переходите к следующему шагу настройки.
Этап №2. Настройка сервера и подключение
Для настройки VPS надо подключиться к нему по SSH-протоколу. Рекомендую использовать для этого программу Termius. Она удобная, простая в использовании и кроссплатформенная.
Скачав её с официального сайта и установив, запускаем и нажимаем кнопку New host. В поле Address вводим IP-адрес выданного сервера — скопировали его ранее. В строке Username пишем root, в поле пароля вводим то, что сохранили ранее из электронного письма внутри сервиса CrownCloud. Сохраняем всё кнопкой Save. Теперь можно подключиться к серверу, дважды кликнув на созданный хост.
Прежде чем выполнять какие-либо действия, я обновляю список доступных к установке пакетов и сами пакеты. Для этого выполняем команду, написав её и нажав Enter:
apt update && apt upgrade -y
Переходим к установке и настройке самого VPN-сервиса.
Этап №3. Установка VPN
На сегодняшний день существует несколько разных протоколов VPN:
- PPTP — старый протокол, быстрый, но небезопасный, поэтому подойдёт только для просмотра контента, недоступного в некоторых регионах;
- L2TP/IPSec — безопасен, прост в настройке, но скорость не самая высокая и может блокироваться файрволом;
- SSTP — проприетарный протокол от Microsoft, который не поддерживается в GNU/Linux нативно;
- IKEv2 — весьма быстр, стабилен и безопасен, но поддерживается не на всех устройствах;
- SoftEther — свежий протокол, не поддерживается нативно в системах, но обеспечивает качественное шифрование с высокой скоростью;
- OpenVPN — быстрый и очень безопасный, но непростой в конфигурации и требует установки специальных приложений;
- WireGuard — активно развивающийся протокол, внедрена поддержка в ядро Linux, высокопроизводительный и надёжный, прост в развёртывании, хотя и требует установки дополнительных клиентских программ.
Для этой статьи я выбрал WireGuard. При относительно быстрой и лёгкой настройке он предоставляет отличную скорость и высокую безопасность, и, на мой взгляд, является идеально сбалансированным протоколом.
Для KVM-серверов достаточно установить его командой sudo apt install wireguard -y. Но так как я рассматриваю OpenVZ-решение, то инструкция по установке будет другая. Настройка подключения (четвёртый пункт) будет одинакова для всех вариантов.
Установим некоторые инструменты WireGuard:
apt install wireguard-tools --no-install-recommends
Так как мы используем OpenVZ-сервер, придётся использовать версию WireGuard, написанную на языке Go и не интегрированную в ядро ОС. Это не отразится на опыте использования, но придётся проделать чуть больше действий и скомпилировать утилиту самостоятельно.
Для начала установим среду для выполнения языка Go. По очереди выполните следующие команды:
cd /tmp
wget golang.google.cn/dl/go1.18.linux-amd64.tar.gz
tar zvxf go1.18.linux-amd64.tar.gz
sudo mv go /opt/go1.18
sudo ln -s /opt/go1.18/bin/go /usr/local/bin/go
Загрузим и скомпилируем wireguard-go. Последняя версия, которая без проблем запустилась у меня — 0.0.20201118. Последовательно введите команды:
cd /usr/local/src
wget git.zx2c4.com/wireguard-go/snapshot/wireguard-go-0.0.20201118.tar.xz
tar xvf wireguard-go-0.0.20201118.tar.xz
cd wireguard-go-0.0.20201118
Скомпилируем и «установим»:
make
sudo cp wireguard-go /usr/local/bin
Проверьте, установилось ли всё успешно, командой wireguard-go --version. Если появится сообщение с версией, можно переходить к следующему этапу.
Откройте файл в редакторе текста:
vi /lib/systemd/system/wg-quick@.service
Нажмите клавишу i — внизу должна появиться надпись INSERT. Найдите строчку:
Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
Под этой строчкой вставьте другую сочетанием клавиш Ctrl+Shift+V:
Environment=WG_I_PREFER_BUGGY_USERSPACE_TO_POLISHED_KMOD=1
Нажмите клавишу Esc, введите :wq и нажмите Enter.
Если вы незнакомы с vi или просто предпочитаете более простой редактор текста, установите nano — он пригодится далее:
apt install nano
Этап №4. Конфигурация VPN
Сгенерируем пару ключей для сервера. server_privatekey — это название файла с приватным ключом сервера, server_publickey — файл с публичным ключом сервера:
wg genkey | tee server_privatekey | wg pubkey > server_publickey
Для каждого клиентского устройства также создадим пару ключей. Это можно сделать и позже, но тогда придётся возвращаться к файлу конфигурации и редактировать его. 1 устройство — 1 выполнение команды ниже и, соответственно, 1 пара ключей. Не забывайте для каждого девайса менять названия файлов в команде. Во всех командах я выделил жирным то, что можно заменить. Например, для второго клиента могут быть client2_privatekey и client2_publickey. Опять же, название можно дать любое, главное, чтобы оно не повторялось и позволяло различить тип ключа и девайс. Я сгенерирую только для одного смартфона:
wg genkey | tee client_privatekey | wg pubkey > client_publickey
Выполним следующую команду для того, чтобы вывести сразу все сгенерированные ключи для сервера и клиента. Если у вас несколько клиентских устройств, то добавьте в конец команды названия всех созданных для них файлов и только потом выполните её. Например, если у вас 3 клиента, напишите cat server_privatekey server_publickey client1_privatekey client1_publickey client2_privatekey client2_publickey client3_privatekey client3_publickey.
Сохраним полученное содержимое в отдельный текстовый файл allKeys.txt на основном компьютере. Каждые две строки — это пара ключей. Первый — приватный, второй — публичный. Соответственно, первая пара — это ключи сервера, другие пары ключей принадлежат клиентам:
cat server_privatekey server_publickey client_privatekey client_publickey
Создадим конфигурационный файл:
nano /etc/wireguard/wg0.conf
Вставим в него следующее содержимое, заменив <PRIV_SERV> строкой из сохранённого текстового файла allKeys.txt со всеми ключами (самая первая строчка), а <PUB_CLIENT> — строкой оттуда же, но для клиентского устройства (второй ключ в паре).
Для каждого клиентского устройства надо добавить раздел Peer по подобному принципу, указав IP-адрес, отличающийся четвёртым числом от ранее введённых (например, для второго клиента я введу AllowedIPs = 10.0.0.3/32, для третьего — AllowedIPs = 10.0.0.4/32 и так далее), и добавив его публичный ключ:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <PRIV_SERV>
PreUp = iptables --table nat --append POSTROUTING --jump MASQUERADE --out-interface venet0
PreDown = iptables --table nat --delete POSTROUTING --jump MASQUERADE --out-interface venet0
[Peer]
PublicKey = <PUB_CLIENT>
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = <PUB_CLIENT2>
AllowedIPs = 10.0.0.3/32
Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Запустим сервис и сразу добавим его в автозапуск, чтобы VPN автоматически стартовал после перезагрузки сервера:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
Готово, можно подключаться с клиентского устройства.
Подключение к VPN
Подключение настроенного VPN требует установки специального приложения WireGuard на клиентское устройство. Оно доступно на все популярные десктопные и мобильные девайсы.
Android/iOS
Если нужно подключить смартфон, то наиболее удобным вариантом будет создание файла конфигурации прямо на VPS с последующей генерацией и сканированием QR-кода. Для этого введём через всё тот же Termius команду:
sudo apt install qrencode -y
Создадим файл конфигурации. Каждому новому устройству — новый файл конфигурации с уникальным именем (к примеру, client2.conf):
sudo nano client.conf
Вставим в файл содержимое, заменив <PRIV_CLIENT> на приватный ключ клиента (client_privatekey), сгенерированный ранее и сохранённый в отдельный файл allKeys.txt на основной машине. Вместо <PUB_SERV> подставим публичный ключ сервера (server_publickey) из того же файла. В Endpoint заменим <IP> на IP-адрес сервера (использовали его для подключения через Termius, нашли на шаге 11). В строке DNS можно указать желаемые DNS-сервера. Я выбрал DNS от Google.
[Interface]
Address = 10.0.0.2/32
PrivateKey = <PRIV_CLIENT>
DNS = 8.8.8.8, 8.8.4.4
[Peer]
PublicKey = <PUB_SERV>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <IP>:51820
Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Сгенерируем QR-код:
qrencode -t ansiutf8 < client.conf
QR-код отсканируем в мобильном приложении, дадим имя туннелю и подключим VPN. Если всё прошло успешно, на любом сайте для проверки IP (например, ipleak.net) будет отображаться адрес удалённого сервера.
Windows/macOS
Что касается компьютеров на Windows и macOS, файл конфигурации с расширением .conf лучше создать в любом текстовом редакторе на самом клиенте. Его содержимое будет аналогично тому, что предлагается выше для мобильных устройств. Только пункт с созданием QR-кода можно пропустить. Созданный файл импортируем в приложении WireGuard кнопкой Add Tunnel и активируем.
GNU/Linux
На компьютере с операционной системой GNU/Linux установим WireGuard таким же образом, каким установили его на сервер:
sudo apt install wireguard -y
Не забываем настроить пересылку трафика:
sudo sed -i 's/\#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
И сразу же обновим конфигурацию:
sudo sysctl -p
На машине с Ubuntu 20.04 LTS мне пришлось установить дополнительный пакет, так как без него возникала ошибка:
sudo apt install openresolv
Создадим всё тот же файл конфигурации:
sudo nano /etc/wireguard/wg0.conf
Только в этот раз вставим в него содержимое, которое я указал чуть выше для мобильных устройств. Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Активируем VPN:
sudo wg-quick up wg0
Отключить VPN так же просто:
sudo wg-quick down wg0
Для экономии времени я советую создать псевдонимы (aliases). Они позволят вместо таких комплексных команд вводить простые: wgon для подключения к VPN и wgoff для отключения. Откроем файл, который определяет конфигурацию терминала при запуске:
nano ~/.bashrc
Добавим в самый конец несколько строк:
# Aliases for WireGuard
alias wgon='sudo wg-quick up wg0'
alias wgoff='sudo wg-quick down wg0'
Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter.
В чем выгода по сравнению с платными vpn, где настройка ограничивается кнопкой вкл/выкл, на выбор предоставляется множество серверов в разных странах и всё это в пределах 3-5 тыс рублей в год?
Пример: vc.ru/services/390426-svoy-vpn-v-dva-prostyh-shaga-instrukciya
Из минусов — нельзя выбрать страну, в которой находится впн-сервер, но сценариев, когда это действительно нужно, не так уж и много.
Сейчас можно обойти ограничение прикрутив виртуальную карту Турецких банков
OlduBil и Iyzico. С номером для смс при регистрации по-сложнее (виртуальные симки и службы одноразовых смс не рекомендую использовать, можно нарваться на доп проверку и тогда вас направят на звонок от поддержки, проще найти симку из стран СНГ или за границей у знакомых или кто на отдыхе)
Немного поменялся интерфейс панели AWS тоже актуально, а то неделями сижу и с разных ресурсов копаю инфу и пытаюсь настроить. Ваш туториал был самый простой и рабочий. Спасибо!