Вопрос или проблема
Я использую dnsmasq для выдачи IP-адресов для примерно 200 виртуальных серверов. Время аренды бесконечно: dhcp-range=10.0.1.2,10.0.1.254,infinite
Я не знаю, почему, но один виртуальный сервер сменил IP. Допустим, изменился MAC-адрес.
Я хотел, чтобы виртуальный сервер вернул свой старый IP, поэтому я выключил интерфейс и отредактировал /var/lib/misc/dnsmasq.leases (изменил новый/старый IP)
После перезагрузки виртуальный сервер снова получил неправильный новый IP. Поэтому я думаю, что /var/lib/misc/dnsmasq.leases просто файл журнала?!
Я исправил проблему, изменив IP виртуального сервера в консоли – после перезагрузки виртуальный сервер имел старый IP.
Но я хочу понять, как dnsmasq сохраняет информацию “я хочу дать этот IP этому MAC” и как я могу это изменить?!
Файл dnsmasq.leases
подобен базе данных для dnsmasq
, чтобы знать, какому адресу присвоены некоторые другие данные.
Согласно сайтам здесь и здесь, вы можете назначить статический IP для хоста следующим образом:
–dhcp-host=servername,192.168.0.199
–dhcp-host=00:20:e0:3b:13:af,servername,infinite
–dhcp-host=aa:bb:cc:dd:ee:ff,192.168.0.199
Примечание: если вы используете первый вариант, вы должны убедиться, что имя хоста клиентского компьютера совпадает с записью --dhcp-host=servername
в вашем файле dnsmasq.conf
.
Надеюсь, это поможет.
Я забыл остановить службу dnsmasq перед редактированием dnsmasq.leases.
Из https://wiki.gentoo.org/wiki/Dnsmasq
Клиенты, которые обновили сетевой интерфейс, в результате чего изменился MAC-адрес, могут не получить назначенный IP-адрес немедленно. Это связано с тем, что служба dnsmasq предоставила этот IP-адрес старому MAC-адресу и будет ждать, пока аренда этого адреса не истечет, прежде чем переназначить его.
Служба dnsmasq хранит свои аренды в /var/lib/misc/dnsmasq.leases. Если аренду нужно удалить быстрее, остановите службу dnsmasq, удалите аренду из файла dnsmasq.leases и снова запустите службу.
Это напоминание о том, что файл /var/lib/dnsmasq/dnsmasq.leases
(для дистрибутивов RedHat, таких как Fedora, CentOS и AlmaLinux) активен и работает. Даже если вы редактируете файл, информация хранится в активных процессах. Вы должны остановить службу dnsmasq, отредактировать файл, а затем перезагрузить службы.
Вот пример bash-скрипта, чтобы помочь с этим процессом. Пример: ./usr/local/sbin/clear_dnsmasq_lease.sh aa:bb:cc:dd:ee:ff
#!/bin/bash
# FILE: /usr/local/sbin/clear_dnsmasq_lease.sh
# DESC: Удалить записи DHCP/dnsmasq из активного файла аренды
mac="$1"
# Проверка переданных параметров
[ -z "${mac}" ] && echo "Использование: $0 " && exit 1
LF="/var/lib/dnsmasq/dnsmasq.leases"
grep -iq "${mac}" ${LF} || ( echo "${mac} не найден"; exit 1)
echo " Удаление следующих строк . . . "
grep -i "${mac}" ${LF}
now=`date +"%Y-%m-%d_%H%M%S"`
LF_O="/var/lib/dnsmasq/.dnsmasq.leases.${now}"
LF_N="/var/lib/dnsmasq/dnsmasq.leases.new"
cp ${LF} ${LF_O}
systemctl stop dnsmasq
grep -iv "${mac}" ${LF} > ${LF_N}
# diff ${LF} ${LF_N}
mv -vf ${LF_N} ${LF}
systemctl start dnsmasq
# EOF
Другой метод назначения ‘постоянной аренды’ для конкретного MAC-адреса – обновить ваш /etc/dnsmasq.conf
(или /etc/dnsmasq.d/local.conf
, если ваша ОС поддерживает эту функцию).
Пример строки для добавления:
dhcp-host=aa:bb:cc:dd:ee:ff,servername,192.168.0.199
Или
dhcp-host=aa:bb:cc:dd:ee:ff,servername
Затем в /etc/hosts
добавьте
192.168.0.199 servername
Ответ или решение
Настройка DHCP с использованием dnsmasq для стабильных IP-адресов
Ваша задача – обеспечить корректное распределение IP-адресов между виртуальными серверами с использованием dnsmasq. Основной проблемой, с которой вы столкнулись, является случайная смена IP-адреса для одного из серверов из-за изменения его MAC-адреса. Давайте разберёмся с деталями настройки dnsmasq и принципом работы с арендой IP.
Что такое dnsmasq?
Dnsmasq — это легковесный сервер DNS и DHCP, предоставляющий услуги именования и распределения IP-адресов для небольших сетей. Он прост в конфигурации и удобен для использования в виртуализированных средах.
Арендное управление в dnsmasq
Ваша конфигурация:
dhcp-range=10.0.1.2,10.0.1.254,infinite
предполагает, что аренда IP-адресов является бесконечной. Тем не менее, если устройство (в вашем случае — виртуальный сервер) сменит свой MAC-адрес, dnsmasq может не распознать это сразу, и новый IP-адрес может быть назначен другому устройству, оставляя предыдущее соответствие MAC-адреса.
Как dnsmasq управляет арендами
Файл /var/lib/misc/dnsmasq.leases
служит хранилищем активных аренд. Действительно, если вы вносите изменения в этот файл, но dnsmasq продолжает работать, ваши изменения не будут применены, так как служба использует кэшированные данные. Для ручного управления lease-файлом рекомендуется:
-
Остановить dnsmasq:
sudo systemctl stop dnsmasq
-
Внести изменения в
dnsmasq.leases
. -
Затем перезапустить dnsmasq:
sudo systemctl start dnsmasq
Фиксация IP-адреса за MAC-адресом
Чтобы избежать проблем с изменением IP-адресов, лучше всего использовать статическое назначение. Вы можете сделать это, добавив строки в файл конфигурации dnsmasq следующим образом:
dhcp-host=00:20:e0:3b:13:af,servername,infinite
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.0.199
При этом, если в случае изменения MAC-адреса вы всё равно хотите сохранить за устройством прежний IP-адрес, используйте следующий синтаксис:
dhcp-host=aa:bb:cc:dd:ee:ff,servername
Это позволит dnsmasq связать IP-адрес с указанным MAC-адресом, независимо от того, как он изменяется.
Как удалить одну аренду
Если необходимо удалить аренду, можно использовать следующий сценарий:
#!/bin/bash
# Удаление записи аренды по MAC-адресу
mac="$1"
LF="/var/lib/misc/dnsmasq.leases"
if [ -z "${mac}" ]; then
echo "Usage: $0 <mac-address>"
exit 1
fi
if ! grep -iq "${mac}" ${LF}; then
echo "${mac} not found"
exit 1
fi
echo "Removing lease for ${mac}..."
sudo systemctl stop dnsmasq
grep -v "${mac}" ${LF} > /tmp/dnsmasq.leases
mv /tmp/dnsmasq.leases ${LF}
sudo systemctl start dnsmasq
Данный сценарий останавливает dnsmasq, удаляет соответствующую запись и перезапускает сервис.
Заключение
Ваша конфигурация dnsmasq может эффективно предоставлять и управлять IP-адресами для ваших виртуальных серверов, однако важно следовать лучшим практикам управления арендами. Убедитесь, что служба dnsmasq останавливается перед редактированием lease-файла, и фиксируйте ключевые устройства в конфигурации для предотвращения несанкционированной смены IP-адресов.