Коммерческие VPN надоели. Серьёзно. Ты платишь за подписку, а потом обнаруживаешь, что сервис сливает DNS-запросы, вечером скорость падает до неприличных значений, а любимый стриминг научился банить их IP-адреса пачками. И в какой-то момент приходит мысль: а может, поднять своё?

Мысль правильная. Я прошёл этот путь целиком - от «что такое VPS» до рабочего WireGuard-сервера, который крутится уже восемь месяцев без единого сбоя. Путь не сложный, но с ямами, о которых никто не предупреждает. Если не хотите наступать на мои грабли, можно сразу выбрать vps сервер для vpn из проверенных вариантов. А здесь я расскажу про всё остальное: что работает, что нет, на чём я обжёгся и сколько это реально стоит.
Почему свой сервер, а не подписка
Один IP-адрес. Только твой. Не шарится между тысячей пользователей, не засвечен в базах, не забанен на Netflix. Когда коммерческий VPN подключает тебя к серверу, там сидят ещё 200 человек. И один из них обязательно делает что-то, из-за чего IP попадает в чёрный список.
У меня финский VPS. Восемь месяцев. IP ни разу не заблокировали. Ни один сервис не определяет его как VPN. Для внешнего мира я просто человек из Хельсинки.
И ещё: ты контролируешь логи. Вернее, их отсутствие. Не нужно верить на слово компании с Панамской регистрацией, что она «не хранит данные». Твой сервер - твои правила. Я отключил логирование в первые пять минут после настройки. Проверить это может кто угодно с root-доступом. То есть только я.
Сколько это стоит
Дешевле, чем кажется. Дороже, чем обещают.
Минимальный VPS для VPN - 1 ядро, 512 МБ RAM, 500 ГБ трафика. Такое стоит 3-5 евро в месяц у европейских хостеров. Hetzner - 4.15 евро, самый дешёвый тариф. Есть предложения и за 2 евро, но там обычно подвох: либо трафик 250 ГБ, либо сеть перегружена, либо дата-центр в локации с плохими маршрутами до России.
Средний вариант, на котором комфортно: 1 ядро, 1 ГБ RAM, 1 ТБ трафика. 5-7 евро. Этого хватит на VPN для всей семьи - человек пять одновременно, без просадок.
Коммерческий VPN стоит 3-4 евро в месяц при оплате за два года. Своя VPS - 5 евро. Разница минимальна. Но за эти 5 евро ты получаешь полноценный сервер, на котором кроме VPN можно крутить что угодно. Я на своём ещё держу Pi-hole для блокировки рекламы и маленький бот для Telegram.
Выбор локации: не всё так очевидно

Хочется выбрать Нидерланды. Все выбирают Нидерланды. Потому что либеральные законы, дешёвые дата-центры, AMS-IX с безумной связностью.
Я тоже начал с Амстердама. Пинг 45 мс из Москвы. Скорость - 90 Мбит при 100 Мбит канале дома. Нормально.
Потом попробовал Финляндию. Пинг 28 мс. Та же скорость. Географически ближе, маршруты короче, разница ощущается на видеозвонках. Меньше джиттера. Картинка не сыплется в пиксели каждые 30 секунд.
Германия - тоже рабочий вариант. Франкфурт, пинг 35-40 мс. Но немецкое законодательство строже по хранению данных. Bestandsdatenauskunft - забавное слово, которое означает, что хостер обязан знать, кто ты. Анонимная аренда не пройдёт.
А вот США - для VPN из России почти бессмысленно. Пинг 120-180 мс. Для браузинга терпимо. Для звонков и игр - мучение. Брать американский сервер имеет смысл только для доступа к US-контенту.
KVM, OpenVZ и почему это важно
Виртуализация. Звучит скучно. Но от этого зависит, заработает ли WireGuard вообще.
- OpenVZ - старая контейнерная виртуализация. Дешёвая. И убогая. WireGuard на OpenVZ без танцев с бубном не поднимается, потому что нужен доступ к модулю ядра. Некоторые хостеры включают TUN/TAP, и тогда работает OpenVPN. Но WireGuard - нет. Я убил на это три часа, прежде чем понял, что проблема не в моих руках, а в типе виртуализации.
- KVM - полноценная виртуальная машина. Своё ядро, полный контроль. WireGuard встаёт за минуту. Docker работает. Можно менять параметры ядра. Стоит на 1-2 евро дороже. Не экономьте на этом.
- Есть ещё LXC - нечто среднее. Proxmox-хостеры часто используют его. WireGuard на LXC поднимается, но не везде. Зависит от настроек ноды. Лотерея.
Короче: берите KVM. Без вариантов.
Настройка WireGuard: я ожидал хуже
Весь процесс занял 22 минуты. Я засекал. Чистая Ubuntu 22.04, SSH, терминал.
apt update && apt install wireguard - пять секунд. Генерация ключей - ещё три. Конфиг сервера - 12 строк. Конфиг клиента - 10 строк. Включил, проверил, работает. Никакой магии.
Есть скрипты-установщики. Самый популярный - от Nyr на GitHub. Один скрипт, отвечаешь на пять вопросов, он всё делает сам. Генерирует клиентские конфиги, настраивает фаервол, включает IP-forwarding. Я пользовался именно им для первой установки. Для второго сервера уже настраивал руками, потому что захотел понять, что происходит под капотом.
Outline от Jigsaw (Google) - ещё проще. Ставишь серверную часть одной командой, получаешь ссылку, открываешь в клиенте. Всё. Даже конфиг руками не пишешь. Но Outline использует Shadowsocks, а не WireGuard. Чуть медленнее. Зато DPI его почти не видит.
Подводные камни, на которые я наступил
Первый. Забыл открыть UDP-порт в фаерволе хостера. WireGuard работает по UDP. На самом сервере ufw настроил, а в панели Hetzner - нет. Полчаса гуглил, почему не подключается. Глупая ошибка, но я видел десятки тем на форумах с той же проблемой.
Второй. IPv6-утечки. Настроил VPN, проверил на dnsleaktest - чисто. Потом случайно зашёл на ipv6leak.com. Мой реальный IPv6-адрес. Оказывается, WireGuard по умолчанию не заворачивает IPv6-трафик, если в конфиге не прописать AllowedIPs = 0.0.0.0/0, ::/0. Пропустить двоеточие с нулями - и половина защиты улетает.
Третий. Трафик. Я поставил Pi-hole на тот же сервер и открыл DNS-порт наружу для «удобства». Через два дня сервер стал участником DNS amplification атаки. Трафик улетел за сутки. Хостер прислал предупреждение. Закрыл порт, поумнел.
Четвёртый. Бэкапы. Вернее, их отсутствие. Сервер работал три месяца, я привык. Потом хостер мигрировал ноду, что-то пошло не так, мой VPS пересоздали с нуля. Конфиги, ключи, настройки Pi-hole - всё пропало. Восстановил за полчаса, но было неприятно. Теперь храню конфиги в зашифрованном файле на облаке.
Скорость: мои замеры
Базовое соединение дома - 100 Мбит, Москва, оптика.
WireGuard через Финляндию: 87 Мбит download, 82 upload. Пинг 28 мс. Это замер через speedtest-cli на сервере и через fast.com из браузера. Потеря 13%. Отлично.
OpenVPN через тот же сервер: 64 Мбит download. Пинг 32 мс. Потеря 36%. Ощутимо. На YouTube в 4K уже заметно.

Shadowsocks (Outline) через Нидерланды: 71 Мбит. Средний результат.
Вечером, в пиковые часы, цифры не менялись. Потому что сервер мой. Там больше никого нет. Вот она, главная разница с коммерческим VPN, где вечером всё проседает на 40%.
MTU и почему сайты «не грузятся»
Настроил VPN, подключился. Speedtest показывает 85 Мбит. А некоторые сайты не открываются. Загрузка висит. Или открываются, но без картинок. Или грузятся через раз.
- MTU. Maximum Transmission Unit. Размер пакета. WireGuard добавляет свои заголовки, и если пакет получается больше, чем может пролезть через канал, он дропается. Молча. Без ошибок.
- Дефолтный MTU в WireGuard - 1420. У некоторых провайдеров нужно ставить 1380 или даже 1340. Я подбирал пингом: ping -M do -s 1400 8.8.8.8, уменьшал на 10 каждый раз, пока не пролезло. На моём канале оптимум оказался 1400. После этого все проблемы исчезли.
Маленькая деталь, про которую ни один гайд на первой странице гугла не пишет. А люди мучаются, не понимая, в чём дело.
Один сервер - одна страна: минус или нет
Главный аргумент против своего VPN. Коммерческий сервис даёт десятки стран. Свой сервер - одну. Две, если арендовать два.
На практике мне хватает одной. Финляндия закрывает 90% потребностей: обход блокировок, приватность, нормальная скорость. Раз в месяц мне нужен американский IP - для этого держу второй дешёвый VPS за $3.50 на BuyVM. Включаю по необходимости.
Можно арендовать три-четыре сервера в разных странах и переключаться между ними в конфиге WireGuard. Это будет стоить 15-20 евро в месяц. Дороже коммерческого VPN. Но каждый сервер - только твой.
Автоматизация: чтобы не лазить в терминал

Ansible-плейбук. Звучит страшно, работает просто. Я написал плейбук на 40 строк, который берёт чистый VPS и за три минуты превращает его в VPN-сервер. Обновляет систему, ставит WireGuard, создаёт ключи, прописывает конфиг, открывает порт, включает сервис. Одна команда - готово.
Зачем? Потому что VPS - расходный материал. Заблокировали IP - поднял новый сервер за три минуты. Хостер обанкротился - перенёс на другого за три минуты. Решил сменить страну - три минуты.
Храню плейбук в приватном Git-репозитории. Ключи, разумеется, не в репозитории. Они в отдельном зашифрованном хранилище.
Кому это не подойдёт
Тем, кто не готов потратить вечер на начальную настройку. Outline снижает порог до 15 минут, но всё равно нужно арендовать VPS, подключиться по SSH, запустить команду. Для людей, которых слово «терминал» пугает, коммерческий VPN остаётся лучшим выбором.
Тем, кому нужны серверы в двадцати странах. Арендовать двадцать VPS нерационально.
Тем, кто не хочет отвечать за обновления безопасности. Свой сервер - своя ответственность. Уязвимость в ядре? Ты должен обновить. Забыл - сам виноват. Коммерческие сервисы делают это за тебя.
Всем остальным - рекомендую попробовать. Худшее, что случится - потеряете 5 евро и вечер. Лучшее - получите собственный VPN, который работает ровно так, как вы хотите. Без чужих правил, без чужих логов и без вечерних просадок скорости.