Данная статья относится к "личному опыту" автора, выбранные решения не являются "уникальными", но как показал опыт, являются оптимальным решением трёх проблем: простой "VPN своими руками", интернет без раздражающей рекламы и трекеров, максимально низкое энергопотребление в idle (актуально для смартфонов и планшетов). Для нормального функционирования данного решения потребуется устройство с сервисами Google Play и желательно Samsung Knox. Выбор NaïveProxy обусловлен низким энергопотреблением, высокой устойчивостью к детектированию и MITM атакам.

Ваша свобода в интернете зависит** от свободы интернета в стране, где расположен удаленный сервер. **Но это не точно :)
Ваша свобода в интернете зависит** от свободы интернета в стране, где расположен удаленный сервер. **Но это не точно :)

На просторах интернета можно встретить большое количество статей про настройку VPN своими руками, но все они подразумевают использование неких автоматических скриптов настройки (которые не всегда правильно отрабатывают) или написаны гиками для гиков. С помощью данной статьи вы сможете настроить всё сами, без смс и регистрации с пониманием того, что делаете.

Настройка сервера

1. Выбор и аренда сервера

Выбор сервера оставлю на ваше усмотрение, пойдет любой VDS, в нужной стране, с выделенным IPv4 (при определенном везении, можно арендовать за 100р/мес). Рекомендуемая операционная система - Ubuntu 22 (именно на ней проводилось тестирование). Хочу обратить внимание, что входящий порт 443 может быть закрыт внешним брандмауэром, тогда читайте инструкцию по настройке конкретного VDS.

2. Настройка DDNS

На сайте freemyip.com выбираем любое имя, получаем токен (например: https://freemyip.com/update?token=d6cb6bd1206a0f38e9b9d023&domain=мойдомен.freemyip.com). Не добавляем данный токен в приложения, где есть предварительный просмотр сайтов по ссылке (Telegram, WA, etc.), иначе имя будет сопоставлено, например, с одним из IP Telegram.

3. Настройка сервера

После аренды сервера и его оплаты, получив заветный логин и пароль на почту, начинаем настройку. Все действия делаем от пользователя root да простят меня гуру консоли . Если у вас ПК с Windows вам понадобится PuTTY, если смартфон/планшет Android - JuiceSSH.

Вводим IP вашего сервера, логин: root пароль: который прислали на почту, выполняем подключение к удаленному серверу.

JuiceSSH
JuiceSSH

Устанавливаем текущие обновления системы, после ввода команды нажимаем клавишу enter:

apt update && apt upgrade -y && reboot

Сопоставляем DDNS имя вашему серверу:

curl https://freemyip.com/update?token=d6cb6bd1206a0f38e9b9d023&domain=мойдомен.freemyip.com

Скачиваем серверную часть NaïveProxy - Caddy и перемещаем в системную директорию (актуальную версию можно посмотреть здесь):

wget https://github.com/klzgrad/forwardproxy/releases/download/v2.7.4-caddy2-naive/caddy-forwardproxy-naive.tar.xz && tar xvf caddy-forwardproxy-naive.tar.xz && cd caddy-forwardproxy-naive && mv caddy /usr/bin/

Создаем системную службу:

cat > /etc/systemd/system/caddy.service

Вставляем текст из буфера обмена и записываем в файл, нажимаем enter и ctrl+d

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

Создаем файл конфигурации проки-сервера NaïveProxy - Caddy. Хочу обратить внимание на расположение файла конфигурации и его имя, изменять его не стоит.

mkdir /etc/caddy && cat > /etc/caddy/Caddyfile

Перед этим редактируем настройки. Значения выделены жирным шрифтом подлежат замене:

  • мойдомен.freemyip.com - ваше DDNS имя, зарегистрированное на втором шаге;

  • моя@почта.ru - почта для автопродления сертификата TLS;

  • логин пароль - пароль и логин генерируем пару.

Вставляем текст из буфера обмена и записываем в файл:

{
order forward_proxy before file_server
}
:443, мойдомен.freemyip.com {
tls моя@почта.ru
forward_proxy {
basic_auth логин пароль
hide_ip
hide_via
probe_resistance
}
file_server {
root /var/www/html
}
}

Первый запуск и выпуск сертификата (через минуту завершайте процесс ctrl+c):

/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Устанавливаем системную службу:

systemctl daemon-reload && systemctl enable --now caddy && systemctl status caddy

Настраиваем брандмауэр (оставляем только 22 порт для SSH и 443 для NaïveProxy):

ufw allow 22/tcp && ufw allow 443/tcp && ufw enable

Настраиваем автообновление сервера и продление DDNS:

crontab -e

Вставляем текст из буфера обмена, если открыли в редакторе nano (1), то сохраняем настройки ctrl+x, далее "y" и enter. Сервер будет автоматически перезагружаться в 00:00 и устанавливать обновления в 03:00 каждый день.

0 0 * * * reboot

0 3 * * * curl https://freemyip.com/update?token=d6cb6bd1206a0f38e9b9d023&domain=мойдомен.freemyip.com

0 3 * * * apt update && apt upgrade -y

Для "усложнения" детектирования VPN сервера, отключаем ICMP - данное решение является спорным (способ не раз обсуждался на разных форумах):

sed -i '/ufw-before-input.*icmp/s/ACCEPT/DROP/g' /etc/ufw/before.rules

Перезагружем сервер командой reboot, на этом настройка сервера завершена.

Настройка клиента

Настраиваем прокси и маршрутизацию - SagerNet

Данная программа будет отвечать за подключение к нашему внешнему NaïveProxy серверу, выполнять маршрутизацию траффика на стороне клиента (например: домены .ru маршрутизируются в обход проски), а также создает локальный SOCKS5 проски сервер, который нам потребуется как точка подключения MITM блокировщика рекламы - Adguard.

Скачиваем и устанвливаем SagerNet и плагин Naïve plugin, следить за обновлениями проекта можно на странице разработчика. Сразу отвечу на вопрос: "почему не новый проект этого разработчика - sing-box" - всё дело в энергопотреблении и удобстве настройки, да и плагин Naïve работает независимо от ядра sing-box/v2ray(fly).

Настройка SagerNet

  • меню "конфигурация" нажимаем кнопку добавить профиль - ручные настройки - naïve. Заполняем значения: сервер (имя сервера DDNS), имя пользователя, пароль, можно включить UDP поверх TCP.

  • меню "настройки" автоматическое подключение - вкл, сервисный режим - только прокси, включить анализ траффика - вкл, маршрут IPv6 - вкл, поставщик ресурсов правил - v2ray-rules-dat, удаленный DNS - tls://dns.google, использовать локальный DNS как прямой - вкл, включить маршрутизацию DNS - вкл;

  • меню "маршруты" создаем правило обхода доменов зоны .ru и правило geoip еще рекомендую из проки исключить популярные поисковые системы все это отправляем в "outbound - обход";

    • меню "..." и выбираем пункт "управление ресурсами маршрутов", нажимаем на кнопки обновить.

Не забываем в настройках смартфона убрать ограничение энергосбережения для SagerNet.

настройка SagerNet в картинках

Избавляемся от рекламы - Adguard

Скачиваем с сайта разработчика и устанавливаем. Программа платная, покупать или нет, каждый решает сам, под задачи, описанные в данной статье, хватит бесплатной версии. После установки следуйте подсказкам мастера настройки, обязательно установите сертификат для фильтрации HTTPS трафика в Chrome/Edge/Yandex/Samsung Internet/Firefox (не все браузеры доверяют системным сертификатам). Есть похожее приложение - Blokada.

настройка Adguard
добавляем прокси сервер SOCKS5
добавляем прокси сервер SOCKS5
"управления приложениями" исключаем приложение SagerNet из фильтрации
"управления приложениями" исключаем приложение SagerNet из фильтрации

Настройка Adguard

  • гобальное меню "настройки";

    • меню "основные" запускать при старте системы - вкл;

    • меню "расширенные" автоматизация (оттуда нужен пароль) - вкл, интервал для watchdog - 300;

    • меню "низкоуровневые настройки" резервные DNS серверы 8.8.8.8 8.8.4.4, encrypted client hello - вкл, проверка OCSP - вкл.

  • глобальное меню "настройки" ;

    • меню "фильтрация" - "сеть" - "прокси";

      • меню "прокси - сервер" добавляем прокси сервер SOCKS5 127.0.0.1 2080 UDP включить;

      • меню "приложения, работающие через прокси" - выбираем только приложения, которые надо заворачивать через прокси (обязательно исключить SagerNet).

  • глобальное меню "управления приложениями" исключаем приложение SagerNet из фильтрации.

Снижаем энергопотребление в простое - автоматизация

Как показала практика, на разных устройствах и разным набором приложений, включенный "локальный VPN" в режиме простоя, приводит к значительному расходу аккумулятора. Как это влияет на "беспокойный сон" приложений мне до сих пор не ясно, но это факт который легко проверить, например, используя GSam Battery Monitor (требуются дополнительные разрешения через adb).

Для автоматизации я выбрал приложение Tasker, аналогов много, главное условие - умение передавать дополнительные параметры приложениям.

настройка Tasker в картинках
создаем задачу: adguard on
создаем задачу: adguard on
задача "sent intent"
задача "sent intent"
задача "sent intent"
задача "sent intent"
создаем задачу: sync on
создаем задачу: sync on
создаем задачу: sync off
создаем задачу: sync off
в разделе "profiles" создаем событие
в разделе "profiles" создаем событие

Автовключение прокси и блокировщика рекламы, когда экран разблокирован и выключение через 10 минут если экран отключен.

В разделе "Tasks" создаем задачу: adguard on, данная задача не будет использовать скрипт и все позиции будут просты для понимания

  • задача "остановить" задачу "adguard off" (появится после создания такой задачи);

  • задача "sagernet" - конфигурация - запустить сервис;

  • задача "sent intent" - действие - start, extra - start, extra - password:пароль автоматизации adguard, extra - quiet:true, package - com.adguard.android, class - com.adguard.android.receiver.AutomationReceiver, target - broadcast receiver;

  • задача "остановить" задачу "adguard on" (появится после создания такой задачи).

В разделе "Tasks" создаем задачу: adguard off

  • задача "остановить" - задачу "adguard on";

  • задача "ждать" - 10 минут;

  • задача "sagernet" - конфигурация - остановить сервис;

  • задача "sent intent" - действие - pause, extra - pause, extra - password:пароль автоматизации adguard, extra - quiet:true, package - com.adguard.android, class - com.adguard.android.receiver.AutomationReceiver, target - broadcast receiver;

  • задача "остановить" задачу "adguard off".

Отлючение глобальной синхронизации через 4 часа бездействия смартфона (требуется смартфон/планшет с сервисами Google Play, т.к. после этого приложения будут пробуждаться с использованием технологии push).

В разделе "Tasks" создаем задачу: sync on

  • задача "остановить" - задачу "sync off";

  • задача "авто синхрониз." - включить;

  • задача "остановить" - задачу "sync on".

В разделе "Tasks" создаем задачу: sync off

  • задача "остановить" - задачу "sync on";

  • задача "ждать" - 4 часа;

  • задача "авто синхрониз." - выключить;

  • задача "остановить" - задачу "sync off".

Добавляем профили, в разделе "profiles" создаем событие

  • событие "экран разблокир." -> adguard on, sync on;

  • событие "экран погашен" -> adguard off, sync off.

Бонус для владельцев Samsung Knox

Благодаря наличию управляемого системного брандмауэра, можно ограничить паразитный трафик на системном уровне. Рекомендую установить приложение Disconnect Pro которое, при отключенном Adguard, продолжит блокировать трекеры и аналитику. У приложения нет настроек, оно не создаёт "локальный VPN", конечно у него есть альтернатива, где можно настроить все ручками - Adhell. Но это выходит за рамки данной статьи, т.к. для запуска приложения требуется исполнять определённые обряды, впрочем на 4pda есть исчерпывающая информация.

Настройка NaïveProxy на ПК

Устанавливаем расширение в браузер, например Proxy SwitchyOmega. Домены, которые хотим исключить прописываем в список "bypass list", начиная с "."

Скачиваем NaïveProxy, для Windows (для других платформ), перед запуском требуется отредактировать файл конфигурации config.json

{
"listen": "socks://127.0.0.1:2080",
"proxy": "https://логин:пароль@мойдомен.freemyip.com",
"log": ""
}

Не забываем naive.exe добавить в атозагрузку.

*Данная статья не является инструкцией по обходу блокировок и не призывает посещать запрещенные сайты.

Комментарии (3)


  1. VadimProfii
    05.10.2023 06:06
    -1

    Спасибо комрад!


  1. atrost Автор
    05.10.2023 06:06
    +4

    Настоятельно рекомендую использовать сервера DDNS для сокрытия реального "client hello" при установке соединения, а не подключаться напрямую по IP к вашему серверу.


  1. Luanna33
    05.10.2023 06:06

    Ради интернета без рекламы стоит попробовать