Самохостинг (часть 2) - Динамический роутинг на Keenetic

Самохостинг (часть 2) - Динамический роутинг на Keenetic
Photo by Javier Allegue Barros / Unsplash

Допустим у нас есть роутер Keenetic. Нам нужно, чтоб некоторые сайты грузились через поднятый на нем туннель (это может быть Wireguard, L2TP или даже банальный Socks5 proxy).

Например, нас забанил Youtube по нашему внешнему IP адресу 😉, но мы все равно хотим его смотреть, да не на телефоне, а на нормальном телевизоре.

У нас есть несколько путей:

  1. Найти все IP адреса Google или Youtube и отправить весь трафик на эти сети в туннель (получив во всех Google смену локации, что не всегда нам удобно). Но тут нет гарантии, что мы узнаем все адреса или не добавятся новые.
  2. Проверить какие адреса отдают нам DNS сервера и направить только их. Тут мы на 300% через время получаем другие адреса из DNS и придется руками лезть в маршруты и снова их менять.
  3. Сделать все максимально автоматизировано.

Я выбрал третий путь. Мне кажется он сильно более простым.


DNS RouteSync Navigator

Утилита позволяет на основе списков DNS имен добавлять маршруты в роутер. Принцип работы прост, как двери. Утилита выступает в качестве DNS сервера и если запрошен домен из списка, то перед тем как отдать ответ клиенту она добавляет маршрут на эти IP адреса в роутер через указанный интерфейс или шлюз. Вот и вся магия.

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

Клонируем себе на сервер эту утилиту

mkdir ~/projects && cd ~/projects
git clone https://github.com/Ground-Zerro/DNS-RouteSync-Navigator
cd DNS-RouteSync-Navigator

Ставим python зависимости

pip install -r requirements.txt

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

Авторизуемся в админке роутера (например, `http://192.168.1.1`), добавляем "a" к адресу (`http://192.168.1.1/a`) и вводим в командную строку "show interface". Ищем наш VPN интерфейс и копируем его ID.

Теперь вносим все необходимые данные в config.ini и filter.txt.

Дальше запускаем утилиту в тестовом режиме.

python main.py

Если все прошло хорошо, то можно попробовать получить IP адреса

dig @<ip вашего сервера> youtube.com

Должен вернуть IP адреса youtube.com. Теперь можно запускать в режиме сервиса

bash ./start.sh

Выбираем необходимый пункт меню для запуска или установки в качестве сервиса.


Если Ваш 53/udp порт занят

Если вы видите в логах ошибку, что порт занят, то у вас кто-то уже слушает 53 порт. Вероятнее всего это systemd, который используется сейчас повсеместно. Заставить его так не делать можно легким способом:

sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
sudo mv /etc/resolv.conf{,.bak}
echo "nameserver 127.0.0.1" | sudo tee -a /etc/resolv.conf
echo "search ." | sudo tee -a /etc/resolv.conf

Теперь утилита должна запуститься нормально.

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

sudo netstat -nlp | grep 53

или

sudo ss -nlp | grep 53

Read more

🔄 Своя Dropbox-альтернатива: Syncthing

🔄 Своя Dropbox-альтернатива: Syncthing

🧠 Зачем? Облачные сервисы — удобно, но: * не хочется платить Google/Dropbox за хранение своих файлов * хочется моментально синхронизировать фото, документы и заметки между устройствами * и делать это на своём сервере, без отправки данных «в облако» 👉 Решение — Syncthing: децентрализованный, зашифрованный, open source-синк между любыми устройствами. 🚀 Что ты получишь? * 📂 Автосинк папок между сервером,

🎧 Свой подкаст-сервер за 5 минут: Podgrab

🎧 Свой подкаст-сервер за 5 минут: Podgrab

✨ Зачем? Подкасты — отличный способ учиться, развлекаться и быть в курсе мира. Но что, если: * Хочется слушать подкасты офлайн * Хочется архивировать любимые шоу * Не устраивают сторонние сервисы, реклама и трекеры Решение: Podgrab — простой подкаст-граббер, который автоматически скачивает новые выпуски с любого RSS. А в связке с Audiobookshelf ты получаешь полноценный медиасервер.

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Введение: Почему это важно В мире DevOps и системного администрирования существует простое правило: всё ломается. Особенно в самый неподходящий момент. Когда вы изменяете конфигурацию критического сервиса (например, Nginx), цена ошибки может быть очень высока — от простого даунтайма до потери данных. Ansible предлагает элегантное решение для безопасного внесения изменений через механизм

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Файл ~/.ssh/authorized_keys позволяет настроить команды, которые будут выполняться при входящих SSH-соединениях. Это полезный инструмент для управления доступом и обеспечения безопасности, особенно при работе с резервным копированием данных. Настройка резервного копирования с использованием authorized_keys В данном примере рассматривается использование authorized_keys для настройки резервного копирования базы данных Bacula