June 9, 2022

Чем заменить VPN

Что случилось?

Сервис GlobalCheck cообщил, что в это воскресенье (05.06.2022 года) пользователи стали жаловаться на проблемы в некоторых регионах страны с доступностью к корпоративным VPN, работающим по протоколам IPsec и IKEv2.

Проблемы со связью через шифрованные туннели наблюдались в регионах Западной Сибири и на юге России, включая сети в Краснодаре и Ростове-на-Дону. Причем на некоторых операторах, включая "Ростелеком", в регионах на ранее рабочих IPsec VPN туннелях перестали проходить данные между сервером и клиентами внутри РФ. Аналогичные проблемы наблюдаются с серверами на L2TP и при работе VPN через протокол IKEv2 в разных областях страны.

Через некоторое время по большей части проблема прекратилась, туннели стали работать штатно, но не во всех регионах. Операторы связи, провайдеры и Роскомнадзор ранее не предупреждали о возможных ограничениях в работе VPN по протоколам L2TP и IPSec в эти выходные. Вероятно, это были какие-то тестированные проверки механизма блокировки различных VPN-сервисов и механизмов VPN, но сейчас они отключены или продолжаются, в зависимости от места выбранных тестов.

Это говорит о том, что наши "регулирующие органы" вполне готовы решить проблему доступности гражданам VPN сервисов.

Как решить проблему?

Проблему доступности информации в сети решить можно, просто нужно вспомнить о доступной и интересной технологии: Shadowsocks. Если коротко - это прокси-сервер с шифрованием трафика и авторизацией по паролю. Проект с открытым исходным кодом, можно посмотреть страничку на Github. Shadowsocks пригодится:

  • для защиты ваших данных в ненадёжных сетях (при подключении к публичным точкам Wi-Fi);
  • для реализации права на свободу информации, если по каким-либо причинам интересующий сайт не открывается;
  • для защиты от перехвата трафика и внедрения на страницы сайтов рекламы;
  • для защиты от несанкционированных подписок на платные услуги, когда пользуетесь мобильным интернетом.

Единственный выход - купить (арендовать) собственный сервер и настроить шифрование трафика через него. Причем для настройки серверной части не понадобятся супер силы, достаточно VPS начального уровня с лишь 512 Мб ОЗУ, одним ядром процессора и минимум дискового пространства.
Предлагаю воспользоваться shadowsocks-libev, это легкий защищенный прокси-сервер SOCKS5, который написан на чистом Cи и разработан как облегченная реализация протокола shadowsocks, чтобы максимально снизить использование ресурсов.

Для работы мобильных устройств будем использовать Outline - это проект дочерней компании jigsaw входящий в Google, компания специализируется на создании инструментов для обхода блокировок или повышения приватности, Outline - один из их проектов.

Что нужно для Shadowsocks

  1. Нужен собственный VPS, Virtual Private, или Dedicated Server (VPS или VDS) – это два названия одной и той же услуги, представляющей собой сдачу в аренду физически удаленного сервера. Лучше c Ubuntu, так проще. Сойдёт любой дешёвый виртуальный сервер, подобрать под свои нужды лучше на этом сервисе.
  2. Потребуется умение заходить в терминал по SSH.
  3. Нужно поставить программы-клиенты на ПК и телефоны, в качестве клиентов для мобильных устройств будем использовать Outline.

Установка и настройка серверной части

Во всех популярных дистрибутивах Linux, которые установлены на виртуальных серверах, shadowsocks-libev есть в основных репозитория, устанавливается одной командой (пример для debian/ubuntu).

  • Устанавливаем Shadowsocks:
apt update
apt install shadowsocks-libev
  • Создаём конфигурационный файл:
nano /etc/shadowsocks-libev/config.json
  • Вставляем в файл следующий текст, заменив IP-адрес сервера на ваш, и придумав новый пароль в разделе `password`:
{
"server": "NNN.NNN.NNN.NNN",
"server_port": "8388",
"password": "your_password",
"timeout": 600,
"method": "aes-256-gcm",
"fast_open": true
}
  • Запускаем Shadowsocks:
systemctl restart shadowsocks-libev
  • Добавляем его в автозапуск:
systemctl enable shadowsocks-libev
  • Разрешаем firewall пропускать трафик:
ufw allow 8388/tcp
ufw allow 8388/udp
ufw reload
  • Тюнинг настроек ядра сервера для максимальной производительности (разработчики рекомендуют следующие настройки):
  • The priciples of tuning parameters for shadowsocks are:
    * Reuse ports and conections as soon as possible.
    * Enlarge the queues and buffers as large as possible.
    * Choose the TCP congestion algorithm for large latency and high throughput.
    Here is an example /etc/sysctl.conf of our production servers:
nano /etc/sysctl.conf

И вносим в конец файла следующий текст:

fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla
  • Даём команду перечитать настройки ядра `sysctl -p` и перезагружаем сервер командой `reboot`.

Настраиваем ПК Windows:

  • скачайте Shadowsocks for Windows
  • Запустите Shadowsocks.
  • Нажмите правой кнопкой на значок Shadowsocks в трее рядом с часами, перейдите в `Servers > Edit server`
  • Введите параметры:
    * IP-адрес вашего сервера
    * Порт 8388
    * Метод aes-256-gcm
    * Ваш пароль
  • Сохраните настройки.
  • Снова нажмите на Shadowsocks правой кнопкой, выберите включение прокси для всей системы.
  • Для удобства можно включить автозагрузку тут же в настройках.

Настройка мобильных устройств:

Тут как раз максимально просто: скачайте бесплатное приложение Outline для своего мобильного устройства, на официальном сайте есть ссылки для AppStore и Google Play. Для добавления в Outline необходимо сделать специфичную ссылку на свой сервер. Наберите в любом текстовом редакторе: method:password@hostname:port, именно так, без пробелов, это:

  • aes-256-gcm,
  • далее ваш пароль,
  • адрес сервера и порт.

Скопируйте method:password@hostname:port и идите на сайт Base64, куда вставьте текст в окно конвертера и нажмите Encode text to Base64, получите текст примерно такого вида: `bWV0aG9kOnBhc3N3b3JkQGhvc3RuYW1lOnBvcnQ=`. Добавьте впереди `ss://`, получив ссылку вида:

ss://bWV0aG9kOnBhc3N3b3JkQGhvc3RuYW1lOnBvcnQ=

Эту ссылку отправьте на своё мобильное устройство (через Телеграмм, например), запустите программу Outline, скопируйте ссылку, Outline предложит вам добавить сервер. Согласитесь, с добавлением сервера и с созданием профиля VPN.