Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Данная статья относится к "личному опыту" автора, выбранные решения не являются "уникальными", но как показал опыт, являются оптимальным решением трёх проблем: простой "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 пароль: который прислали на почту, выполняем подключение к удаленному серверу.
Устанавливаем текущие обновления системы, после ввода команды нажимаем клавишу 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 - вкл;
меню "маршруты" создаем domain:ru<br> domain:su<br> domain:yandex.com<br> domain:vk.com<br> domain:livejournal.com</p><p></p>" data-abbr="правило обхода доменов зоны .ru">правило обхода доменов зоны .ru и правило geoip еще рекомендую из проки исключить популярные поисковые системы все это отправляем в "outbound - обход";
меню "..." и выбираем пункт "управление ресурсами маршрутов", нажимаем на кнопки обновить.
Не забываем в настройках смартфона убрать ограничение энергосбережения для SagerNet.
настройка SagerNet в картинках
Избавляемся от рекламы - Adguard
настройка Adguard
Настройка 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 в картинках
Автовключение прокси и блокировщика рекламы, когда экран разблокирован и выключение через 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 добавить в атозагрузку.
*Данная статья не является инструкцией по обходу блокировок и не призывает посещать запрещенные сайты.