- 1
Маршрутизация по доменам через DNS прокси (keen-dns-proxy)
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.
Вопрос
belt0ev
Приветствую всех 🙂
Искал способ маршрутизации "на лету", чтобы не нужно было ставить entware пакеты на роутере. Заодно хотел задействовать домашний сервер. Не нашёл ничего готового, поэтому написал своё: так появилась идея dns прокси для выборочной маршрутизации.
Возможности решения:
IP адреса добавляются/удаляются на роутере (команда: "ip route <ip> <interface>")
Настройка DNS сервера
Настраивается и запускается буквально за пару минут.
Из требований: нужен docker + compose, и компонент ssh сервера на роутере. Потребление ram: 20-30 Мб.
1. Нужно создать файл docker-compose.yml
version: '3' services: keen-dns-proxy: container_name: keen-dns-proxy image: belt0ev/keen-dns-proxy volumes: - /home/home-dns/data:/app/data restart: unless-stopped privileged: true network_mode: host
"network_mode: host" - нужно для того, чтобы у контейнера был доступ к сети хоста, чтобы он мог обращаться к роутеру. В volumes указываете путь к папке data, где будет лежать конфиг и файл с доменами для роутинга.
В принципе, на этом этапе уже можно запустить "docker compose up -d" - сервер начнёт слушать запросы на порту 8053 и резолвить их через сервер Яндекса (77.88.8.8), и создаст пустой файл domains.txt в папке data. Больше ничего делать не будет.
2. Создать файл конфига appsettings.json в папке data
Это пример полностью заполненного конфига. Кратко по полям:
Опциональное поле (можно не указывать, если устраивает порт по умолчанию - 8053)
Тоже опциональное поле: интерфейсы можно указывать непосредственно в файле domains.txt
Важно: нужно брать "системное" название интерфейса. Посмотреть можно в cli роутера командой "show interface"
Можно указать просто ip адрес (тогда будет использоваться порт 53). Если не заполнить, запросы будут резолвиться через сервер Яндекса (77.88.8.8).
Поддерживает только udp сервера. Я использую adguard home, поэтому тут указываю его адрес.
Если не заполнить, запросы на обновление ip адресов отправляться не будут
Если не заполнить, запросы на обновление ip адресов отправляться не будут
3. Файл domains.txt
Его можно создать вручную в папке data, либо он будет создан при первом запуске сервера.
Пример заполнения:
# Можно использовать wildcard правила *kino.pub *openai* # Можно указывать непосредственно домен forum.keenetic.ru # Можно указать любой интерфейс для маппинга 2ip.ru|Wireguard0 *google.com|Openvpn1
Поддерживаются комментарии (# в начале строки) и пустые строки. Через символ "|" можно указывать интерфейсы, на которые должно маппиться правило.
После обновления файла нужно перезапустить сервер, чтобы изменения подхватились (команда "docker compose restart")
Ответы на вопросы
Напоследок: решение писалось для себя и под свои нужды, поэтому функционал может показаться небольшим. Но его достаточно для организации выборочной маршрутизации.
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.