September 16

Как я поднял собственный VPN с российским IP

Ребята всем привет. Итак, со вчерашнего дня для меня как для забугорного – закрыт Яндекс. Просто перестали работать все их сервисы, включая Метрику. Мной было принято решение уже не платить за непонятный VPN, и я решил раскатить свой на VPS-сервере. Ниже будет не очень большая, но полная инструкция, как я это сделал.

Сразу оговорюсь: я постарался написать её для людей, которые никогда не настраивали серверы. Если слова VPS, SSH и AmneziaWG пока ничего вам не говорят – всё нормально. Мне от вас нужен только навык копировать команды без творческой переработки.

Что мы вообще собираем

Обычный VPN-сервис устроен так: вы платите компании, устанавливаете приложение и подключаетесь к её общему серверу. Один IP-адрес там могут одновременно использовать сотни людей. Такой адрес быстро попадает в списки VPN, а сегодня он работает, завтра нет.

Я сделал иначе. Арендовал маленький виртуальный компьютер в московском дата-центре и поставил на него собственный VPN. Этим российским IP пользуюсь только я и люди, которым я сам выдал отдельные ключи.

VPS, или Virtual Private Server, – это удалённый компьютер. Физически он стоит в дата-центре, работает круглосуточно и подключён к интернету. Монитора и клавиатуры у него нет. Управляем им через Terminal командами.

Схема выглядит так:

  1. Я включаю VPN на Mac или iPhone.
  2. Устройство соединяется с моим сервером в Москве.
  3. Яндекс, Росэлторг, банки и государственные сайты видят российский IP.
  4. YouTube, Facebook, ChatGPT, Claude и остальные зарубежные сервисы продолжают ходить напрямую через аргентинский интернет.

Последний пункт реализуется через split tunneling – раздельную маршрутизацию. К ней вернусь в конце.

Что понадобится

Мне понадобились:

  • аккаунт у хостера RUVDS;
  • около 700 рублей в месяц;
  • Mac или Windows-компьютер;
  • приложение AmneziaVPN;
  • примерно полчаса спокойного времени.

Сервер можно купить и у другого российского хостера. Я выбрал RUVDS из-за московских площадок и нормального API. Для обычной ручной установки API вообще не нужен – всё делается через личный кабинет и Terminal.

Шаг 1. Покупаем сервер

Я зарегистрировался на ruvds.com и создал сервер со следующими параметрами:

  • дата-центр: M9, Москва;
  • операционная система: Ubuntu 24.04 LTS;
  • процессор: 1 vCPU;
  • оперативная память: 1 ГБ;
  • диск: 20 ГБ HDD;
  • публичный IPv4: 1 адрес;
  • срок оплаты: 3 месяца.

Моя конфигурация стоила 685 рублей в месяц. За три месяца со скидкой списалось 1 952,25 рубля.

Для личного VPN этого хватает. Мощный процессор и быстрый NVMe-диск здесь ничего заметно не улучшат. Скорость зависит в основном от канала дата-центра и вашего домашнего интернета.

После создания сервера в личном кабинете появятся:

  • IP-адрес;
  • логин root;
  • начальный пароль либо возможность добавить SSH-ключ.

IP выглядит примерно так: 176.113.81.197. У вас адрес будет другим. Не копируйте мой IP в команды – подставляйте свой.

root – главный администратор сервера. У него есть право менять любые настройки, поэтому пароль от root нельзя публиковать или отправлять кому попало.

Шаг 2. Подключаемся к серверу

На Mac открываем приложение Terminal. Оно уже установлено в macOS: нажимаем Command + Space, вводим Terminal и запускаем.

Пишем команду:

ssh root@IP_ВАШЕГО_СЕРВЕРА

Например:

ssh root@176.113.81.197

При первом подключении Terminal спросит, доверяете ли вы новому серверу. Пишем:

yes

Затем вводим пароль root. Во время ввода на экране не появляются ни буквы, ни звёздочки. Это нормальное поведение Terminal. Ввели пароль, нажали Enter.

Если всё получилось, строка приглашения изменится. Теперь команды выполняются не на вашем Mac, а на сервере в Москве.

Шаг 3. Проверяем, что IP действительно российский и публичный

Выполняем две команды:

curl -4 -s ifconfig.me; echo
ip -4 addr

Первая покажет внешний IP сервера. Во второй нужно найти такой же адрес рядом с сетевым интерфейсом eth0.

Адреса должны совпасть. Если они разные, сервер может находиться за NAT – общей сетевой дверью на несколько клиентов. Для нашего сценария нужен отдельный публичный IPv4, поэтому в таком случае лучше написать в поддержку хостера до установки VPN.

Шаг 4. Скачиваем AmneziaWG

Я использовал установщик bivlked/amneziawg-installer.

AmneziaWG – вариант WireGuard с маскировкой трафика. Если упростить, WireGuard создаёт зашифрованный туннель между устройством и сервером, а AmneziaWG делает этот туннель менее похожим на стандартный VPN-трафик.

Скачиваем свежую версию установщика:

wget -O /root/install_amneziawg.sh \
  https://github.com/bivlked/amneziawg-installer/releases/latest/download/install_amneziawg.sh

Разрешаем запуск файла:

chmod 700 /root/install_amneziawg.sh

Теперь запускаем установку:

bash /root/install_amneziawg.sh \
  --yes \
  --disallow-ipv6 \
  --route-all \
  --subnet=172.16.17.1/24

Что означают параметры:

  • --yes – установщик сам подтверждает стандартные вопросы;
  • --disallow-ipv6 – отключает IPv6, чтобы часть трафика случайно не пошла мимо VPN;
  • --route-all – создаёт обычный полный VPN-профиль;
  • --subnet=172.16.17.1/24 – задаёт внутреннюю сеть для наших устройств.

Внутренний адрес 172.16.17.1 не виден сайтам и не заменяет публичный IP. Он нужен серверу, чтобы различать подключённые устройства.

Шаг 5. Не пугаемся перезагрузок

Установщик обновляет систему и модуль ядра. Во время работы он может перезагрузить сервер два раза. SSH-соединение в этот момент закроется, а Terminal покажет ошибку подключения или просто вернёт вас в обычную командную строку Mac.

Это не обязательно означает поломку.

Ждём одну-две минуты, снова подключаемся:

ssh root@IP_ВАШЕГО_СЕРВЕРА

И повторяем ту же команду установки:

bash /root/install_amneziawg.sh \
  --yes \
  --disallow-ipv6 \
  --route-all \
  --subnet=172.16.17.1/24

Скрипт запоминает пройденный этап и продолжает работу. Повторяем после каждой запрошенной перезагрузки, пока не увидим сообщение:

Установка и настройка AmneziaWG успешно завершена

У меня по дороге возникла одна неприятность: обновление cloud-init запросило ручной выбор конфигурации, а установка остановилась. Если увидите ошибку dpkg и упоминание /etc/cloud/cloud.cfg, выполните:

export DEBIAN_FRONTEND=noninteractive
dpkg --force-confold --configure -a
apt-get -f install -y -o Dpkg::Options::="--force-confold"
dpkg --audit

После этого снова запустите установщик с теми же параметрами.

Если такой ошибки нет, этот блок вам не нужен. Не надо чинить то, что работает.

Шаг 6. Проверяем сервер

После завершения установки выполняем:

systemctl is-active awg-quick@awg0

Нормальный ответ:

active

Запускаем встроенную диагностику:

bash /root/awg/manage_amneziawg.sh check

В конце должно появиться:

Проверка завершена: Состояние OK

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

awg show awg0

Сразу после установки там ещё не будет свежего handshake. Handshake – подтверждение, что клиент действительно связался с сервером. Он появится после подключения с телефона или компьютера.

Шаг 7. Создаём отдельный профиль для каждого устройства

Я сделал отдельные профили для Mac и iPhone:

bash /root/awg/manage_amneziawg.sh add petr_mac
bash /root/awg/manage_amneziawg.sh add petr_iphone

Вместо petr_mac можно написать понятное имя латиницей, например:

bash /root/awg/manage_amneziawg.sh add anna_iphone

Для каждого устройства создавайте свой профиль. Не ставьте один ключ сразу на три телефона. Когда два устройства подключаются с одним ключом, они начинают перетягивать соединение друг у друга.

Готовые файлы лежат в каталоге:

/root/awg/

Для каждого профиля установщик создаёт несколько файлов:

  • .conf – обычная конфигурация AmneziaWG;
  • .png – QR-код с обычной конфигурацией;
  • .vpnuri – файл для импорта в AmneziaVPN;
  • .vpnuri.png – QR-код для импорта в AmneziaVPN.

Два QR-кода легко перепутать. Для приложения AmneziaVPN я использовал файл .vpnuri или картинку .vpnuri.png.

Шаг 8. Копируем профиль на компьютер

На Mac открываем второе окно Terminal. В нём мы уже работаем локально, не внутри сервера.

Создаём папку:

mkdir -p ~/VPN
chmod 700 ~/VPN

Скачиваем профиль:

scp root@IP_ВАШЕГО_СЕРВЕРА:/root/awg/petr_mac.vpnuri ~/VPN/

Защищаем файл от чтения другими пользователями компьютера:

chmod 600 ~/VPN/petr_mac.vpnuri

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

Для iPhone проще передать отдельный .vpnuri через AirDrop. Ещё один вариант – открыть .vpnuri.png на компьютере и отсканировать QR-код телефоном.

Шаг 9. Устанавливаем приложение

Скачиваем AmneziaVPN с официального сайта:

amnezia.org/ru/downloads

Для моего профиля нужен клиент с поддержкой AmneziaWG 2.0. Установщик указал версию AmneziaVPN 4.8.12.7 или новее.

В приложении выбираем добавление подключения из файла и импортируем petr_mac.vpnuri. Затем включаем VPN.

Проверяем IP в браузере на 2ip.ru или командой:

curl -4 -s ifconfig.me; echo

Должен появиться IP вашего московского сервера.

На сервере проверяем handshake:

awg show awg0

Возле нужного peer должна появиться строка latest handshake, а ниже – принятый и отправленный трафик.

Шаг 10. Настраиваем раздельный трафик

Полный VPN отправляет через Москву вообще всё. Для моей задачи это неудобно. YouTube, Facebook и AI-сервисы либо работают хуже с российским IP, либо вообще его не любят.

Мне нужно обратное поведение:

  • Яндекс, Росэлторг, банки и государственные сайты идут через VPN;
  • весь остальной интернет идёт напрямую через Аргентину.

В AmneziaVPN открываем раздел раздельного туннелирования сайтов и выбираем режим:

Только адреса из списка должны открываться через VPN

Формулировка принципиальна. Если выбрать противоположный режим, через VPN пойдёт весь интернет, кроме списка.

На macOS и iOS AmneziaVPN делит трафик по IPv4-адресам и подсетям, а не по отдельным приложениям. Добавить один yandex.ru недостаточно: крупный сервис использует множество адресов, и они меняются.

Я собрал отдельный JSON со списком подсетей для:

  • Яндекса и его сервисов;
  • Росэлторга;
  • Сбера;
  • Т-Банка;
  • Альфа-Банка;
  • ВТБ;
  • Госуслуг;
  • ФНС, ЕИС, ГИС Торги и других государственных порталов.

В AmneziaVPN делаем так:

  1. Отключаем VPN.
  2. Открываем «Раздельное туннелирование сайтов».
  3. Выбираем «Только адреса из списка должны открываться через VPN».
  4. Нажимаем три точки и выбираем импорт.
  5. Выбираем «Заменить список».
  6. Загружаем JSON.
  7. Включаем раздельное туннелирование и заново подключаем VPN.

После этого Яндекс должен видеть российский IP, а YouTube – ваш обычный зарубежный.

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

Что получилось у меня

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

Сейчас через Москву у меня идут Яндекс, Метрика, Вебмастер, банки и государственные сайты. YouTube, Facebook, ChatGPT, Claude и обычный веб-трафик продолжают работать через Аргентину.

Для второго устройства я создаю новый профиль одной командой. Если доступ больше не нужен, удаляю его:

bash /root/awg/manage_amneziawg.sh remove ИМЯ_ПРОФИЛЯ

Где слабое место

IP принадлежит дата-центру. Сайты видят Россию, но при глубокой проверке могут понять, что адрес серверный. Яндекс и рабочие сервисы у меня с ним работают. Банк вправе включить дополнительную проверку или капчу.

VPS не превратится в домашний интернет настройкой или другим протоколом. Если сервис принимает только «домашние» адреса, понадобится компьютер или роутер в российской квартире.

Вторая проблема – списки IP меняются. Если через месяц отдельный сервис снова начнёт видеть зарубежный адрес, список раздельного туннелирования придётся обновить.

И ещё бытовой момент: вы сами отвечаете за сервер. Нужно вовремя продлевать его и не раздавать клиентские конфиги всем подряд.

У меня эта схема заработала. Теперь я плачу за конкретный сервер, вижу, кто к нему подключён, и не переключаю VPN вручную каждый раз, когда открываю Метрику или YouTube.