Боремся с экстремизмом и дискриминацией: поднимаем VPN за полчаса
Важный и очень понятный дисклеймер. На момент публикации этого гайда (5 февраля 2024 года) обсуждение и использование личных средств обхода блокировок не является противозаконным. Автор свято чтит русское законодательство и не призывает вас к совершению противоправных действий. Всё, что вы делаете, вы делаете на свой страх и риск. Я предупредил.
Итак, ситуация. Вам нужно скачать драйвера для вашего чипсета Intel, вы заходите на официальный сайт и видите, что эта контора пидарасов повесила заглушку «мы остановили бизнес в России».
Знакомо, да? В 2023 году педерастия была объявлена экстремизмом в нашей стране — так давайте же бороться с экстремизмом вместе!
Хостинг
Для начала вам нужен собственный сервер. Это должна быть виртуальная машина (VPS) или выделенный сервер (VDS). Шаред-хостинги и прочее не подойдут — нам нужен полноценный линукс-компьютер, к которому мы имеем рут-доступ. В нынешние времена этот пункт самый сложный — мало того, что половина зарубежных хостингов выкинула россиян на мороз (кто-то из-за отсутствия возможности заплатить МИРом или криптой, кто-то — потому что пидарасы экстремисты), так ещё и с 1 февраля 2024 года компаниям, не входящим в реестр РКН, запрещено предоставлять услуги хостинга россиянам. Ни одна зарубежная компания в этот список не зарегистрировалась.
Помимо выбора компании, которая продаст вам доступ к линукс-машине, вам сразу надо будет выбрать одну определенную локацию, где она будет находиться. Здесь вам не коммерческий VPN, пощелкать в приложении среди пятидесяти стран не получится. Если вы находитесь за пределами нашего богоспасаемого отечества и хотите получить доступ к сайтам внутри России — арендуйте машину в России. В противном случае — арендуйте машину там, где ближе всего ваши любимые сайты. Для европейской части России отлично работают сервера в Нидерландах, Германии или Франции.
Ссылок на хостинги по изложенным выше причинам давать не буду — в комментариях к моему каналу пользователи предложили свои варианты, выбирайте. Ну или гугл в помощь. Удачи.
Софт
VPN-решения для селфхоста делятся на два типа: «технические» и «для обычных пользователей». Первые требуют более полного погружения со стороны пользователя в процесс настройки, зато по итогу пользователь понимает, что конкретно обеспечивает работу его соединения и может довериться в какой-то мере ПО с открытым исходным кодом. Вторые же прячут всю техническую требуху за простым пользовательским интерфейсом — с одной стороны, обычному пользователю так удобней, с другой, безопасность и надёжность такого решения ненамного лучше, чем у просто коммерческих VPN. В общем, выбор за пользователем, а я освещу оба варианта.
Amnezia VPN
... идёт нахуй. Это ваш прямой пропуск в каталажку. Господа открыто сотрудничают с политическими диссидентами и в целом не вызывают доверия (а ещё я не сразу нашёл исходники, но они есть). Кроме того, они требуют полный доступ к вашему серверу: по сути, вы передаёте сервер в управление чужому дяде без гарантий и ответственности. Если завтра эти товарищи решат устроить из серверов, на которых установлена их программа, ботнет, атакующий Пентагон/Минобороны/Китай/кого там нынче модно будет атаковать — вы мало того, что ничего с этим и сделаете, так ещё и сами за это присядете, так как, выдав рут-доступ этому приложению, вы на всё согласились и начали нести ответственность.
В целом, важное правило безопасности: никогда не доверяйтесь системам, которые сотрудничают с политическими диссидентами, оппозицией (или властями) той или иной страны, и прочими товарищами, взаимодействие с которыми может привести рядового Васю Пупкина в состав Шторм Z. Опять же, я вас предупредил.
Outline VPN
А вот этот софт пробовать можно. Ссылка: тыц. Исходники в наличии, если есть желание провести аудит — пожалуйста. Диссидентскую прессу не рекламируют — и то хлеб. Впрочем, весь мой спич про ботнет выше вполне себе применим и к Outline VPN, так что этот способ рекомендуется исключительно тем, кто не хочет заморачиваться — и исключительно на чистой виртуалке, где больше ничего не установлено.
Итак, предположим, что вы нашли хостинг, и купили себе там виртуалку. Для дальнейших шагов будет использоваться следующая конфигурация:
Машинка, конечно, весьма хилая, но для одного-двух пользователей VPN будет вполне достаточно. Для чистоты эксперимента автор воспользовался не собственной инфраструктурой, а завёл VPS на одном из рекомендованных пользователями сервисов.
Итак, я получил письмо с параметрами сервера, и запустил таймер на телефоне. Предположим, что у вас установлена Windows — в последних версиях Windows 10 и Windows 11 уже встроен SSH-клиент из консоли. Открываем Windows Terminal (правой кнопкой мыши по меню Пуск → Windows Terminal) и в открывшемся окне набираем:
$ ssh root@<IP-адрес, который вам предоставил хостинг, например, 112.19.54.22>
У вас попросят пароль — ввведите тот, что вам предоставил хостинг (или тот, что установили сами при установке ОС через панель управления хостинга). Нас встретит «дружелюбная» оболочка Ubuntu. Первым делом, обновляем систему — чаще всего, хостинги устанавливают ОС с готовых образов, которые обновляют раз в полгода.
# apt update && apt upgrade && reboot
На предложенный список пакетов для обновления отвечаем Y, после чего система автоматически обновится и перезагрузится.
Так как мы выбираем «хомячковый путь», то вся дальнейшая история опять же проходит через приложение поставщика VPN. Скачиваем его отсюда (Outline Manager), ну или с гитхаба. Приложение доступно под Windows, Linux и macOS.
После установки приложение встречает нас мастером настройки:
Скорее всего, нас будет интересовать четвёртый пункт — «Настройте Outline где угодно». Выбираем его:
Нам предлагается запустить bash-скрипт для установки Outline на сервер. Скрипт можно (и нужно!) почитать вот тут — запускать что попало на своих машинах не глядя, нельзя!
Открываем Windows Terminal (если вы его вдруг закрыли), после чего заходим на свой сервер по SSH:
$ ssh root@<IP-адрес>
После того, как увидели приветствие Ubuntu в терминале, копипастим туда предложенную команду. Скрипт предложит установить Docker — соглашаемся. Установка Docker занимает пару минут.
В конце скрипт поздравит вас с установкой Outline и покажет зелёным текстом строку, которую надо скопировать в Outline Manager. Нажимаем «Готово», иии...
А что же нам установил Outline? Так как это ПО работает в Docker, мы можем проверить запущенные контейнеры, выполнив в терминале нашей убунты команду docker ps:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b3b05335449 containrrr/watchtower "/watchtower --clean…" 3 minutes ago Up 3 minutes (healthy) 8080/tcp watchtower
bc485a0f8ee6 quay.io/outline/shadowbox:stable "docker-entrypoint.s…" 3 minutes ago Up 3 minutes
shadowboxКак видим, запущены два контейнера: сам Outline и ватчдог, который следит за его состоянием. Исходники для них можно найти — это упражнение оставляю пытливому читателю.
Командой netstat -nlp в том же убунтовском терминале можно проверить открытые порты, которые слушает наш сервер:
# netstat -nlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 430/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 560/sshd: /usr/sbin tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN 2519/prometheus tcp 0 0 127.0.0.1:9092 0.0.0.0:* LISTEN 2524/outline-ss-ser tcp6 0 0 ::1:9091 :::* LISTEN 2508/node tcp6 0 0 :::22 :::* LISTEN 560/sshd: /usr/sbin tcp6 0 0 :::55840 :::* LISTEN 2508/node tcp6 0 0 :::36791 :::* LISTEN 2524/outline-ss-ser udp 0 0 127.0.0.53:53 0.0.0.0:* 430/systemd-resolve udp6 0 0 :::36791 :::* 2524/outline-ss-ser raw6 0 0 :::58 :::* 7 388/systemd-network ...
Пришло время устанавливать клиент — скачивается он там же, где и сервер. Клиенты есть под Android, iOS, Windows, Linux и macOS. После установки на ПК нас встретит вот такое окно:
Предположим, что вы доверяете разработчикам Outline (иначе вы бы не дали им рут-доступ на предыдущем шаге, не так ли?). Нажимаем ОК.
Нажимаем «Добавить сервер». Приложение запросит ключ доступа — переходим в Outline Manager, и видим, что у нашего сервера внизу установлен один ключ доступа. Нажимаем кнопку Share рядом с ним и копируем ключ в буфер обмена. Клиент Outline автоматически прочитает ключ из буфера обмена, и вставит его (ай-яй-яй, господа, прослушивать буфер обмена — нехорошо!).
Нажимаем «Добавить сервер». Сервер появляется в интерфейсе, и теперь осталось только нажать кнопку «Подключить». Готово, вы восхитительны!
Время установки: около 10 минут.
- вы доверяете свою виртуалку в прямое управление неизвестной группе лиц
- политические риски (брендированный VPN-клиент могут искать на устройствах пользователей, например — причём не только с помощью личного визита товарища майора)
Если указанные выше минусы вас устраивают — поздравляю, можете расслабиться и скачивать ваши драйвера с сайта Intel. Меня такой подход не устраивает, поэтому пришло время засучить рукава и погрузиться в колдовство с терминалом. Простенькое, но колдовство.
WireGuard
Итак, вы решили немного покрасноглазить и установить самый популярный сервер VPN последних нескольких лет. И сразу же важный дисклеймер: в некоторых сетях банят всех WireGuard-соединения без разбору, включая личные и даже рабочие. Я с таким не сталкивался, но предупредить должен.
Итак, возвращаемся в исходное положение — у нас есть чистый сервер с Ubuntu 22.04, конфиг которого я описал в разделе про Outline. Заходим на него по SSH, обновляем, перезагружаем...
У нас есть два пути: тяжёлый и полегче. Тяжёлый — это устанавливать руками wireguard-tools, бодаться с ключами, и так далее. Лёгкий — взять готовый докер-контейнер с конфигуратором, например, тут. К контейнеру прилагается читаемый Dockerfile и исходники админ-панели, идущей в комплекте. В этот раз мы пойдём лёгким путём.
Для начала, устанавливаем Docker последней версии. Для этого вводим в терминале Ubuntu команду:
# curl https://get.docker.com/ | sh
Этот автоматический скрипт добавит репозиторий Docker в систему и установит его. Напоминаю, что перед запуском скриптов на своей машине в них лучше заглянуть!
После завершения выполнения скрипта командой docker info проверяем, что сервис установился. В ответ на команду в консоли должно появиться нечто подобное:
# docker info
Client: Docker Engine - Community
Version: 25.0.2
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.12.1
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.24.5
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 25.0.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.15.0-91-generic
Operating System: Ubuntu 22.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.918GiB
Name: p513342.kvmvps
ID: 91998490-e43b-4dc4-ae64-f9a780389728
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: falseСледующим шагом будет написание файла Docker Compose: это специальный файл, который описывает запускаемый Docker-ом сервис с его параметрами. Написание таких файлов для запускаемых контейнеров — отличная идея. Он позволяет обеспечить автозапуск и управление сервисом простыми командами, без длинной колбасы параметров командной строки. Файл Docker Compose называется docker-compose.yaml. Для его написания на сервере введите команду nano ~/docker-compose.yaml
Откроется не самый дружелюбный в мире текстовый редактор Nano, который, впрочем, позволяет в себя спокойно копипастить — а большего нам, в целом и не требуется. Ваш файл docker-compose.yaml должен выглядеть примерно вот так:
version: "2.4"
services:
wgeasy:
container_name: wgeasy
image: ghcr.io/wg-easy/wg-easy
restart: unless-stopped
environment:
- LANG=ru
- WG_HOST=<ваш IP адрес, который вам предоставил хостинг>
- PASSWORD=<ваш суперсекретный пароль>
volumes:
- "~/.wgeasy:/etc/wireguard"
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1Этот файл задаёт параметры контейнера: что за образ запускать, какие порты открыть, какие привилегии предоставить. Подробнее о синтаксисе файла можно прочитать здесь.
Сохранив файл, приступаем к первому запуску контейнера. Для этого набираем docker compose up. В случае успеха у вас в терминале появится нечто подобное:
Если у вас появилась строка Wireguard Config synced, первый запуск прошёл успешно. Останавливайте контейнер, нажав Ctrl-C — мы не хотим постоянно висящий терминал, который подключен к нашей виртуалке, поэтому мы должны запустить контейнер в «отвязанном» режиме — то есть, в фоне. Для этого выполняем команду:
# docker compose up -d
Ключ -d в этой команде указывает Docker, что мы не хотим подключаться к логам контейнера, и хотим видеть его в фоне. Теперь, чтобы увидеть логи контейнера, мы можем запустить команду docker compose logs.
Для следующего шага нам понадобится веб-браузер и тот пароль, что вы записали в файле docker-compose.yaml ранее (вы же позаботились о том, чтобы он был надёжным, верно?). Открываем сайт с адресом http://<IP вашей виртуалки>:51821. Да, именно так — http и с номером порта на конце. В случае успеха вас поприветствует интерфейс, который попросит пароль:
По умолчанию в наш WireGuard-сервер не добавлен ни один клиент.
Пара клиент-сервер обязательна для работы данного VPN, так что добавляем нашего первого клиента. Нажимаем New Client:
В поле Name вводим любое удобное имя — сейчас мы будем настраивать клиент для Windows, поэтому я назову клиент «windows». Нажимаем Create:
Клиент создан. Теперь нам надо подключиться. Скачиваем официальное приложение WireGuard для Windows с сайта проекта (кнопка Download Windows Installer в самом верху). Клиент запускается автоматически сразу после установки (и не даёт себя скриншотить).
Возвращаемся в веб-браузер с нашей админкой Wireguard, где нажимаем кнопку скачивания рядом с нашим добавленным клиентом «windows». Открыв клиент Wireguard, нажимаем в основном окне кнопку «Импорт туннелей из файла». В открывшемся проводнике выбираем скачанный файл (в данном случае — «windows.conf»), нажимаем ОК и видим, что наш конфиг добавился в клиентское приложение.
Нажимаем «Подключить» справа ближе к центру. Если ваш провайдер не страдает фигней и не блокирует весь WireGuard-трафик — готово, вы восхитительны!
Процедура настройки WireGuard на телефоне ещё более простая: устанавливаем клиент из Google Play, в веб-интерфейсе нашего WireGuard-сервера добавляем клиента, нажимаем рядом с ним кнопку с изображением QR-кода, открываем WireGuard на телефоне, нажимаем плюсик, сканируем код, радуемся жизни.
Ну как «радуемся», скорость оно режет примерно на половину от той, что рекламирует хостинг виртуалки, но для своих задач — вполне подойдёт. Общее время установки VPN и настройки двух клиентов — где-то 15-20 минут.
Пара слов про фаерволы
Во время написания этого гайда я ни разу не упомянул настройку фаерволов. Дело в том, что большинство хостинг-провайдеров не имеют фаервола на своей стороне, и в целом не препятствуют никакому трафику, исходящему от ваших виртуальных машин. Однако это верно не для всех провайдеров — а кроме того, вы можете захотеть настроить себе фаервол самостоятельно — так что могут возникать ситуации, когда трафик вашего VPN-сервера блокируется. Так как гайд уже разросся в простыню, я оставлю настройку фаервола на своей виртуалке за скобками (отличная идея для статьи уважаемому @coweram, кстати). Ну а если вам попался хостинг, у которого есть свой внешний фаервол — здоровья погибшим, время ковыряться в их панели управления или общаться с техподдержкой.
Заключение
Надеюсь, этот гайд был вам полезен. В этой части я затронул достаточно простые (как для установки, так и для блокировки со стороны провайдера) виды VPN — в дебри ShadowSocks и прочих шаманств я, пожалуй, погружусь в следующий раз. Для большинства пользователей одного из двух представленных выше вариантов должно хватить за глаза — во всяком случае пока. Дерзайте, и помните — за селфхостом будущее.