- 1
Маршрутизация по доменам через DNS прокси (keen-dns-proxy)
-
Recently Browsing 0 members
- No registered users viewing this page.
This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.
Question
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 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.