Самохостинг (часть 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

Самохостинг - стиль жизни

Самохостинг - стиль жизни

Я тут и тут писал про свой домашний сервер, но нигде не упоминал, что есть еще один сервер в ДЦ, где хостятся сайтики и кучка еще разных сервисов. Да и времени прошло с момента написания тех статей не мало. Сервер тот остался в другой стране и, как результат, все, что

Мониторинг долгих запросов PostgreSQL в Prometheus

Мониторинг долгих запросов PostgreSQL в Prometheus

Предположим, что у вас есть PostgreSQL (AWS RDS или классический PostgreSQL server), Prometheus, postgres exporter и alertmanager с Grafana. Стоит задача присылать уведомления о том, что в Postgres подвис запрос. Причина и т.п. нас мало интересует. Нужно просто сказать всем, кому положено, что есть проблема и ее нужно решить.

Почему я всё ещё люблю Fish Shell

Почему я всё ещё люблю Fish Shell

В 2017 году я написала о том, как сильно люблю Fish Shell, и спустя 7 лет ежедневного использования, я нашла ещё больше причин для восхищения. Поэтому решила написать новый пост, где соберу старые и новые причины моей любви к этой оболочке. Сегодня я задумалась об этом, потому что пыталась понять,

Понимание многоэтапной сборки Docker образов

Понимание многоэтапной сборки Docker образов

Введение Docker произвел революцию в том, как мы создаем, доставляем и запускаем программное обеспечение, позволяя разработчикам упаковывать приложения в контейнеризированные среды. Однако по мере усложнения приложений размеры Docker-образов могут значительно увеличиваться, что приводит к более длительному времени сборки, повышенным требованиям к хранилищу и потенциальным уязвимостям безопасности. Многоэтапные сборки Docker предлагают