Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Требуется организовать совместную работу встроенного в Keenetic DHCP сервера и внешнего (dnsmasq из OPKG/Entware) сервера DNS. Хочется, чтобы узлы в домашней LAN, автоматически получающие ip адресацию по DHCP, также автоматически регистрировали свой hostname в dnsmasq, по которому (hostname с или без добавления домена) к ним можно обращаться в пределах LAN. Использование dnsmaq вместо ndhcps вызвано необходимостью поддержки ipset. Мне видятся 3 возможных варианта решения: 1) dnsmasq мог бы читать данные из dhcpd.lease, но, судя по всему, этот файл не использует ndhcps; 2) полный отказ от ndhcps и раздача ip адресов средствами dnsmasq, но это может серьезно влиять на другие составляющие NDM, которые используют результаты работы ndhcp; 3) использование DNS прокси для перенаправления запросов на разрешение имен в домашней LAN от dnsmasq к ndhcps (как это настроить?). При этом хочется учесть возможные нюансы с дополнительными DNS серверами, получаемыми через VPN подключение, например, к корпоративной сети и используемыми для разрешения имен в рабочей LAN. ТП Keenetic ожидаемо открестилась от вопроса ("мы не поддерживаем пакеты entware"), сообщив только, что следует рассмотреть вариант 2. Я во всем этом не силен, опасаюсь поломать зависимости ndhcps, поэтому обращаюсь за помощью к сообществу.

У кого-то есть опыт успешной настройки такого сценария?

Опубликовано

Я бы попробовал следующее:

  • назначил основным DNS-сервером dnsmasq,
  • в настройках кинетика прописал локальный домен, например, lan,
  • указал dnsmasq'у разрешать имена домена .lan через прошивочный DNS-сервис.
Опубликовано (изменено)
1 час назад, Александр Рыжов сказал:

Я бы попробовал следующее:

  • назначил основным DNS-сервером dnsmasq,
  • в настройках кинетика прописал локальный домен, например, lan,
  • указал dnsmasq'у разрешать имена домена .lan через прошивочный DNS-сервис.

-Так и сделано

- Настроено

- Чтобы заработал dnsmasq прошивочный DNS отключается специальной командой в CLI KeeneticOS opkg dns-override. Насколько я понял, эта команда просто убирает прослушку 53-го порта прошивочным ndhcps, чтобы не конфликтовать с dnsmasq. Собственно ndhcps в запущенных процессах остается, т.к. он же продолжает работать в качестве DHCP, поэтому и появилаcь мысль из п.3, но каких-либо файлов настроек для ndhcps я не обнаружил, параметры его запуска весьма скудны (для смены порта ничего нет), и даже, где/как на это повлиять я тоже не знаю.

Если это поможет, добавлю подробностей. Началось вот с этого https://habr.com/ru/post/428992/ При этом используется (там же в комментариях) встроенный в KeeneticOS механизм прокси DNS (для DoT/DoH в частности). Спустя небольшое время, я обнаружил, что у меня перестали разрешаться имена в домашней локалке и рабочей (через openvpn) сети. При этом средствами/командами KeeneticOS я вижу, что встроенный ndhcps успешно регистрирует имена хостов в моей домашней сети при общении с ними по DHCP. Теперь пытаюсь решить проблему, как эту инфо сообщить dnsmasq-у. Если я правильно понял, то, следует как-то разруливать DNS запросы через dns-proxy KeeneticOS (есть подозрение, что он работает/настраивается, к сожалению, только для DoT/DoH) к а) прошивочному ndhcps для домена домашней сети (при этом его надо заставить слушать на отличном от 53 порту), б) к NDS серверам, прилетающим через openvpn для домена рабочей сети, в) к DoT/DoH - для всех остальных. Осталось все это правильно настроить,  если такое возможно 🙂

Изменено пользователем ale_xb
Опубликовано
2 часа назад, ale_xb сказал:

-Так и сделано

- Настроено

- Чтобы заработал dnsmasq прошивочный DNS отключается специальной командой в CLI KeeneticOS opkg dns-override. Насколько я понял, эта команда просто убирает прослушку 53-го порта прошивочным ndhcps, чтобы не конфликтовать с dnsmasq. Собственно ndhcps в запущенных процессах остается, т.к. он же продолжает работать в качестве DHCP, поэтому и появилаcь мысль из п.3, но каких-либо файлов настроек для ndhcps я не обнаружил, параметры его запуска весьма скудны (для смены порта ничего нет), и даже, где/как на это повлиять я тоже не знаю.

Если это поможет, добавлю подробностей. Началось вот с этого https://habr.com/ru/post/428992/ При этом используется (там же в комментариях) встроенный в KeeneticOS механизм прокси DNS (для DoT/DoH в частности). Спустя небольшое время, я обнаружил, что у меня перестали разрешаться имена в домашней локалке и рабочей (через openvpn) сети. При этом средствами/командами KeeneticOS я вижу, что встроенный ndhcps успешно регистрирует имена хостов в моей домашней сети при общении с ними по DHCP. Теперь пытаюсь решить проблему, как эту инфо сообщить dnsmasq-у. Если я правильно понял, то, следует как-то разруливать DNS запросы через dns-proxy KeeneticOS (есть подозрение, что он работает/настраивается, к сожалению, только для DoT/DoH) к а) прошивочному ndhcps для домена домашней сети (при этом его надо заставить слушать на отличном от 53 порту), б) к NDS серверам, прилетающим через openvpn для домена рабочей сети, в) к DoT/DoH - для всех остальных. Осталось все это правильно настроить,  если такое возможно 🙂

Совсем тупой вариант, но в целом рабочий - это по вызову neighbour.d с action == update_dhcp получать из ndmq список dhcp-лизов через 'show ip dhcp bindings', засовывать в dnsmasq и слать ему сигнал на перечитывание конфига.

Опубликовано
23 минуты назад, Le ecureuil сказал:

127.0.0.1:10053 вроде бы, для своих нужд внутренних.

100% при отключение "opkg dns-override" остается только для лок.ресурсов 127.0.0.1, для AdGuardHome помогает доп.строка в настройках

  bind_hosts:
  - 127.0.0.1
  - 192.168.1.1

Если нет AdGuardHome а хочется получать обновления при "dns-override" то помогает настройка

interface Bridge0
    rename Home
...

ip name-server 192.168.1.1 "" on Home

В WEB ее не добавить, только CLI

Опубликовано (изменено)
1 час назад, Le ecureuil сказал:

Совсем тупой вариант, но в целом рабочий - это по вызову neighbour.d с action == update_dhcp получать из ndmq список dhcp-лизов через 'show ip dhcp bindings', засовывать в dnsmasq и слать ему сигнал на перечитывание конфига.

Думал о чем-то подобном, но (для меня точно) это уж как-то слишком сложно, т.к. потребует, вероятно, написание скрипта для обработки вывода show ip dhcp bindings

Более подходящим представляется путь, указанный vasek00 с учетом сказанного Le ecureuil "127.0.0.1:10053 вроде бы, для своих нужд внутренних". Хотя, я и не вижу, чтобы ndhcps занимался чем-то кроме DHCP после команды opkg dns-override

root@keenetic:~$ netstat -atunp | grep ndhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           6553/ndhcps
udp        0      0 0.0.0.0:67              0.0.0.0:*                           6552/ndhcps

udp        0      0 0.0.0.0:68              0.0.0.0:*                           1130/ndhcpc
udp        0      0 0.0.0.0:68              0.0.0.0:*                           650/ndhcpc

 

UPD: ТП заверила, что никаких особых зависимостей других служб от ndhcps нет. Советовали только обратить внимание на обнаружение устройств по WiFi (группа команд ip hostpot), но я пока не сообразил, как это может быть связано. Таким образом, самый простой путь, вероятно, запуск/настройка DHCP на dnsmasq с отключением встроенного командой no service dhcp

Изменено пользователем ale_xb
Опубликовано (изменено)

@Le ecureuilА почему после "dns-override", запросы на резолв хоста (myhost.lan) от wireguard не идут через мой dns-сервис? №запроса в ТП - 578667

 

    wireguard peer CLbTMUyIQHk= !Zy
        endpoint myhost.lan
        keepalive-interval 30
        allow-ips 0.0.0.0 0.0.0.0
    !

Да и вообще странно работает:

~ # dig warp-1.lan
;; SERVER: 1.0.0.1#53(1.0.0.1) (UDP)

~ # dig warp-1.lan @127.0.0.1
;; ANSWER SECTION:
warp-1.lan.             0       IN      A       162.159.192.1
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)

~ # dig warp-1.lan @192.168.97.97
;; ANSWER SECTION:
warp-1.lan.             0       IN      A       162.159.192.1
;; SERVER: 192.168.97.97#53(192.168.97.97) (UDP)

 

Весь лог:

Скрытый текст
~ # dig warp-1.lan

; <<>> DiG 9.17.20 <<>> warp-1.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29073
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;warp-1.lan.                    IN      A

;; AUTHORITY SECTION:
.                       86400   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2022040701 1800 900 604800 86400

;; Query time: 12 msec
;; SERVER: 1.0.0.1#53(1.0.0.1) (UDP)
;; WHEN: Thu Apr 07 17:08:52 MSK 2022
;; MSG SIZE  rcvd: 114

~ # dig warp-1.lan @127.0.0.1

; <<>> DiG 9.17.20 <<>> warp-1.lan @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49949
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;warp-1.lan.                    IN      A

;; ANSWER SECTION:
warp-1.lan.             0       IN      A       162.159.192.1

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Thu Apr 07 17:08:59 MSK 2022
;; MSG SIZE  rcvd: 55

~ # dig warp-1.lan @192.168.97.97

; <<>> DiG 9.17.20 <<>> warp-1.lan @192.168.97.97
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57674
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;warp-1.lan.                    IN      A

;; ANSWER SECTION:
warp-1.lan.             0       IN      A       162.159.192.1

;; Query time: 0 msec
;; SERVER: 192.168.97.97#53(192.168.97.97) (UDP)
;; WHEN: Thu Apr 07 17:09:06 MSK 2022
;; MSG SIZE  rcvd: 55

 

 

Изменено пользователем avn
Опубликовано
4 минуты назад, Le ecureuil сказал:

Лучше покажите что у вас в ip name-server.

ip name-server 8.8.8.8 "" on Wireguard1
ip name-server 1.0.0.1 "" on Wireguard2

 

Опубликовано

@ale_xb, у вас единственная нерешённая задача:

7 часов назад, ale_xb сказал:

Хочется, чтобы узлы в домашней LAN, автоматически получающие ip адресацию по DHCP, также автоматически регистрировали свой hostname в dnsmasq,

верно? Пока не понял зачем вас связки MAC-hostname, если надо просто разрешать имена из локальной сети, например, myclient.lan. Достаточно строчки в конфиге dnmasq:

server=/lan/127.0.0.1#10053

 

Опубликовано (изменено)
3 часа назад, Александр Рыжов сказал:

@ale_xb, у вас единственная нерешённая задача:

верно? Пока не понял зачем вас связки MAC-hostname, если надо просто разрешать имена из локальной сети, например, myclient.lan. Достаточно строчки в конфиге dnmasq:

server=/lan/127.0.0.1#10053

Вроде я про связки MAC-ов ничего не говорил. Да, требуется просто обычное разрешение имен в домашней и рабочей сети. В домашней (соответствующем ей домене) - для hostname-ов устройств, которые они сами сообщают при получении настроек от DHCP сервера, в рабочей (тоже для своего домена) - согласно тому, что сообщают DNS сервера, полученные при поднятии vpn соединения.

Указанная строка теоретически должна бы работать, но, как я писал выше, я не обнаружил, что встроенный ndhcps слушает что-то кроме 67 порта после выполнения команды opkg dns-override. Аналогичная строка для рабочего DNS сервера у меня тоже есть в dnsmasq.conf :

server=/my_work_domain.local/10.10.1.2#53

но теперь она также не работает. И, кстати, что делать, если завтра "прилетят" при поднятии vpn другие адреса рабочего DNS сервера, руками менять их в dnsmasq.conf?

Изменено пользователем ale_xb
Опубликовано
39 минут назад, ale_xb сказал:

Вроде я про связки MAC-ов ничего не говорил. Да, требуется просто обычное разрешение имен в домашней и рабочей сети. В домашней (соответствующем ей домене) - для hostname-ов устройств, которые они сами сообщают при получении настроек от DHCP сервера, в рабочей (тоже для своего домена) - согласно тому, что сообщают DNS сервера, полученные при поднятии vpn соединения.

Указанная строка теоретически должна бы работать, но, как я писал выше, я не обнаружил, что встроенный ndhcps слушает что-то кроме 67 порта после выполнения команды opkg dns-override. Аналогичная строка для рабочего DNS сервера у меня тоже есть в dnsmasq.conf :

server=/my_work_domain.local/10.10.1.2#53

но теперь она также не работает. И, кстати, что делать, если завтра "прилетят" при поднятии vpn другие адреса рабочего DNS сервера, руками менять их в dnsmasq.conf?

Можно воспользоваться решением, которое Вам предложили выше. Примерно это повесить на событие neighbour.d с action == update_dhcp получать из ndmq список dhcp-лизов. Соответственно читать дополнительно конфиг dns_dhcp=/tmp/dnsmasq-dhcp.dnsmasq из основного конфига dnsmasq (include)

#!/bin/sh

dns_dhcp=/tmp/dnsmasq-dhcp.dnsmasq
dns_dhcp_tmp=/tmp/dnsmasq-dhcp.dnsmasq.tmp

curl -s http://localhost:79/rci/show/ip/dhcp/bindings 2>/dev/null | jq -r '.lease[] | "server=/" + .name + ".lan/" + .ip' > $dns_dhcp_tmp

/opt/sbin/dnsmasq --test --conf-file=$dns_dhcp_tmp
if [ "$?" == "0" ]; then
	mv -f $dns_dhcp_tmp $dns_dhcp
	/opt/etc/init.d/S56dnsmasq restart
	logger "$(wc -l < $dns_dhcp) domains added to $dns_dhcp"
fi

10053 - У меня так же не слушается.

Опубликовано
8 часов назад, Le ecureuil сказал:

Совсем тупой вариант, но в целом рабочий - это по вызову neighbour.d с action == update_dhcp получать из ndmq список dhcp-лизов через 'show ip dhcp bindings', засовывать в dnsmasq и слать ему сигнал на перечитывание конфига.

Ошиблись? Нет update_dhcp в документации https://github.com/ndmsystems/packages/wiki/Opkg-Component

Опубликовано
6 часов назад, avn сказал:

Ошиблись? Нет update_dhcp в документации https://github.com/ndmsystems/packages/wiki/Opkg-Component

Ох, и правда. В системе такой тип есть, но наружу вывести забыли. Добавлю.

Опубликовано
В 07.04.2022 в 23:32, ale_xb сказал:

Аналогичная строка для рабочего DNS сервера у меня тоже есть в dnsmasq.conf :

server=/my_work_domain.local/10.10.1.2#53

но теперь она также не работает. И, кстати, что делать, если завтра "прилетят" при поднятии vpn другие адреса рабочего DNS сервера, руками менять их в dnsmasq.conf?

С этим разобрался. DNS серверы на работе нормально "прилетают" при поднятии VPN и разрешают имена для рабочего домена. Cрабатывала защита от получения ответов апстримов с частными ip адресами из-за вот этой строки в dnsmasq.conf

stop-dns-rebind

Пришлось добавить рабочий домен в исключения:

rebind-domain-ok=/onion/home/my_work_domain.local/

Опубликовано (изменено)

пробовал отключить прошивочный ndhcps и раздавать всё необходимое по DHCP средствами dnsmasq. Работает, но нужного результата я все равно не смог добиться, не хватает понимания настроек dnsmasq.conf, вероятно. Может, кто помочь конкретным конфигом? Повторю задачу (конкретные значения указаны в качестве примера):

1. Раздать ip адреса в домашней локалке, например, 192.168.0.2-200.

2. Сообщить вместе с ip адресом:

  • правильную маску /24
  • шлюз по умолчанию 192.168.0.1
  • DNS сервер 192.168.0.1 При необходимости он уже сам либо отвечает за домен домашней локалки, либо форвардит запрос upstream-у по DoT/DoH, либо DNS серверу в рабочей сети, полученному при поднятии соответствующего VPN, с привязкой к ее (рабочей сети) домену work-domain.
  • адрес(а)/имена NTP сервера(ов) - это просто для удобства pool.ntp.org
  • имя домена домашней локалки home

3. Получить в процессе назначения IP адреса запросившему его хосту в домашней локалке его (хоста) hostname и зарегистрировать данное имя, как hostname.home в базе лиз dnsmasq и/или файле hosts

В итоге должны успешно разрешаться имена вида xyz и xyz.home для хостов в домашней локалке и abc.work-domain для хостов в рабочей сети, ну и, разумеется, ya.ru, google.ru и все остальное.

Проблема у меня именно с п.3  😒

Изменено пользователем ale_xb
Опубликовано

А чем хук не устраивает для локальных адресов, приведенный выше? Для сети домена - разрешают адрес вышестоящий днс сервер.

Опубликовано (изменено)
1 час назад, avn сказал:

А чем хук не устраивает для локальных адресов, приведенный выше? Для сети домена - разрешают адрес вышестоящий днс сервер.

Вы об update-dhcp, которого нет? Или я вас не понял. Устроит любой вариант. Мне бы простыми словами понятную инструкцию...

Изменено пользователем ale_xb
Опубликовано
15 часов назад, ale_xb сказал:

Вы об update-dhcp, которого нет? Или я вас не понял. Устроит любой вариант. Мне бы простыми словами понятную инструкцию...

Так я выше скрипт выкладывал. Вы попробуйте его запустить и посмотрите файл /tmp/dnsmasq-dhcp.dnsmasq

Опубликовано (изменено)

Ура, работает. Спасибо! Уточнения:

1. Требуется установить парсер json:

opkg install jq

2.  В строке curl ..... вместо server, вероятно, следует писать address, т.е.

curl -s http://localhost:79/rci/show/ip/dhcp/bindings 2>/dev/null | jq -r '.lease[] | "address=/" + .name + ".lan/" + .ip' > $dns_dhcp_tmp

директива server говорит, что для данного домена за разрешением имен следует обращаться на хост с указанным IP, т.е. DNS запрос для, например, xyz.lan будет форвардиться dnsmasq-ом в этом случае на ip этого самого xyz.lan и, разумеется, оставаться безответным - NXDOMAIN. address - тоже не правильный вариант, т.к.  для, например, abc.xyz.lan будет возвращен тот же ip, что и для xyz.lan (см.Доп.вопросы ниже), но  этого в моем случае достаточно.

3. Пока не доделал/разобрался, как, куда и на какое действие правильно повесить этот скрипт. Займусь попозже.

Доп.вопросы:

  • А в чем разница, если аналогичным скриптом обновлять файл hosts ? Что лучше/правильнее - hosts или конфиг dnsmasq-а? Вроде, hosts приоритетнее конфига dnsmasq и не будет неоднозначности для abc.xyz.lan/xyz.lan.
  • не понятно, почему аналогичного результата я не смог добиться, когда пытался в качестве DHCP использовать dnsmasq вместо прошивочного ndhcps. Может, это более правильный и простой путь без доп.скриптов, и мне надо только разобраться с конфигом dnsmaq в части его DHCP функционала, аналогичного команде

ip dhcp pool _WEBADMIN update-dns

у прошивочного ndhcps Keenetic?

Изменено пользователем ale_xb
Опубликовано

Ну да, у метода есть недостатки. Как Вам сказали выше, нужен еще один скрипт, который нужно положить сюда /opt/etc/ndm/neighbour.d/,

например /opt/etc/ndm/neighbour.d/100_update-dhcp.sh:

#!/bin/sh

[ "$type" != "update_dhcp" ] && exit 0

/opt/bin/update-dhcp.sh &

exit 0

 

Опубликовано
1 час назад, avn сказал:
[ "$type" != "update_dhcp" ] && exit 0

Все же я что-то не понимаю. Вы же сами выше писали, что действие update-dhcp не поддерживается в neighbour.d, т.е. скрипт update-dhcp.sh не будет никогда запускаться.

Опубликовано (изменено)
В 08.04.2022 в 07:14, Le ecureuil сказал:

Ох, и правда. В системе такой тип есть, но наружу вывести забыли. Добавлю.

 

20 минут назад, ale_xb сказал:

Все же я что-то не понимаю. Вы же сами выше писали, что действие update-dhcp не поддерживается в neighbour.d, т.е. скрипт update-dhcp.sh не будет никогда запускаться.

Ошибка в документации или исправят в ближайшее время?

Изменено пользователем avn
Опубликовано
36 минут назад, avn сказал:

Ошибка в документации

Если я, наконец, правильно Вас понял, то update-dhcp в действительности поддерживается, просто его забыли описать. Ок, спасибо еще раз. Попробую все это доделать на днях.

И все же последнее

  1. не правильнее ли это делать через файл hosts?
  2. можете, что сказать по полному отказу от ndhcps в пользу dnsmasq, что я мог неверно сделать и мне следует проверить?
  • 2 недели спустя...
Опубликовано

Дока обновлена, код тоже доделан. Теперь в neighbour.d есть action == dhcp когда клиент получает адрес по DHCP и обновляется его имя хоста.

Появится в следующей сборке 3.08.

  • 1 месяц спустя...
Опубликовано (изменено)

Вот что у меня получилось на 3.8 Beta 2

/opt/bin/dns_dhcp.sh

#!/bin/sh

DNS_DHCP_DIR=/tmp/dnsmasq.hosts
DNS_DHCP_FILE=$DNS_DHCP_DIR/dhcp

mkdir -p $DNS_DHCP_DIR
echo "192.168.0.1       router" > $DNS_DHCP_FILE

curl -s http://localhost:79/rci/show/ip/dhcp/bindings 2>/dev/null | jq -r '.lease[] | {"ip": .ip, "name" : (.name // .hostname)} | select(.name | . != "") | .ip +"\t"+ .name' >> $DNS_DHCP_FILE

т.е. оно фильтрует если вдруг name или hostname отсутствуют или пустые.

 

/opt/etc/ndm/neighbour.d/100_update-dhcp.sh

#!/bin/sh

[ "$update" != "dhcp" ] && exit 0

/opt/bin/dns_dhcp.sh &

exit 0

тут может ещё как-то можно "запуски" пофильтровать?

 

/opt/etc/dnsmasq.conf

...
#no-poll 
hostsdir=/tmp/dnsmasq.hosts
...

 

Вроде всё работает, но вот кто-то каждые 5 секунд обновляет /etc/resolv.conf (ЭТО ВООБЩЕ НОРМАЛЬНО?) и из за этого dnsmasq всё заново перечитывает и спамит в логи.

Костыль:

/opt/etc/dnsmasq.conf

...
resolv-file=/tmp/resolv.dnsmasq
...

 

/opt/etc/cron.1min/update_resolv.sh

#! /bin/sh
cmp -s /etc/resolv.conf /tmp/resolv.dnsmasq || cp /etc/resolv.conf /tmp/resolv.dnsmasq

оно конечно при стартах всяких там vpn будет целую минуту ждать, но всё равно, это лучше чем каждые 5 секунд в лог спамить и перечитывать конфиг полностью.

Изменено пользователем srgsf
Опубликовано
14 часа назад, srgsf сказал:

Вот что у меня получилось на 3.8 Beta 2

/opt/bin/dns_dhcp.sh

#!/bin/sh

DNS_DHCP_DIR=/tmp/dnsmasq.hosts
DNS_DHCP_FILE=$DNS_DHCP_DIR/dhcp

mkdir -p $DNS_DHCP_DIR
echo "192.168.0.1       router" > $DNS_DHCP_FILE

curl -s http://localhost:79/rci/show/ip/dhcp/bindings 2>/dev/null | jq -r '.lease[] | {"ip": .ip, "name" : (.name // .hostname)} | select(.name | . != "") | .ip +"\t"+ .name' >> $DNS_DHCP_FILE

т.е. оно фильтрует если вдруг name или hostname отсутствуют или пустые.

 

/opt/etc/ndm/neighbour.d/100_update-dhcp.sh

#!/bin/sh

[ "$update" != "dhcp" ] && exit 0

/opt/bin/dns_dhcp.sh &

exit 0

тут может ещё как-то можно "запуски" пофильтровать?

 

/opt/etc/dnsmasq.conf

...
#no-poll 
hostsdir=/tmp/dnsmasq.hosts
...

 

Вроде всё работает, но вот кто-то каждые 5 секунд обновляет /etc/resolv.conf (ЭТО ВООБЩЕ НОРМАЛЬНО?) и из за этого dnsmasq всё заново перечитывает и спамит в логи.

Костыль:

/opt/etc/dnsmasq.conf

...
resolv-file=/tmp/resolv.dnsmasq
...

 

/opt/etc/cron.1min/update_resolv.sh

#! /bin/sh
cmp -s /etc/resolv.conf /tmp/resolv.dnsmasq || cp /etc/resolv.conf /tmp/resolv.dnsmasq

оно конечно при стартах всяких там vpn будет целую минуту ждать, но всё равно, это лучше чем каждые 5 секунд в лог спамить и перечитывать конфиг полностью.

 

Так, а зачем no-pool отключили? Пусть один раз и читает?

Опубликовано
4 hours ago, avn said:

 

Так, а зачем no-pool отключили? Пусть один раз и читает?

Похоже что от провайдера dns адреса позже приходят чем dnsmasq стартует. 

Возможно, если есть какой-нибудь хук на "прилёт" настроек от dhcp клиента, то там перезагрузить dnsmasq (но это тоже получается такой-же костыль)

на 3.7 тоже каждые 5 секунд кто-то трогает /etc/resolv.conf ? Это фича или баг?

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.