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

Почему dhclient выдает одноадресный запрос DHCPREQUEST каждые ~ 15 секунд вместо таймеров T1 / T2?

Я использую сервер CentOS 6.2 в качестве шлюза и брандмауэра, а также предоставляю некоторые внутренние службы. Это установка, которую я использовал в течение многих лет с использованием различного оборудования и дистрибутивов (на основе Redhat). Недавно я столкнулся с проблемой подключения к Интернету, и я считаю, что это связано либо с недостатком моего интернет-провайдера (Roadrunner, северная часть штата Нью-Йорк), либо с недостатком моей конфигурации (по умолчанию) для dhclient.

Я не использую NetworkManager на этом сервере, так как конфигурация сети статическая, а сервер работает круглосуточно и без выходных в качестве шлюза. У меня есть конфигурация интерфейса сетевого скрипта sysconfig, как показано ниже:

который настроил интерфейс при загрузке и использовал DHCP с помощью утилиты dhclient. У меня есть действующий скрипт брандмауэра iptables, над которым я постоянно работал в течение многих лет, чтобы обеспечить функциональность маршрутизации / NAT, но это не имеет отношения к моей проблеме.

В течение последних недель или двух (по крайней мере, я видел, что эти записи журнала включаются и выключаются некоторое время), я вижу, что как только аренда DHCP, предлагаемая моим интернет-провайдером, достигает середины, вызывая обновление, dhclient входит в цикл, где каждый Через 15 секунд он отправляет одноадресный запрос DHCPREQUEST записи DHCP-сервера, указанной в файле /var/lib/dhclient/dhclient-eth1.leases (см. Ниже). Это продолжается в течение нескольких часов, пока либо не разорвется сетевое соединение, либо в конечном итоге он не попытается обнаружить широковещательную рассылку и не получит новую аренду должным образом.

Цикл запроса dhclient всегда одноадресный, всегда использует адрес DHCP-сервера, указанный в аренде, которую он пытается продлить, и всегда использует одно и то же значение xid для каждого из этих запросов. Мне интересно, есть ли способ заставить dhclient всегда выдавать широковещательный DHCPDISCOVER вместо одноадресного пакета REQUEST для обновления? Есть ли возможная проблема с конфигурацией или это просто ненадежная служба DHCP Time Warner? Я использовал TWC в качестве своего интернет-провайдера в течение последних 5 лет и никогда не сталкивался с этой проблемой при использовании Linux в качестве шлюза.

Вот мой сценарий настройки интерфейса:

/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=Internet
HWADDR=00:D0:B7:**:**:**
MTU=1500
BOOTPROTO=dhcp
PEERDNS=no
IPV6INIT=no
ONBOOT=yes

Вот пример файла dhclient-eth1.leases (текущий, но цикл запустится через ~ 6-8 часов)

lease {
interface "eth1";
fixed-address 74.***.***.***;
option subnet-mask 255.255.240.0;
option routers 74.***.***.***;
option dhcp-lease-time 43200;
option dhcp-message-type 5;
option domain-name-servers 209.18.47.61,209.18.47.62;
option dhcp-server-identifier 10.111.64.1;
option interface-mtu 576;
option broadcast-address 255.255.255.255;
option domain-name "rochester.rr.com";
renew 3 2012/01/18 21:51:02;
rebind 4 2012/01/19 02:57:58;
expire 4 2012/01/19 04:27:58;
}

и выдержка из / var / log / messages по этой проблеме (начата около 12:30 и продолжается до 11:30 сегодня утром:

... Длинный список DHCPREQUEST почти идентичен приведенному ниже

Jan 17 16:50:59 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:13 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:21 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: DHCPACK from 10.111.64.1 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: bound to 74.69.54.153 -- renewal in 17309 seconds.

Кажется, здесь, наконец, успешно получил DHCPACK после ДЛИННОГО списка попыток

Вчера вечером около 19:30, после записи журнала выше в 16:51 и даже перезагрузил сервер по другим причинам, что вызывает строку REQUEST ниже.

Jan 17 20:11:51 server dhclient[3872]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x4a4507ce)
Jan 17 20:11:51 server dhclient[3872]: DHCPACK from 10.111.64.1 (xid=0x4a4507ce)
Jan 17 20:11:51 server dhclient[3872]: bound to 74.69.54.153 -- renewal in 17073 seconds.
Jan 18 00:56:24 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:56:32 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:56:46 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:57:04 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:57:24 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)

.... пропуск нескольких часов и многих строк из вышеперечисленного, каждые ~ 15 секунд Здесь я вручную переключал интерфейс вниз и вверх.

Jan 18 11:27:29 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:45 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:52 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:58 server dhclient[16174]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x63741216)
Jan 18 11:27:58 server dhclient[16174]: DHCPACK from 10.111.64.1 (xid=0x63741216)
Jan 18 11:27:58 server dhclient[16174]: bound to 74.69.54.153 -- renewal in 19384 seconds.

У меня всегда были проблемы с MTU, связанные с фрагментацией моего брандмауэра, но это не кажется основной причиной здесь, и это будет отдельный вопрос, если таковой имеется.

У меня была такая же проблема с тем же провайдером (RoadRunner). Похоже, что RR предоставляет недопустимый или недоступный IP-адрес хоста с идентификатором dhcp-server. Хотя было бы неплохо, если бы провайдер решил проблему, вы можете добавить в свой /etc/dhcp/dhclient.conf(в вашем дистрибутиве расположение может быть другим):

interface "ethX" {
   supersede dhcp-server-identifier 255.255.255.255;
}

Это приведет к тому, что клиент проигнорирует IP-адрес DHCP-сервера, указанный в ответе, и отправит широковещательную рассылку для DHCPREQUEST. Это взлом. Это, вероятно, нарушает регулирующие RFC, но у меня это работает.

У меня проблема с поставщиком услуг кабельного телевидения. Они не отвечают на одноадресные пакеты DHCPREQUEST. Я использую:

iptables -t nat -A ВЫХОД -d 10.0.0.0/255.0.0.0 -o eth1 -p udp -m udp --dport 67 -j DNAT --to-destination 255.255.255.255

превратить их в трансляции, и проблема исчезнет.

У меня тоже было это, проблема в том, что dhclient отправляет одноадресные (IP-адреса сервера) запросы к интернет-провайдеру, а мой интернет-провайдер не принимает одноадресную только многоадресную рассылку (255.255.255.255), dhclient должен вернуться к многоадресной рассылке, когда одноадресная передача не работает, но это не так похоже, это происходит до повторной привязки или истечения срока действия (не уверен, какой), и это может быть через несколько дней.

Мое решение заключалось в том, чтобы запускать этот скрипт ежедневно с root из / etc / crontab.

#!/bin/bash
/usr/bin/killall -vw dhclient
/sbin/dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0 -cf /etc/dhcp/dhcpd.conf eth0

Первая строка убивает существующий dhclient, который отправляет одноадресные запросы. Вторая строка запускает новый экземпляр, использующий многоадресную рассылку.

сделать скрипт исполняемым

chmod 755 /root/renew.sh

добавьте такую ​​строку в / etc / crontab

10 1    * * *   root /root/renew.sh

Скорее всего, это связано с нечетными правилами брандмауэра или какой-то странной конфигурацией на стороне поставщика услуг, не разрешающей направленные запросы DHCP. Ваш DHCP-клиент, скорее всего, работает правильно.

Когда клиент достигает времени ОБНОВЛЕНИЯ, он отправляет обратно одноадресные DHCPREQUESTS, чтобы попытаться обновить как минимум.

Когда он достигнет времени EXPIRE, он снова начнет вещание. И это то, что мы видим из вставленных вами журналов.

Выполнение чего-то непонятного, например, убийства dhclient, очистки файла аренды и перезапуска dhclient, может заставить все работать. Но на самом деле этого не должно быть.

Есть ли у вас журналы фактического обрыва сетевого подключения?

В моих журналах также был спам DHCPREQUEST (Debian 8). У меня был dhclient (isc-dhcp-client 4.3.1). Моя установка была немного странной, но я решил свои проблемы, просто удалив isc-dhcp-client и установив dhcpcd 6.0.5 (от Роя Марплеса). dhcpcd кажется умнее isc-dhcp-client. Теперь работает как шарм.