Назад | Перейти на главную страницу

dnsmasq не отвечает на запросы DHCP, которые не следуют обнаружению DHCP

У меня есть экземпляр dnsmasq работает в сетевом пространстве имен X, и я запускаю dhclient (или любого другого DHCP-клиента) из сетевого пространства имен Y для получения IP-адреса на заданном интерфейсе. Два сетевых пространства имен находятся в одном openvswitch мост, через который они общаются.

я вижу это dnsmasq на ответ требуется время, от 10 до 30 секунд, даже если tcpdump показывает, что все пакеты DHCP оперативно доставляются в целевое пространство имен.

Почему это так долго? Есть ли способ уменьшить эту задержку?

Вот пример из / var / log / syslog, где IP-адрес назначается через 11 секунд:

Apr  4 14:31:27 localhost dhclient: Listening on LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   LPF/_0.ping/ae:ca:22:bc:3c:7b
Apr  4 14:31:27 localhost dhclient: Sending on   Socket/fallback
Apr  4 14:31:27 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:33 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPDISCOVER on _0.ping to 255.255.255.255 port 67 interval 3
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPDISCOVER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPOFFER(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dhclient: DHCPREQUEST on _0.ping to 255.255.255.255 port 67
Apr  4 14:31:48 localhost dhclient: DHCPOFFER from 192.168.31.1
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPREQUEST(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b 
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: DHCPACK(_0.dhcp) 192.168.31.110 ae:ca:22:bc:3c:7b mymachine
Apr  4 14:31:48 localhost dnsmasq-dhcp[11719]: not giving name mymachine to the DHCP lease of 192.168.31.110 because the name exists in /etc/hosts with address 127.0.0.1
Apr  4 14:31:48 localhost dhclient: DHCPACK from 192.168.31.1
Apr  4 14:31:48 localhost dhclient: ntp-servers: expecting at least 4 bytes; got 0
Apr  4 14:31:48 localhost dhclient: bound to 192.168.31.110 -- renewal in 33935 seconds.

В dnsmasq экземпляр запускается с помощью следующей команды:

dnsmasq --dhcp-range=set:tag0,192.168.31.100,192.168.31.150,24h -l /tmp/dnsmasq-leasefile.dhcp.dhcp --dhcp-option=tag:tag0,option:router,192.168.31.2 --dhcp-option=tag:tag0,option:dns-server,9.9.9.9 --dhcp-option=tag:tag0,42

РЕДАКТИРОВАТЬ Хорошо, я запустил его еще несколько раз, и мне кажется, я вижу здесь закономерность. Клиент DHCP начинает с отправки двух запросов DHCP, на которые нет ответа. Как только будет отправлено обнаружение DHCP, dnsmasq ответы. Причина почему dhclient первая попытка DHCP-запроса заключается в том, что он видит предыдущую аренду того же интерфейса в /var/lib/dhcp/dhclient.leases и пытается запросить отображаемый там IP-адрес. Как только я удалю такой файл, ответ от dnsmasq генерируется мгновенно. Я вижу два варианта:

Ответ - использовать --dhcp-authoritative опция в dnsmasq. Проблема заключалась в том, что я каждый раз перезапускал сервер dnsmasq, поэтому у него не было файла аренды, но у dhclient был свой собственный файл аренды. Не имея возможности проверить запрошенный IP-адрес в собственном файле аренды, dnsmasq ждет, пока не будет выдано сообщение обнаружения dhcp.