ale_xb Posted April 7, 2022 Share Posted April 7, 2022 Требуется организовать совместную работу встроенного в 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, поэтому обращаюсь за помощью к сообществу. У кого-то есть опыт успешной настройки такого сценария? Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted April 7, 2022 Share Posted April 7, 2022 Я бы попробовал следующее: назначил основным DNS-сервером dnsmasq, в настройках кинетика прописал локальный домен, например, lan, указал dnsmasq'у разрешать имена домена .lan через прошивочный DNS-сервис. Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 7, 2022 Author Share Posted April 7, 2022 (edited) 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 - для всех остальных. Осталось все это правильно настроить, если такое возможно 🙂 Edited April 7, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted April 7, 2022 Share Posted April 7, 2022 @Le ecureuil, слушает ли прошивочный DNS-сервер какой-либо порт после `opkg dns-override`? Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted April 7, 2022 Share Posted April 7, 2022 3 минуты назад, Александр Рыжов сказал: @Le ecureuil, слушает ли прошивочный DNS-сервер какой-либо порт после `opkg dns-override`? 127.0.0.1:10053 вроде бы, для своих нужд внутренних. Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted April 7, 2022 Share Posted April 7, 2022 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 и слать ему сигнал на перечитывание конфига. Quote Link to comment Share on other sites More sharing options...
vasek00 Posted April 7, 2022 Share Posted April 7, 2022 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 Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 7, 2022 Author Share Posted April 7, 2022 (edited) 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 ndhcpudp 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 Edited April 7, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
avn Posted April 7, 2022 Share Posted April 7, 2022 (edited) @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 Edited April 7, 2022 by avn Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted April 7, 2022 Share Posted April 7, 2022 Лучше покажите что у вас в ip name-server. Quote Link to comment Share on other sites More sharing options...
avn Posted April 7, 2022 Share Posted April 7, 2022 4 минуты назад, Le ecureuil сказал: Лучше покажите что у вас в ip name-server. ip name-server 8.8.8.8 "" on Wireguard1 ip name-server 1.0.0.1 "" on Wireguard2 Quote Link to comment Share on other sites More sharing options...
Александр Рыжов Posted April 7, 2022 Share Posted April 7, 2022 @ale_xb, у вас единственная нерешённая задача: 7 часов назад, ale_xb сказал: Хочется, чтобы узлы в домашней LAN, автоматически получающие ip адресацию по DHCP, также автоматически регистрировали свой hostname в dnsmasq, верно? Пока не понял зачем вас связки MAC-hostname, если надо просто разрешать имена из локальной сети, например, myclient.lan. Достаточно строчки в конфиге dnmasq: server=/lan/127.0.0.1#10053 Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 7, 2022 Author Share Posted April 7, 2022 (edited) 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? Edited April 7, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
avn Posted April 7, 2022 Share Posted April 7, 2022 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 - У меня так же не слушается. Quote Link to comment Share on other sites More sharing options...
avn Posted April 7, 2022 Share Posted April 7, 2022 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 Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted April 8, 2022 Share Posted April 8, 2022 6 часов назад, avn сказал: Ошиблись? Нет update_dhcp в документации https://github.com/ndmsystems/packages/wiki/Opkg-Component Ох, и правда. В системе такой тип есть, но наружу вывести забыли. Добавлю. Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 9, 2022 Author Share Posted April 9, 2022 В 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/ Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 10, 2022 Author Share Posted April 10, 2022 (edited) пробовал отключить прошивочный 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 😒 Edited April 10, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
avn Posted April 10, 2022 Share Posted April 10, 2022 А чем хук не устраивает для локальных адресов, приведенный выше? Для сети домена - разрешают адрес вышестоящий днс сервер. Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 10, 2022 Author Share Posted April 10, 2022 (edited) 1 час назад, avn сказал: А чем хук не устраивает для локальных адресов, приведенный выше? Для сети домена - разрешают адрес вышестоящий днс сервер. Вы об update-dhcp, которого нет? Или я вас не понял. Устроит любой вариант. Мне бы простыми словами понятную инструкцию... Edited April 10, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
avn Posted April 11, 2022 Share Posted April 11, 2022 15 часов назад, ale_xb сказал: Вы об update-dhcp, которого нет? Или я вас не понял. Устроит любой вариант. Мне бы простыми словами понятную инструкцию... Так я выше скрипт выкладывал. Вы попробуйте его запустить и посмотрите файл /tmp/dnsmasq-dhcp.dnsmasq Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 11, 2022 Author Share Posted April 11, 2022 (edited) Ура, работает. Спасибо! Уточнения: 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? Edited April 11, 2022 by ale_xb Quote Link to comment Share on other sites More sharing options...
avn Posted April 11, 2022 Share Posted April 11, 2022 Ну да, у метода есть недостатки. Как Вам сказали выше, нужен еще один скрипт, который нужно положить сюда /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 Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 11, 2022 Author Share Posted April 11, 2022 1 час назад, avn сказал: [ "$type" != "update_dhcp" ] && exit 0 Все же я что-то не понимаю. Вы же сами выше писали, что действие update-dhcp не поддерживается в neighbour.d, т.е. скрипт update-dhcp.sh не будет никогда запускаться. Quote Link to comment Share on other sites More sharing options...
avn Posted April 11, 2022 Share Posted April 11, 2022 (edited) В 08.04.2022 в 07:14, Le ecureuil сказал: Ох, и правда. В системе такой тип есть, но наружу вывести забыли. Добавлю. 20 минут назад, ale_xb сказал: Все же я что-то не понимаю. Вы же сами выше писали, что действие update-dhcp не поддерживается в neighbour.d, т.е. скрипт update-dhcp.sh не будет никогда запускаться. Ошибка в документации или исправят в ближайшее время? Edited April 11, 2022 by avn Quote Link to comment Share on other sites More sharing options...
ale_xb Posted April 11, 2022 Author Share Posted April 11, 2022 36 минут назад, avn сказал: Ошибка в документации Если я, наконец, правильно Вас понял, то update-dhcp в действительности поддерживается, просто его забыли описать. Ок, спасибо еще раз. Попробую все это доделать на днях. И все же последнее не правильнее ли это делать через файл hosts? можете, что сказать по полному отказу от ndhcps в пользу dnsmasq, что я мог неверно сделать и мне следует проверить? Quote Link to comment Share on other sites More sharing options...
Le ecureuil Posted April 21, 2022 Share Posted April 21, 2022 Дока обновлена, код тоже доделан. Теперь в neighbour.d есть action == dhcp когда клиент получает адрес по DHCP и обновляется его имя хоста. Появится в следующей сборке 3.08. 1 Quote Link to comment Share on other sites More sharing options...
srgsf Posted May 23, 2022 Share Posted May 23, 2022 (edited) Вот что у меня получилось на 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 секунд в лог спамить и перечитывать конфиг полностью. Edited May 23, 2022 by srgsf Quote Link to comment Share on other sites More sharing options...
avn Posted May 24, 2022 Share Posted May 24, 2022 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 отключили? Пусть один раз и читает? Quote Link to comment Share on other sites More sharing options...
srgsf Posted May 24, 2022 Share Posted May 24, 2022 4 hours ago, avn said: Так, а зачем no-pool отключили? Пусть один раз и читает? Похоже что от провайдера dns адреса позже приходят чем dnsmasq стартует. Возможно, если есть какой-нибудь хук на "прилёт" настроек от dhcp клиента, то там перезагрузить dnsmasq (но это тоже получается такой-же костыль) на 3.7 тоже каждые 5 секунд кто-то трогает /etc/resolv.conf ? Это фича или баг? Quote Link to comment Share on other sites More sharing options...
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.