Вопрос или проблема
Все DHCPOFFERы, которые я получаю от dnsmasq, имеют время аренды IP 2 минуты, и он игнорирует опции для его изменения.
Подробности:
У меня в сети два роутера:
- AVM FritzBox 7390 (192.168.0.1)
- VDSL2 модем
- База для DECT телефонов
- Реальная маршрутизация в интернет
- Netgear R7000 (с прошивкой FreshTomato, 192.168.0.2)
- Точка доступа WiFi
- DHCP сервер
Внутренний DNS у меня – это Pi-Hole, работающий в Docker-контейнере на моем сервере. (192.168.0.100)
DHCP сервер, который предоставляет FreshTomato, это dnsmasq, и мне нужно, чтобы он предоставлял новым клиентам следующую конфигурацию:
- IP в диапазоне 192.168.0.50 – …80
- Время аренды IP ~1 день
- Роутер – FritzBox (192.168.0.1)
- DNS-сервера – это Pi-Hole (192.168.0.100) и, альтернативно, FritzBox (192.168.0.1)
Поэтому я ввел всю эту информацию в интерфейс R7000, и при сохранении конфигурации генерируется следующий конфигурационный файл для dnsmasq:
pid-file=/var/run/dnsmasq.pid
resolv-file=/etc/resolv.dnsmasq
addn-hosts=/etc/dnsmasq
dhcp-hostsfile=/etc/dnsmasq
expand-hosts
min-port=4096
interface=br0
dhcp-range=tag:br0,192.168.0.50,192.168.0.80,255.255.255.0,1440m
dhcp-option=tag:br0,3,192.168.0.1
dhcp-lease-max=255
dhcp-authoritative
log-queries
dhcp-option=6,192.168.0.100,192.168.0.1
Это выглядит правильно для меня, когда я тестирую DHCP конфиг с помощью этого удобного скрипта nmap:
nmap --script broadcast-dhcp-discover
Я получаю следующий ответ:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.0.71
| DHCP Message Type: DHCPOFFER
| Server Identifier: 192.168.0.2
| IP Address Lease Time: 2m00s
| Renewal Time Value: 1m00s
| Rebinding Time Value: 1m45s
| Subnet Mask: 255.255.255.0
| Broadcast Address: 192.168.0.255
| Domain Name Server: 192.168.0.100, 192.168.0.1
|_ Router: 192.168.0.1
Всё верно, кроме того, что время аренды IP – всего 2 минуты. Некоторые устройства (3 смартфона и 2 Android планшета) в моей сети не любят такое короткое время аренды и теряют подключение к WiFi каждую минуту.
Кто-нибудь знает, в чем моя ошибка?
Забавный факт: я только что установил FreshTomato, до этого использовал DD-WRT, у которого была точно такая же проблема с dnsmasq.
Редактирование после нескольких тестов
Я создал небольшую тестовую среду для dnsmasq, чтобы протестировать некоторые конфигурации:
- Docker-контейнер, работающий с dnsmasq
- второй контейнер, запускающий этот скрипт nmap в цикле
Что я выяснил:
Когда я указываю время аренды в строке dhcp-range
, оно просто игнорируется.
Я обнаружил, что можно задать опции DHCP напрямую через их теги, назначенные IANA (https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xml)
Когда я установил время аренды DHCP с dhcp-option=51,48h
, время аренды изменилось, но время обновления и перепривязки – нет.
Установка их с помощью тегов 58 и 59 с
dhcp-option=58,24h # Время обновления DHCP (T1)
dhcp-option=59,42h # Время перепривязки DHCP (T2)
не помогла, так как результат, который я получил, был:
IP Address Lease Time: 2d00h00m00s
Renewal Time Value: 1m00s
Rebinding Time Value: 1m45s
Вы уверены, что dnsmasq принял изменения? Я сталкивался с проблемами, когда демон не перезапускался должным образом. Попробуйте перезагрузить роутер, чтобы убедиться, что изменения конфигурации действительно приняты таким образом. Если не хотите перезапускаться, просто перезапустите dnsmasq и проверьте, имеет ли он новый PID после перезапуска.
Кстати, вы не рассматривали возможность того, что ваш DHCP сервер действительно отвечает корректно, но скрипт nmap содержит ошибки? Я только что выполнил эту команду в своей локальной сети и получил такой же ответ. Когда я проверил в syslog, я смог убедиться, что аренды действительно были гораздо дольше.
Ответ или решение
Разбор проблемы с кратким временем аренды IP-адресов в сети, управляемой Dnsmasq, требует тщательного анализа и понимания различных аспектов его конфигурации и работы. В представленной ситуации клиент упоминает, что все DHCPOFFER пакеты от Dnsmasq предлагают IP-аренду на 2 минуты, несмотря на настройку большего времени аренды в конфигурации сервера DHCP на Netgear R7000 с прошивкой FreshTomato.
Теория
Dnsmasq — это компактный и легковесный сервер DHCP и DNS, широко используемый в домашних и малых офисных сетях. Его задачи — назначать IP-адреса клиентам, которые запрашивают их, и управлять этими арендами в рамках настроенной политики. Ключевые параметры, которые влияют на поведение Dnsmasq, включают диапазон IP-адресов, время аренды, адреса маршрутизаторов и серверов DNS. Параметр dhcp-range
задает диапазон доступных IP, маску подсети и предполагаемое время аренды. Существуют и другие опции, такие как определенные в Dnsmasq параметры (например, dhcp-option
), которые можно настроить для более детального управления.
Пример
В данном сценарии клиента целью является определение времени аренды на уровень около одного дня. Однако, несмотря на выставленную конфигурацию:
dhcp-range=tag:br0,192.168.0.50,192.168.0.80,255.255.255.0,1440m
dhcp-option=tag:br0,3,192.168.0.1
dhcp-lease-max=255
dhcp-authoritative
log-queries
dhcp-option=6,192.168.0.100,192.168.0.1
Dnsmasq продолжает выдавать аренду на 2 минуты.
Применение
Для успешного решения проблемы необходимо рассмотреть несколько шагов:
-
Убедитесь, что изменения в конфигурации применяются: Одна из возможных причин указанной проблемы может заключаться в том, что новые конфигурации Dnsmasq не применились. Причинами этого могут быть ошибки перезапуска службы или некорректные права доступа к файлам конфигурации.
-
Проверка перезапуска Dnsmasq: Убедитесь, что Dnsmasq действительно перезапущен, и изменения применены, через проверку нового PID процесса. Если просто рестарт не помогает, попробуйте перезагрузить весь маршрутизатор, так как некоторые настройки могут быть применены только при полном перезапуске устройства.
-
Проверка работы nmap script: Экспериментально было замечено, что некоторые скрипты диагностики DHCP могут выдавать некорректную информацию. Проверьте, являются ли другие инструменты диагностики DHCP, такие как Wireshark или syslog маршрутизатора, более надежными.
-
Настройка через IANA теги: Потребуется настроить соответствующие параметры через теги IANA, если предыдущие шаги не помогут. Это может требовать настройки
dhcp-option
напрямую, но необходимо убедиться, что они корректно взаимодействуют с другими параметрами конфигурации. -
Логи и диагностика: Включите расширенный логинг, чтобы отследить, какие параметры применяются в момент выдачи DHCPOFFER. Это может пролить свет на проблемное место в конфигурации или в процессе применения настроек.
Если перечисленные шаги не приводят к успеху, стоит рассмотреть возможность обращения к автору прошивки или к более глубокой проверке конфигурационных файлов на предмет ошибок синтаксиса, которые могли бы повлиять на поведение Dnsmasq. Также, может быть полезным проверка работоспособности других компонентов сети: например, убедитесь, что на FritzBox отключены все функции DHCP, чтобы избежать конфликтов.